1. PriorityClass의 필요성
- 쿠버네티스 클러스터에는 서로 다른 중요도를 가진 워크로드(컨트롤 플레인, DB, 백그라운드 잡 등)가 함께 실행됨.
- 반드시 실행돼야 하는 고우선순위 워크로드가 있고, 중요하지 않은 저우선순위 워크로드도 있음.
- 이런 경우 PriorityClass를 통해 우선순위를 정해, 중요한 워크로드가 항상 먼저 스케줄링되고 자원이 부족하면 낮은 우선순위를 제거할 수 있도록 함.
2. PriorityClass 기본 개념
- PriorityClass는 클러스터 전체에 적용되는 객체 (Non-Namespace Object).
- 정의 가능한 값 범위:
- 사용자 워크로드: 2,000,000,000 ~ +1,000,000,000
- 시스템 크리티컬(컨트롤 플레인 등): 약 2,000,000,000 값 사용
- 큰 숫자일수록 우선순위가 높음.
3. PriorityClass 생성 방법
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000 # 우선순위 숫자
globalDefault: false # 기본값 여부 (오직 하나만 true 가능)
description: "Priority for critical workloads"
- 생성 후, Pod spec에
priorityClassName을 지정해 적용:
spec:
containers:
- name: nginx
image: nginx
ports:
- containerports: 8080
priorityClassName: high-priority
4. 기본 Priority
- Pod에 별도 PriorityClass 지정이 없으면 기본값은 0.
- 만약 기본 우선순위를 변경하고 싶다면,
globalDefault: true 로 설정한 PriorityClass를 정의해야 함.
- 단, globalDefault는 하나의 PriorityClass에만 허용.