CKA

(TIL) Kubernetes에서의 Resource Request & Limits

심플코더 2025. 3. 26. 20:53

Intro

Pod는 기본적으로 노드의 자원을 사용하며, 여기서 자원은 주로 CPU와 메모리를 말한다.

스케줄러는 요청된 자원양을 기준으로 Pod의 배치를 결정하며, 해당 조건을 yaml파일에 명시할 때는 pod가 아니라 각 container 단위로 설정된다.

 

Request

request는 최소 보장 자원을 의마한다.

 

resources:
  requests:
    memory: "512Mi"
    cpu: "0.5"

 

위와 같이 설정하였을 때, 스케줄러는 이 값을 기준으로 노드를 선택하며, 최소한으로 보장되는 값이다.

여기서 cpu에 0.5라고 설정하는 것은 500m이라고 설정하는 것과 같다.

 

Limits

limits는 최대 허용 자원을 의미하며, 해당 컨테이너는 이 값을 넘을 수 없다.

 

resources:
  limits:
    memory: "1Gi"
    cpu: "1"

 

CPU가 해당 값을 넘게되면 throttling이 걸리게되며, memory의 경우는 OOMKilled가 이루어지게된다.

 

LimitRange

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-mem-limit
spec:
  limits:
    - default:
        cpu: 500m
        memory: 512Mi
      defaultRequest:
        cpu: 250m
        memory: 256Mi
      max:
        cpu: 1
      min:
        cpu: 100m
      type: Container

 

위와 같이 LimitRange를 설정하면 request-limit이 설정되지 않은 파드에 기본적으로 이 값이 설정된다.

 

ResourceQuota

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-quota
spec:
  hard:
    requests.cpu: "4"
    requests.memory: "4Gi"
    limits.cpu: "10"
    limits.memory: "10Gi"

 

ResourceQuota의 경우 전체 리소스를 제한하는 설정으로, 모든 Pod이 사용하고 있는 총 리소스량을 확인하여 제한한다.