3.2. Pod 배치를 제어하도록 기본 스케줄러 구성
기본 OpenShift Container Platform Pod 스케줄러는 클러스터 내의 노드에 대한 새 Pod 배치를 결정합니다. Pod에서 데이터를 읽고 구성된 정책에 따라 적합한 노드를 찾으려고 합니다. 이 스케줄러는 완전히 독립적이며 독립형/플러그형 솔루션으로 존재합니다. Pod를 수정하지 않고 Pod를 특정 노드에 연결하는 Pod 바인딩만 생성합니다.
스케줄러 정책 구성 기능은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 기술 프리뷰 대체 옵션에 대한 자세한 내용은 스케줄러 프로필을 사용하여 pod 예약을 참조하십시오.
서술자 및 우선순위를 선택하면 스케줄러에 대한 정책이 정의됩니다. 서술자 및 우선순위 목록은 스케줄러 정책 수정을 참조하십시오.
기본 스케줄러 오브젝트 샘플
apiVersion: config.openshift.io/v1 kind: Scheduler metadata: annotations: release.openshift.io/create-only: "true" creationTimestamp: 2019-05-20T15:39:01Z generation: 1 name: cluster resourceVersion: "1491" selfLink: /apis/config.openshift.io/v1/schedulers/cluster uid: 6435dd99-7b15-11e9-bd48-0aec821b8e34 spec: policy: 1 name: scheduler-policy defaultNodeSelector: type=user-node,region=east 2
3.2.1. 기본 예약 이해
기존 일반 스케줄러는 3단계 작업에서 Pod를 호스팅할 노드를 선택하는 기본 플랫폼 제공 스케줄러 엔진에 해당합니다.
- 노드 필터링
- 사용 가능한 노드를 지정된 제약 조건 또는 요구 사항에 따라 필터링합니다. 이 작업은 서술자라는 필터링 함수 목록을 통해 각 노드를 실행하는 방식으로 수행됩니다.
- 필터링된 노드 목록 우선순위 지정
- 이 작업은 0~10 사이의 점수를 지정하는 일련의 priority_ 함수를 통해 수행되는데, 0은 Pod를 호스팅하는 데 적합하지 않음을 나타내고 10은 적합함을 나타냅니다. 스케줄러 구성은 각 우선순위 함수에 간단한 가중치(양의 숫자 값)를 사용할 수도 있습니다. 각 우선순위 함수에서 제공하는 노드 점수에 가중치(대부분의 우선순위에 대한 기본 가중치는 1임)를 곱한 다음 모든 우선순위에서 제공하는 각 노드의 점수를 더하여 결합합니다. 관리자는 이러한 가중치 특성을 사용하여 일부 우선순위에 높은 중요성을 부여할 수 있습니다.
- 최적의 노드 선택
- 노드는 해당 점수에 따라 정렬되며 점수가 가장 높은 노드가 Pod를 호스팅하도록 선택됩니다. 여러 노드의 점수가 동일한 경우 해당 노드 중 하나가 무작위로 선택됩니다.
3.2.1.1. 스케줄러 정책 이해
서술자 및 우선순위를 선택하면 스케줄러에 대한 정책이 정의됩니다.
스케줄러 구성 파일은 스케줄러에서 고려할 서술자 및 우선순위를 지정하는 policy.cfg
라는 JSON 파일입니다.
스케줄러 정책 파일이 없는 경우 기본 스케줄러 동작이 사용됩니다.
스케줄러 구성 파일에 정의된 서술자 및 우선순위는 기본 스케줄러 정책을 완전히 덮어씁니다. 기본 서술자 및 우선순위 중 하나라도 필요한 경우 정책 구성에서 함수를 명시적으로 지정해야 합니다.
스케줄러 구성 맵 샘플
apiVersion: v1
data:
policy.cfg: |
{
"kind" : "Policy",
"apiVersion" : "v1",
"predicates" : [
{"name" : "MaxGCEPDVolumeCount"},
{"name" : "GeneralPredicates"}, 1
{"name" : "MaxAzureDiskVolumeCount"},
{"name" : "MaxCSIVolumeCountPred"},
{"name" : "CheckVolumeBinding"},
{"name" : "MaxEBSVolumeCount"},
{"name" : "MatchInterPodAffinity"},
{"name" : "CheckNodeUnschedulable"},
{"name" : "NoDiskConflict"},
{"name" : "NoVolumeZoneConflict"},
{"name" : "PodToleratesNodeTaints"}
],
"priorities" : [
{"name" : "LeastRequestedPriority", "weight" : 1},
{"name" : "BalancedResourceAllocation", "weight" : 1},
{"name" : "ServiceSpreadingPriority", "weight" : 1},
{"name" : "NodePreferAvoidPodsPriority", "weight" : 1},
{"name" : "NodeAffinityPriority", "weight" : 1},
{"name" : "TaintTolerationPriority", "weight" : 1},
{"name" : "ImageLocalityPriority", "weight" : 1},
{"name" : "SelectorSpreadPriority", "weight" : 1},
{"name" : "InterPodAffinityPriority", "weight" : 1},
{"name" : "EqualPriority", "weight" : 1}
]
}
kind: ConfigMap
metadata:
creationTimestamp: "2019-09-17T08:42:33Z"
name: scheduler-policy
namespace: openshift-config
resourceVersion: "59500"
selfLink: /api/v1/namespaces/openshift-config/configmaps/scheduler-policy
uid: 17ee8865-d927-11e9-b213-02d1e1709840`
- 1
GeneralPredicates
서술자는PodFitsResources
,HostName
,PodFitsHostPorts
,MatchNodeSelector
서술자를 나타냅니다. 동일한 서술자를 여러 번 구성할 수 없기 때문에GeneralPredicates
서술어를 표시된 4개의 서술자와 함께 사용할 수 없습니다.