Kubernetes
스케줄링이란 kubelet
이 Pod
를 실행할 수 있도록 Pod
가 Node
에 적합한지 확인하는 것을 의미하며, Kubernetes
에서 이런 스케줄링을 담당하는 컴포넌트를 Scheduler
라고 합니다.
kube-scheduler
는 Kubernetes
의 기본 Scheduler
이며 Master Node
(Control Plane
)의 일부로 실행됩니다.
또한 원하거나 필요에 따라 자체 스케줄링 컴포넌트를 만들고 대신 사용할 수 있도록 설계되었습니다.
Scheduler
동작방식Scheduler
는 새로 생성된 모든 Pod
나 예약되지 않은 다른 Pod
에 대해서 실행할 최적의 Node
를 선택합니다.
하지만, Pod
의 모든 컨테이너는 리소스에 대한 요구사항이 다르며 모든 Pod
들도 요구사항이 다릅니다. 따라서 Pod
를 배포하기 위해서는 기존의 Node
들이 스케줄링 요구사항에 따라 필터링 되어야 합니다.
Cluster
에서 Pod
에 대한 스케줄링 요구사항을 충족하는 Node
를 실행가능한(feasible)Node
라고 합니다. 만약 적합한 Node
가 존재하지 않을 경우 Scheduler
가 배치할 수 있을 때 까지 Pod
가 스케줄되지 않은 상태로 유지됩니다.
Scheduler
는 Pod
가 실행 가능한 Node
를 찾은 다음 실행 가능한 Node
의 점수를 측정하는 기능 셋을 수행하고, 실행 가능한 Node
중에서 가장 높은 점수를 가진 Node
를 선택하여 Pod
를 실행합니다.
그리고 Pod
를 바인딩 하기 위해 api-server
에 자신이 선정한 Node
의 정보를 전달합니다.
Scheduler
는 어떤 Pod
를 어떤 Node
에 배치할지 결정하는 역할만 할 뿐 실제로 배치하는 것은 kubelet
의 역할입니다.
Kubernetes
Cluster
가 생성될 때 kube-scheduler
가 기본 Scheduler
로 생성는데 사용자는 구성파일을 통해 Scheduler
의 동작을 사용자 정의 할 수 있습니다.
참고 : 스케줄링 구성 문서