Priority Classes
Priority Classes
개념
- 워크로드가 모두 같은 우선순위를 갖는 것이 아니다, 예를들어, 1순위는
kube-apiserver,kube-scheduler,etcd,kubelet등의 쿠버네티스 컴포넌트들, 2순위는 데이터 베이스, 3순위는 중요한 애플리케이션, 4순위는 기타 Jobs가 있을 수 있다. 이럴 때 사용하는 것이Priority Class이다. - 즉, 고우선순위
Pod가 항상 스케줄링되는 것을 보장하기 위해 사용하는 기능이다.
특징
PriorityClass는 특정 네임스페이스에 종속되는 객체가 아니다.PriorityClass의 값은 숫자(정수)로 지정된다.- 숫자가 클수록 우선순위가 높다.
- 범위: -21억(-2147483648) ~ 10억
- Control Plane에 있는 Kubernetes 중요 컴포넌트들은 10억 ~ 21억(+2147483647)의 별도의 높은 우선순위 범위를 사용한다.
Yaml
PriorityClass
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
preemptionPolicy: PreemptLowerPriority
value: 1000
description: "High priority application"
globalDefault: true
apiVersion:scheduling.k8s.io/v1kind:PriorityClassmetadatapreemptionPolicy:PreemptLowerPriority(기본) /NeverPreemptLowerPriority: 리소스가 부족할 경우, 새로운 우선순위가 높은Pod가 기존의 낮은 우선순위의Pod를 종료(evict) 시키고 자리를 차지한다.Never: 우선순위가 높은Pod가 실행되어야하더라도 기존의Pod를 죽이지 않고, 스케줄링 큐에서 기다린다. (단 스케줄링 큐에서는 우선권을 가진다)
value: 여기에 우선순위를 정수로 지정한다.globalDefault:true/falsePod에서priorityClassName이 지정되지 않은 모든Pod의 우선순위는globalDefault가true인PriorityClass의 우선순위를 따른다.globalDefault가true인PriorityClass는 오직 한개만 존재할 수 있다.globalDefault가true인PriorityClass가 존재하지 않으면서,Pod의priorityClassName도 지정되지 않는다면,Pod의 우선순위value는 0으로 지정된다.
Pod
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
priorityClassName: high-priority
specpriorityClassName: 여기에 지정학고자하는PriorityClass의name을 지정한다.- 만약 지정하지 않는다면,
globalDefault가true인PriorityClass를 따르며, 해당PriorityClass가 존재하지 않는다면, 우선순위의value가 0으로 지정된다.
- 만약 지정하지 않는다면,
레퍼런스
- https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)