Pod의 Resource를 제한하지 않을 경우 발생할 수 있는 문제
1) starvation
리소스를 제한하지 않으면 해당 노드에 할당된 컨테이너는 노드의 리소스를 전부 다 사용할 수 있습니다. 따라서 만약 리소스 제한을 두지 않고 특정 호스트에 Pod를 두 개 이상 띄웠을 경우, 하나의 Pod가 노드의 모든 리소스를 사용한다면 새로운 Pod가 스케줄링될 수 없습니다.
2) 보안 관련 이슈
만약 특정 Pod에 보안 관련 버그가 발생해서 해커가 해당 Pod에 디도스 공격을 주어 노드의 모든 리소스를 사용하게 된다면, 다른 Pod들은 스케줄링될 수 없다.
** 따라서 Pod 하나를 띄우더라도 해당 Pod가 리소스를 얼마나 사용할지를 결정하여 limit를 적절하게 걸어주어야 합니다.
1. 리소스 요청 (Requests)
- 정의:
컨테이너가 안정적으로 실행되기 위해 "예약"하는 최소 자원의 양을 지정합니다. - 스케줄링 역할:
스케줄러는 Pod를 노드에 할당할 때 각 컨테이너의 요청 값만큼의 자원이 해당 노드에 존재하는지를 확인합니다. 예를 들어, CPU 요청이 100m, 메모리 요청이 128Mi로 설정되었다면, 스케줄러는 이 노드에 최소한 이 정도의 여유 자원이 있는지를 확인합니다.
ex)
apiVersion: v1
kind: Pod
metadata:
name: resource-demo
spec:
containers:
- name: resource-demo-ctr
image: nginx:1.14
ports:
- containerPort: 80
protocol: TCP
resources:
requests:
cpu: 100m
memory: 125Mi
2. 리소스 제한 (Limits)
- 정의:
컨테이너가 사용할 수 있는 최대 자원의 양을 지정합니다. - 실행 중 관리:
만약 컨테이너가 제한을 초과하는 자원을 사용하려고 하면, CPU의 경우에는 CFS 스케줄러에 의해 throttling(사용량 제한)이 발생하고, 메모리의 경우 제한을 초과하면 OOM(Out Of Memory) 상황이 발생해 컨테이너가 종료될 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: resource-demo
spec:
containers:
- name: resource-demo-ctr
image: nginx:1.14
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
cpu: 1
memory: 500Mi
주의해야할 점
- 조건 별 추가되는 할당
Request 조건만 추가 : Request
Limit 조건만 추가: Request + Limit
Request, Limit 추가 : Request + Limit
Limit 조건만 달았을 시에는 Request, Limit이 동시에 생깁니다. Limit에 설정한 CPU와 memory가 Request에도 자동으로 추가되어 설정이 됩니다.
- Request 용량을 모든 노드들이 할당할 수 없다면?
Pending 상태로 한 노드가 할당 가능한 자원을 확보할때까지 대기하게 됩니다.
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스] Deployment, DaemonSet, StatefulSet 이란? (0) | 2025.03.17 |
---|---|
[쿠버네티스] ReplicationController, ReplicaSet 이란? + 차이점 (0) | 2025.03.09 |
[쿠버네티스] Init,Infra Container 및 Static Pod란? (0) | 2025.03.02 |
[쿠버네티스] Probe란? (Liveness, Readiness, Startup) (0) | 2025.02.25 |
[쿠버네티스] Pod, namespace란 (0) | 2025.02.17 |