•
Pod는 컨테이너가 돌아가는 것 외에 리소스를 추가로 사용한다.
•
컨테이너를 돌리기 위해선 추가적인 자원이 필요하기 때문이다.
Kubernetes에서는 Pod의 오버헤드가 Admission Time(승인 시점) 에 설정되며, 이는 해당 Pod의 RuntimeClass에 연결된 오버헤드 값에 따라 결정된다.
Pod의 오버헤드는 다음과 같은 경우에 고려헤야한다.
•
Pod 스케줄링 : Pod의 컨테이너 요청 합계에 오버헤드를 추가하여 스케줄링에 반영됨
•
Pod Cgroup 크기 조정 : kubelet이 Pod의 Cgroup을 크기 조정할 때 오버헤드를 포함
•
Pod 축출(Eviction) 순위 결정 : 오버헤드를 포함한 전체 리소스 사용량을 고려하여 우선순위를 평가
•
특히 가상머신에서 컨테이너를 돌리는 kata-fc등은 Runtime이 지정한 pod당 extra 리소스를 정해두었다.
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: kata-fc
handler: kata-fc
overhead:
podFixed:
memory: "120Mi"
cpu: "250m"
YAML
복사
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
runtimeClassName: kata-fc # 이 Pod은 'kata-fc' RuntimeClass를 사용하여 실행됨 (가상화 컨테이너 런타임)
containers:
- name: busybox-ctr # 첫 번째 컨테이너: busybox
image: busybox:1.28 # busybox 컨테이너 이미지 사용
stdin: true # 표준 입력을 활성화하여 인터랙티브 셸 실행 가능
tty: true # TTY 지원 활성화
resources:
limits:
cpu: 500m # 이 컨테이너가 사용할 최대 CPU 제한 (500 millicores = 0.5 vCPU)
memory: 100Mi # 최대 메모리 제한 (100MiB)
- name: nginx-ctr # 두 번째 컨테이너: nginx
image: nginx # nginx 컨테이너 이미지 사용
resources:
limits:
cpu: 1500m # 이 컨테이너가 사용할 최대 CPU 제한 (1500 millicores = 1.5 vCPU)
memory: 100Mi # 최대 메모리 제한 (100MiB)
YAML
복사
•
Pod 오버헤드 확인
kubectl get pod test-pod -o jsonpath='{.spec.overhead}'
Shell
복사