TIL

Resource Management for Pods and Containers

Requests and Limits

구분 결정 주체 동작
request kube-scheduler Pod을 어느 노드에 배치할지 결정하는 기준. kubelet이 해당 양을 컨테이너에 예약
limit kubelet + 커널(cgroup) 컨테이너가 사용할 수 있는 상한. 초과 시 throttle 또는 kill

CPU limit 동작

Memory limit 동작

Resource types

리소스 기본 단위 비고
cpu core 물리 코어 또는 vCPU
memory Bytes  
ephemeral-storage Bytes 노드 로컬 임시 스토리지
hugepages-<size> Bytes Linux 전용. overcommit 불가

리소스 단위

CPU

Memory

컨테이너·Pod 리소스 선언

spec:
  containers:
  - name: app
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

Pod-level resource (alpha — PodLevelResources feature gate)

스케줄링

Limits·Requests의 런타임 적용 방식

항목 적용 방식
CPU limit cgroup의 hard ceiling. 스케줄링 슬라이스마다 한도 초과 여부 확인 → 초과 시 cgroup 실행 대기
CPU request 경합 시 가중치(weight)로 작용 — request가 큰 컨테이너가 더 많은 CPU 시간 할당받음
Memory request 주로 스케줄링용. cgroup v2 노드에선 런타임이 memory.min·memory.low 힌트로 활용 가능
Memory limit cgroup memory limit. 초과 시 커널 OOM이 컨테이너 내 프로세스를 kill. PID 1이 죽고 restartable이면 K8s가 재시작

컨테이너 리소스 리사이징

In-place resize (feature gate InPlacePodVerticalScaling)

교체 Pod 발사(replacement) 방식

모니터링

Memory-backed emptyDir 주의사항

Local ephemeral storage