-
Priority Classeskubernetes/CKA 2025. 12. 5. 14:04
Priority Classes
PriorityClass란 Kubernetes에서 Pod의 우선순위(Priority) 를 정의하는 객체입니다.
우선순위가 높은 Pod일수록, 클러스터 자원이 부족할 때 스케줄링에서 우선권을 갖고,심지어 낮은 우선순위 Pod를 Evict(축출) 시켜 자원을 확보할 수도 있습니다.
✅ PriorityClass가 왜 필요할까?
클러스터 자원이 부족한 상황에서:
- 중요한 시스템 Pod(예: CoreDNS, Fluentd, Ingress Controller)는 살아 있어야 하고
- 덜 중요한 워크로드는 죽어도 괜찮을 수 있음
→ 이런 상황에서 "Pod마다 중요도" 를 설정하는 기능이 바로 PriorityClass.
✅ 동작 방식
PriorityClass를 만들면 value 라는 숫자를 지정합니다.
PriorityClass 이름 값(value) 의미 system-cluster-critical 2000000000 시스템 핵심 Pod system-node-critical 2000001000 노드 핵심 Pod custom-priority 예: 1000 사용자가 생성한 우선순위 숫자가 클수록 우선순위가 높음
Pod 설정에서 아래처럼 지정합니다:
✅ 자원이 부족하면 어떻게 되나?
✔ 1) 스케줄링 우선순위
우선순위 높은 Pod가 먼저 노드에 배치됨.
✔ 2) Preemption(선점)
노드에 공간이 부족하면 Kubernetes가:
- 낮은 priority Pod를 Evict → 종료
- 높은 priority Pod를 살림
✅ 예시 (직접 PriorityClass 만들기)
apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 100000 globalDefault: false description: "High priority for critical workload"Pod에서 사용:
apiVersion: v1 kind: Pod metadata: name: priority-test spec: priorityClassName: high-priority containers: - name: app image: nginx
🔥 한 줄 요약
PriorityClass = Pod의 중요도(우선순위)를 숫자로 표현하여,
자원 부족 시 높은 우선순위 Pod가 살아남도록 하는 Kubernetes 기능
PreemptLowerPriority
preemptLowerPriority는 Kubernetes PriorityClass에서 사용되는 파라미터로,
우선순위가 낮은 Pod를 축출(preempt)할 수 있는지 여부를 결정하는 옵션입니다.
🔹 preemptLowerPriority: true
➡️ 이 PriorityClass를 가진 Pod가 스케줄될 때,
자원의 여유가 없다면 더 낮은 priority의 Pod를 강제로 쫓아내고(OOMKILL 아님, eviction임) 자기 자신을 스케줄합니다.
- 높은 우선순위 Pod = 절대적으로 먼저 배치되어야 함
- 낮은 우선순위 Pod = 밀려날 수 있음
🔹 preemptLowerPriority: false
➡️ 우선순위는 높지만, 낮은 priority Pod를 쫓아내지 않음
➡️ 자리가 없으면 그냥 Pending 상태로 기다림.
👍 언제 쓰나?
✔ mission-critical 워크로드
- 로그 수집 에이전트가 죽어도
- 트래픽 처리 Pod(예: payment, gateway)는 절대 살아있어야 할 때
➡️ critical priority class를 만들고 preemptLowerPriority: true 설정
✔ 무조건 안정적이어야 하는 시스템 Pod (Kube-System에서 많이 씀)
'kubernetes > CKA' 카테고리의 다른 글
Multiple Scheduler (0) 2025.12.05 틀린 문제 #5. Priority Classes (0) 2025.12.05 틀린 문제 #4 Static Pod (0) 2025.12.05 Static pod (0) 2025.12.05 틀린 문제 # DaemonSet (0) 2025.12.05