Pod는 우선 순위를 가질 수 있습니다. 우선순위는 다른 파드에 대한 상대적인 파드의 중요성을 나타냅니다. 즉, 파드를 스케줄링할 수 없는 경우, 스케줄러는 우선순위가 낮은 파드를 먼저 빼내어 보류 중인 파드를 스케줄링
할 수 있도록 합니다.
프라이어리티클래스는 프라이어리티클래스 이름에서 우선순위의 정수 값으로의 매핑
을 정의하는 네임스페이스가 아닌(non-namespaced) 오브젝트
입니다. 오브젝트의 메타데이터의 name
필드에 지정된다. 값은필수 value
필드에 지정되어 있습니다. 값이 클수록, 우선순위가 높습니다. 프라이어리티 클래스 Object의 이름은 유효한 DNS 서브 도메인 이름이어야하며, system- 접두사를 붙일 수 없습니다.
PriorityClass 두 개의 필드
언제 사용해야 하는지를 클러스터 사용자에게 알려
주기 위한 것 입니다.PriorityClass Example
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "이 프라이어리티클래스는 XYZ 서비스 파드에만 사용해야 한다."
globalDefault
가 true
로 설정된 프라이어리티클래스를 추가해도 기존 파드의 우선순위는 변경되지 않습니다
. 이러한 프라이어리티클래스의 값은 프라이어리티클래스를 추가한 후 생성된 파드에만 사용됩니다.preemptionPolicy
: Never를 가진 파드는 낮은 우선순위 파드의 스케줄링 대기열의 앞쪽에 배치되지만, 그 파드는 다른 파드를 축출할 수 없습니다. 스케줄링 대기 중인 비-선점 파드는 충분한 리소스가 확보되고 스케줄링될 수 있을 때까지 스케줄링 대기열에 대기합니다.
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority-nonpreempting
value: 1000000
preemptionPolicy: Never
globalDefault: false
description: "이 프라이어리티클래스는 다른 파드를 축출하지 않는다."
cat << EOF > priority.yaml
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should only be used for XYZ service pods."
EOF
kubectl apply -f priority.yaml
cat << EOF > pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
priorityClassName: high-priority
EOF
kubectl apply -f pod.yaml