Cloud/k8s-CKA

[CKA] 10. Namespace resource 제어 방법

jinkwon.kim 2023. 3. 4. 07:52
728x90
반응형

개요

k8s에서 namespace에 pod를 생성할 때 기본적으로 사용할 resource를 명시적으로 제한할 수가 있습니다. 

본 Post는 해당 방벙을 알아보고 검증하는 방법을 알아보겠습니다.

관련 설정 URL

https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/

 

Configure Default Memory Requests and Limits for a Namespace

Define a default memory resource limit for a namespace, so that every new Pod in that namespace has a memory resource limit configured.

kubernetes.io

Namespace 만들기

kubectl create namespace default-mem-example

Memory 제한

설정

kind가 LimitRange입니다.

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default: # 메모리 사용량 상한 값 
      memory: 512Mi
    defaultRequest: #메모리 기본 요청량 값
      memory: 256Mi
    type: Container

Pod 적용

Pod 내용

apiVersion: v1
kind: Pod
metadata:
  name: default-mem-demo
spec:
  containers:
  - name: default-mem-demo-ctr
    image: nginx

Pod 적용

kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod.yaml --namespace=default-mem-example

검증

kubectl get pod default-cpu-demo --output=yaml --namespace=default-cpu-example

예외 상황

1. Pod에 Limit 설정 이 존재하면 Requset 설정은 Pod의 Limit 값으로 동일하게 설정됩니다. 

2. Pod에 Request 설정 만 존재하면 Limit 설정은 namespace의 default Limit 값으로 설정 됩니다. 

결론 Pod의 Resource제한이 최우선입니다. 

CPU 제한

설정

kind가 LimitRange입니다.

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
spec:
  limits:
  - default: # 기본 상한 값 
      cpu: 1
    defaultRequest: # 기본 사용량 요청 값
      cpu: 0.5
    type: Container

Pod 적용

Pod 내용

apiVersion: v1
kind: Pod
metadata:
  name: default-cpu-demo-3
spec:
  containers:
  - name: default-cpu-demo-3-ctr
    image: nginx
    resources:
      requests:
        cpu: "0.75"

Pod 적용

kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-3.yaml --namespace=default-cpu-example

검증

kubectl get pod default-cpu-demo-3 --output=yaml --namespace=default-cpu-example

예외 상황

1. Pod에 Limit 설정 이 존재하면 Requset 설정은 Pod의 Limit 값으로 동일하게 설정됩니다.

2. Pod에 Request 설정 만 존재하면 Limit 설정은 default Limit 값으로 설정됩니다. 

결론 Pod의 Resource제한이 최우선입니다. 

유의사항 

resource관련 사항은 kubect edit 로 수정 불가능 합니다. 수정시 에러발생합니다. 

수정 하고 싶으시면 

#kubectl get pod webapp -o yaml > my-new-pod.yaml 

을 사용하여 따로 yaml로 빼낸후 수정 후 다시 배포 해야 합니다. 

정리

resource 제한은 Pod를 통해서 직접 설절 할 수있지만 Namespace단위에도 공통적으로 설정 할 수있습니다.

Next Post

[CKA] 11. DaemonSet

728x90
반응형