| 구분 | 결정 주체 | 동작 |
|---|---|---|
| request | kube-scheduler | Pod을 어느 노드에 배치할지 결정하는 기준. kubelet이 해당 양을 컨테이너에 예약 |
| limit | kubelet + 커널(cgroup) | 컨테이너가 사용할 수 있는 상한. 초과 시 throttle 또는 kill |
| 리소스 | 기본 단위 | 비고 |
|---|---|---|
cpu |
core | 물리 코어 또는 vCPU |
memory |
Bytes | |
ephemeral-storage |
Bytes | 노드 로컬 임시 스토리지 |
hugepages-<size> |
Bytes | Linux 전용. overcommit 불가 |
1 = 1 물리 코어 / 1 vCPU — 소수점 허용 (0.5 = 500m)100m = 0.1 CPU. 최소 정밀도 1m500m은 같은 양E P T G M k (10진) / Ei Pi Ti Gi Mi Ki (2진)M(메가바이트) ≠ m(밀리바이트). 400m = 0.4 bytes → 의도한 건 대부분 400Mispec.containers[].resources.requests / .limits에 cpu·memory·ephemeral-storage·hugepages 지정spec:
containers:
- name: app
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
PodLevelResources feature gate)spec.resources로 CPU·Memory 예산을 통째로 선언 가능| 항목 | 적용 방식 |
|---|---|
| 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가 재시작 |
emptyDir 같은 메모리 볼륨에도 적용됨 — kubelet이 tmpfs emptyDir을 컨테이너 메모리 사용량으로 계산InPlacePodVerticalScaling)/resize 서브리소스로 업데이트resizePolicy 필드로 — 변경 시 컨테이너 재시작이 필요한지 제어 가능status에 리소스 사용량 보고emptyDir 주의사항sizeLimit을 지정하지 않으면 — emptyDir 볼륨이 Pod의 memory limit까지 소비 가능ResourceQuota / LimitRange / ValidatingAdmissionPolicy로 namespace·Pod 단위 제한 적용ephemeral-storage 리소스로 request/limit 가능emptyDir 볼륨/var/log/pods 하위)/etc/hosts)