쿠버네티스 - Pod 리소스 우선순위 관리 (QoS Classes)
Kubernetes에서 QoS(Quality of Service) Classes는 클러스터 내에서 Pod의 리소스 우선순위를 관리하는 데 사용된다. 각 파드는 설정된 리소스 요청과 제한 (메모리 및 CPU)에 따라 특정 QoS 클래스를 할당받으며, 이는 클러스터 리소스가 부족할 때 어떤 파드를 먼저 유지하고, 또 어떤 파드를 먼저 종료할지를 결정하는 중요한 기준이 된다.
QoS 클래스 종류
1. Guaranteed
2. Burstable
3. BestEffort
1. Guaranteed
- 이 클래스는 가장 높은 우선순위를 가진다. 리소스 요청과 제한이 모든 컨테이너에 동일하게 설정된 파드에 할당된다.
- Guaranteed 파드는 클러스터에서 다른 파드보다 우선적으로 보호되며, 리소스가 부족해도 가장 마지막에 종료된다.
조건
- 파드의 모든 컨테이너가 동일한 CPU 및 메모리 요청(request)과 제한(limit)을 설정해야 한다.
apiVersion: v1
kind: Pod
metadata:
name: guaranteed-pod
spec:
containers:
- name: container1
image: nginx
resources:
requests:
memory: "200Mi"
cpu: "100m"
limits:
memory: "200Mi"
cpu: "100m"
- 위와 같이 모든 컨테이너의 요청과 제한이 같을 때, 이 파드는 Guaranteed 클래스로 분류된다.
2. Burstable 클래스
Burstable 클래스는 파드에 일부 리소스 요청이 설정된 경우 할당된다. 즉, 요청과 제한이 다르게 설정된 컨테이너가 포함된 파드거나, 일부 컨테이너에만 요청이 설정된 경우이다.
Burstable 클래스 파드는 Guaranteed보다는 낮은 우선순위를 가지지만, BestEffort보다는 높은 우선순위를 가진다.
조건
- 모든 컨테이너에 리소스 요청과 제한이 설정되었으나, 요청과 제한 값이 다르거나 일부 컨테이너만 요청이 설정된 경우
apiVersion: v1
kind: Pod
metadata:
name: burstable-pod
spec:
containers:
- name: container1
image: nginx
resources:
requests:
memory: "100Mi"
cpu: "100m"
limits:
memory: "200Mi"
cpu: "200m"
- name: container2
image: nginx
resources:
requests:
memory: "50Mi"
cpu: "50m"
- 위와 같이 요청과 제한 값이 다르거나 일부 컨테이너에만 설정되면 Burstable 클래스로 분류된다.
3. BestEffort 클래스
BestEffort 클래스는 리소스 요청이나 제한이 전혀 설정되지 않은 파드에 할당된다. 이러한 파드는 리소스 요청이 명시되지 않았기 때문에 클러스터 내에서 가장 낮은 우선순위를 가지고, 리소스 부족 시 가장 먼저 종료 대상이된다.
조건
- 모든 컨테이너에 대해 리소스 요청이나 제한이 전혀 설정되지 않음
apiVersion: v1
kind: Pod
metadata:
name: besteffort-pod
spec:
containers:
- name: container1
image: nginx
QoS 클래스 간 차이점 비교
QoS 클래스 | 리소스 설정 조건 | 우선순위 | 사용 시나리오 |
Guaranteed | 모든 컨테이너에 동일한 리소스 요청과 제한 설정 | 가장 높음 | 리소스 보장이 중요한 필수 서비스 |
Burstable | 일부 또는 모든 컨테이너에 요청 설정. 제한 설정 상이 | 중간 | 유연하게 확장 가능한 서비스 |
BestEffort | 리소스 요청과 제한 설정 없음 | 가장 낮음 | 비필수적인, 리소스 사용량이 적은 작업 |