아래 내용은 쿠버네티스 공식 홈페이지의 Kubernetes Scheduler의 내용을 일부 정리한 글입니다.
쿠버네티스에서 스케줄링이란?
-
Kubelet이 실행할 수 있도록 nodes와 pods를 매치시켜주는 것을 말합니다.
스케줄링
-
스케줄러가 node에 할당되지 않는 신규 생성된 pods가 있는지 주시합니다.
-
스케줄러가 node할당이 필요한 pod을 발견했다면, pod을 실행할 수 있는 최적의 node를 찾는 작업을 진행합니다.
-
스케줄러는 스케줄링 원칙을 고려하여 node를 결정합니다.
kube-scheduler
-
쿠버네티스의 기본 스케줄러이며, 컨트롤 플레인(control plane)에 속해 있습니다.
-
커스텀 스케줄러를 추가하여 대체할 수 있도록 설계되어 있습니다.
-
pods에 있는 모든 컨테이너들 및 모든 pod들이 리소스에 대해 각기 다른 요구사항을가지고 있기 때문에,
상세 스케줄링 요구사항들에 따른 nodes 필터링이 필요합니다. -
클러스터에서는 상세 스케줄링 요구사항에 맞는 노드를 적합한 노드들(feasible nodes)이라고 칭합니다.
-
적합한 node가 없는 pod은 스케줄러가 적합한 위치를 찾아주기 전까지 unscheduled 상태로 남아있습니다.
-
스케줄러가 적합한 nodes을 찾은 후에는 Scoring을 위해 사전에 정의된 함수들을 이용하여 nodes의 점수를
계산하고 가장 높은 점수를 받은 node를 선정하여 API 서버에 알립니다. 이러한 과정을 binding 한다고 합니다. -
스케줄링 시 고려하는 내용들
-
individual and collective resource requirements
-
hardware
-
software
-
policy constraints
-
affinity and anti-affinity specifications
-
data locality
-
inter-workload interference
-
etc
-
kube-scheduler의 스케줄링
kube-scheduler는 pod을 위한 node 선정 시 2 단계 과정을 거칩니다.
-
Filtering: pod에 적합한 nodes를 찾는 작업
-
Scoring: Filtering 에 의해서 찾아진 노드들 중 가장 적합한 nodes를 선별하는 작업
https://kubernetes.io/docs/concepts/scheduling/kube-scheduler/