Search

Kube Scheduler

Created
2023/08/10 11:37
Tags
k8s
CKA
Mumshad Mannambeth
Core Concept

1) About

Kube API Server에서 보았던 것처럼 Kube Scheduler는 생성된 Pod가 어느 노드로 가야할지 정하는 역할을 수행
이 때 노드의 배정이 곧 노드의 배치로 이어지는 것은 아니고, Kube Scheduler는 문자 그대로 Pod가 어느 노드에 배정되어야 하는지만 결정
Kube Scheduler의 존재 이유는 Pod가 임의의 노드에 배치되어서 안 되기 때문
생성된 Pod가 어느 노드에 위치해야 하는지는 관리자의 기준에 따라 달라지겠지만, 단순한 예시로는 각 노드의 자원량 다른 경우에 Pod를 구성하는 Container들의 자원 요구량이 명확한 경우 이를 효율적으로 배치할 수 있어야 함(이 경우의 노드 배치 기준은 자원 요구량이 됨)
기준이 어떻든 간에 Kube Scheduler가 Pod를 노드에 배정하는 과정은 Filtering → Ranking으로 이뤄짐
위의 자원 요구량을 다시 기준으로 삼았을 때 Pod가 요구하는 자원량이 10이라면, Filtering 과정에서는 10보다 작은 자원량을 가진 노드는 배제됨
그리고 10 보다 큰 자원량을 가진 노드들 중에서는 요구량을 빼고 남은 자원의 가용량이 높은 노드를 1순위로 선정하게 됨 (이러한 기준은 어떤 설정 값을 주냐에 따라 달라질 수 있음)
실제로 자원 요구량이라는 Resource Requirements and Limits외에도 Taints and Tolerations, Node Selectors and Affinity 등의 기준이 있음

2) System

클러스터 내에서 Kube Scheduler가 어떻게 설정되었는지 보고 싶다면 확인할 수 있음 (단, 클러스터를 어떻게 구성했는지에 달려 있는데 kubeadmin을 사용한 경우와 그렇지 않은 경우로 나뉨)
kubeadmin을 사용한 경우엔 Kube Scheduler를 마스터 노드 내에 kube-system 네임스페이스의 Pod로써 배포하게 되는데, /etc/kubernetes/manifests/kube-scheduler.yaml 라는 Pod 정의 파일을 보면 Kube Scheduler 설정 값들을 확인할 수 있음
kubeadmin을 사용하지 않은 경우엔 Kube Scheduler를 Pod가 아닌 별도의 데몬으로 구동되기 때문에 /etc/systemd/system/kube-scheduler.service 경로의 서비스 정의 파일을 통해 설정 값을 확인할 수 있음
*혹은 마스터 노드 내에서 ps -aux | grep kube-scheduler를 통해 Kube Scheduler를 구동한 옵션들을 확인할 수 있음