2.11. Pod 예약 결정에 Pod 우선순위 포함
클러스터에서 Pod 우선순위와 선점을 활성화할 수 있습니다. 클러스터에서 Pod 우선순위 및 선점 기능을 활성화할 수 있습니다. Pod 우선순위는 다른 Pod를 기준으로 특정 Pod의 중요도를 나타내며 해당 우선순위에 따라 Pod를 대기열에 넣습니다. Pod 선점을 사용하면 클러스터에서 우선순위가 낮은 Pod를 제거하거나 선점할 수 있으므로 적절한 노드 Pod 우선순위에 사용 가능한 공간이 없는 경우 우선순위가 더 높은 Pod를 예약할 수 있습니다. 또한 Pod 선점은 Pod의 예약 순서 및 노드의 리소스 외부 제거 순서에 영향을 미칩니다.
우선순위 및 선점 기능을 사용하려면 Pod의 상대적 가중치를 정의하는 우선순위 클래스를 생성합니다. 그런 다음 Pod 사양의 우선순위 클래스를 참조하여 예약에 해당 값을 적용합니다.
2.11.1. Pod 우선순위 이해 링크 복사링크가 클립보드에 복사되었습니다!
Pod 우선순위 및 선점 기능을 사용하면 스케줄러에서 보류 중인 Pod를 우선순위에 따라 정렬하고, 보류 중인 Pod는 예약 큐에서 우선순위가 더 낮은 다른 대기 중인 Pod보다 앞에 배치됩니다. 그 결과 예약 요구 사항이 충족되는 경우 우선순위가 높은 Pod가 우선순위가 낮은 Pod보다 더 빨리 예약될 수 있습니다. Pod를 예약할 수 없는 경우에는 스케줄러에서 우선순위가 낮은 다른 Pod를 계속 예약합니다.
2.11.1.1. Pod 우선순위 클래스 링크 복사링크가 클립보드에 복사되었습니다!
네임스페이스가 지정되지 않은 오브젝트로서 이름에서 우선순위 정수 값으로의 매핑을 정의하는 우선순위 클래스를 Pod에 할당할 수 있습니다. 값이 클수록 우선순위가 높습니다.
우선순위 클래스 오브젝트에는 1000000000(10억)보다 작거나 같은 32비트 정수 값을 사용할 수 있습니다. 선점되거나 추방되어서는 안 되는 중요한 포드에 대해 10억 이상의 숫자를 예약합니다. 기본적으로 OpenShift Container Platform에는 중요한 시스템 Pod의 예약을 보장하기 위해 우선순위 클래스가 2개 예약되어 있습니다.
$ oc get priorityclasses
출력 예
NAME VALUE GLOBAL-DEFAULT AGE
system-node-critical 2000001000 false 72m
system-cluster-critical 2000000000 false 72m
openshift-user-critical 1000000000 false 3d13h
cluster-logging 1000000 false 29s
system-node-critical - 이 우선순위 클래스의 값은 2000001000이며 노드에서 제거해서는 안 되는 모든 Pod에 사용합니다. 이 우선순위 클래스를 가진 포드의 예로는
ovnkube-node등이 있습니다. 대다수의 중요한 구성 요소에는 기본적으로system-node-critical우선순위 클래스가 포함됩니다. 예를 들면 다음과 같습니다.- master-api
- master-controller
- master-etcd
- OVN-Kubernetes
- sync
system-cluster-critical - 이 우선순위 클래스의 값은 2000000000(10억)이며 클러스터에 중요한 Pod에 사용합니다. 이 우선순위 클래스가 있는 Pod는 특정 상황에서 노드에서 제거할 수 있습니다. 예를 들어
system-node-critical우선순위 클래스를 사용하여 구성한 Pod가 우선할 수 있습니다. 그러나 이 우선순위 클래스는 예약을 보장합니다. 이 우선순위 클래스를 사용할 수 있는 Pod의 예로는 fluentd, Descheduler와 같은 추가 기능 구성 요소 등이 있습니다. 대다수의 중요한 구성 요소에는 기본적으로system-cluster-critical우선순위 클래스가 포함됩니다. 예를 들면 다음과 같습니다.- fluentd
- metrics-server
- Descheduler
-
openshift-user-critical - 리소스 소비를 바인딩할 수 없고 예측 가능한 리소스 소비 동작이 없는 중요한 포드에
prioritizationClassName필드를 사용할 수 있습니다.openshift-monitoring및openshift-user-workload-monitoring네임스페이스에 있는 Prometheus 포드는openshift-user-criticalprioritiesClassName을사용합니다. 모니터링 워크로드는 첫 번째prioritizationClass로system-critical을사용하지만 모니터링이 과도한 메모리를 사용하고 노드가 해당 메모리를 제거할 수 없는 경우 문제가 발생합니다. 결과적으로 모니터링의 우선순위가 낮아져 스케줄러가 유연성을 갖게 되고, 중요한 노드가 계속 작동할 수 있도록 무거운 작업 부하를 이리저리 옮겨가게 됩니다. - cluster-logging - 이 우선순위는 Fluentd에서 Fluentd Pod가 다른 앱보다 먼저 노드에 예약되도록 하는 데 사용합니다.
2.11.1.2. Pod 우선순위 이름 링크 복사링크가 클립보드에 복사되었습니다!
우선순위 클래스가 한 개 이상 있으면 Pod 사양에서 우선순위 클래스 이름을 지정하는 Pod를 생성할 수 있습니다. 우선순위 승인 컨트롤러는 우선순위 클래스 이름 필드를 사용하여 정수 값으로 된 우선순위를 채웁니다. 이름이 지정된 우선순위 클래스가 없는 경우 Pod가 거부됩니다.