해당 문서의 쿠버네티스 버전: v1.19

Kubernetes v1.19 문서는 더 이상 적극적으로 관리되지 않음. 현재 보고있는 문서는 정적 스냅샷임. 최신 문서를 위해서는, 다음을 참고. 최신 버전.

스케줄링 정책

스케줄링 정책을 사용하여 kube-scheduler가 각각 노드를 필터링하고 스코어링(scoring)하기 위해 실행하는 단정(predicates)우선순위(priorities) 를 지정할 수 있다.

kube-scheduler --policy-config-file <filename> 또는 kube-scheduler --policy-configmap <ConfigMap>을 실행하고 정책 유형을 사용하여 스케줄링 정책을 설정할 수 있다.

단정

다음의 단정 은 필터링을 구현한다.

  • PodFitsHostPorts: 파드가 요청하는 파드의 포트에 대해 노드에 사용할 수 있는 포트(네트워크 프로토콜 종류)가 있는지 확인한다.

  • PodFitsHost: 파드가 호스트 이름으로 특정 노드를 지정하는지 확인한다.

  • PodFitsResources: 파드의 요구 사항을 충족할 만큼 노드에 사용할 수 있는 리소스(예: CPU 및 메모리)가 있는지 확인한다.

  • MatchNodeSelector: 파드의 노드 셀렉터가 노드의 레이블과 일치하는지 확인한다.

  • NoVolumeZoneConflict: 해당 스토리지에 대한 장애 영역 제한이 주어지면 파드가 요청하는 볼륨을 노드에서 사용할 수 있는지 평가한다.

  • NoDiskConflict: 요청하는 볼륨과 이미 마운트된 볼륨으로 인해 파드가 노드에 적합한지 평가한다.

  • MaxCSIVolumeCount: 연결해야 하는 CSI 볼륨의 수와 구성된 제한을 초과하는지 여부를 결정한다.

  • CheckNodeMemoryPressure: 노드가 메모리 압박을 보고하고 있고, 구성된 예외가 없는 경우, 파드가 해당 노드에 스케줄되지 않는다.

  • CheckNodePIDPressure: 노드가 프로세스 ID 부족을 보고하고 있고, 구성된 예외가 없는 경우, 파드가 해당 노드에 스케줄되지 않는다.

  • CheckNodeDiskPressure: 노드가 스토리지 압박(파일시스템이 가득차거나 거의 꽉 참)을 보고하고 있고, 구성된 예외가 없는 경우, 파드가 해당 노드에 스케줄되지 않는다.

  • CheckNodeCondition: 노드는 파일시스템이 완전히 가득찼거나, 네트워킹을 사용할 수 없거나, kubelet이 파드를 실행할 준비가 되지 않았다고 보고할 수 있다. 노드에 대해 이러한 조건이 설정되고, 구성된 예외가 없는 경우, 파드가 해당 노드에 스케줄되지 않는다.

  • PodToleratesNodeTaints: 파드의 톨러레이션이 노드의 테인트를 용인할 수 있는지 확인한다.

  • CheckVolumeBinding: 파드가 요청한 볼륨에 적합할 수 있는지 평가한다. 이는 바인딩된 PVC와 바인딩되지 않은 PVC 모두에 적용된다.

우선순위

다음의 우선순위 는 스코어링을 구현한다.

  • SelectorSpreadPriority: 동일한 서비스, 스테이트풀셋(StatefulSet) 또는 레플리카셋(ReplicaSet)에 속하는 파드를 고려하여, 파드를 여러 호스트에 파드를 분산한다.

  • InterPodAffinityPriority: 선호된 파드간 어피니티와 안티-어피니티를 구현한다.

  • LeastRequestedPriority: 요청된 리소스가 적은 노드를 선호한다. 즉, 노드에 배치되는 파드가 많고, 해당 파드가 사용하는 리소스가 많을수록 이 정책이 부여하는 순위가 낮아진다.

  • MostRequestedPriority: 요청된 리소스가 가장 많은 노드를 선호한다. 이 정책은 전체 워크로드 세트를 실행하는 데 필요한 최소 노드 수에 스케줄된 파드를 맞춘다.

  • RequestedToCapacityRatioPriority: 기본 리소스 스코어링 기능을 사용하여 ResourceAllocationPriority에 기반한 requestedToCapacity를 생성한다.

  • BalancedResourceAllocation: 균형 잡힌 리소스 사용의 노드를 선호한다.

  • NodePreferAvoidPodsPriority: 노드 어노테이션 scheduler.alpha.kubernetes.io/preferAvoidPods에 따라 노드의 우선순위를 지정한다. 이를 사용하여 두 개의 다른 파드가 동일한 노드에서 실행되면 안된다는 힌트를 줄 수 있다.

  • NodeAffinityPriority: PreferredDuringSchedulingIgnoredDuringExecution에 표시된 노드 어피니티 스케줄링 설정에 따라 노드의 우선순위를 지정한다. 이에 대한 자세한 내용은 노드에 파드 할당하기에서 확인할 수 있다.

  • TaintTolerationPriority: 노드에서 용인할 수 없는 테인트 수를 기반으로, 모든 노드의 우선순위 목록을 준비한다. 이 정책은 해당 목록을 고려하여 노드의 순위를 조정한다.

  • ImageLocalityPriority: 해당 파드의 컨테이너 이미지가 이미 로컬로 캐시된 노드를 선호한다.

  • ServiceSpreadingPriority: 특정 서비스에 대해, 이 정책은 해당 서비스에 대한 파드가 서로 다른 노드에서 실행되는 것을 목표로 한다. 해당 서비스에 대한 파드가 이미 할당되지 않은 노드에 스케줄링하는 것을 선호한다. 전반적인 결과는 서비스가 단일 노드 장애에 대해 더 탄력적이라는 것이다.

  • EqualPriority: 모든 노드에 동일한 가중치를 부여한다.

  • EvenPodsSpreadPriority: 선호된 파드 토폴로지 분배 제약 조건을 구현한다.

다음 내용

최종 수정 October 16, 2020 at 9:54 AM PST: Third Korean l10n work for release-1.19 (a6566dc277)