
Pod Scheduling에 대해 공부한 내용을 정리한 글입니다.
쿠버네티스 공식 홈페이지 - Kubernetes Scheduler
(https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/)를 참고하여 진행하였습니다.
또한, 마스터 노드1, 워커노드 2로 실습 진행하였습니다.
🤣🤩😊CKA 자격증 준비 및 쿠버네티스 공부 정리입니다.
지난 포스팅인 labels and selectors에 대해서 공부하던 중 나왔던 개념인 nodeselector, 그리고 pod가 어떻게 할당되는지 자세하게 공부하고 싶어서 알아보기로 하였습니다.
도대체 pod는 어떻게 node에 할당이 되는 것인가요?

쿠버네티스에서 kube-scheduler는 쿠버네티스의 기본 스케줄러입니다.
Pod가 새롭게 생성되면 Scheduler를 통해서 Pod가 실행될 노드를 결정합니다.
모든 Pod는 scheduler에 의해서 최적의 노드가 결정되고 실행됩니다.
클러스터에서 pod의 예약 요구 사항을 충족하는 노드를 실행 가능한 노드라고 합니다. 적합한 노드가 없으면 scheduler가 pod를 배치할 수 있을 때까지 포드는 예약되지 않은 상태로 유지됩니다.
scheduler는 pod에 요구사항에 맞는 노드를 찾아서 적절한 로직을 통해 노드에 점수를 부여하고, 최고의 점수를 갖는 노드에 Pod를 할당합니다.
스케줄링 결정을 위해 고려해야 할 요소에는 개별 및 집합적 리소스 요구 사항, 하드웨어/소프트웨어, policy contraints, affinity 와 anti-affinity spec, local data, 워크로드 간 간섭 등이 포함됩니다.
- Filtering
- Scoring
Filtering 단계에서는 Pod를 예약할 수 있는(요구사항에 맞는) 노드 집합을 찾습니다. 예를 들어 PodFitsResources 필터는 후보 노드에 포드의 특정 리소스 요청을 충족하기에 충분한 사용 가능한 리소스가 있는지 확인합니다. 이 단계 후에 노드 목록에는 적합한 노드가 포함되고, 목록이 비어있으면 포드를 예약할 수 없는 상태가 됩니다.
Kube-Scheduler가 Worker Node의 리소스 상태를 파악하는 방법은
Topology Filter, Volume Filter, Resource Filter, 3가지가 있습니다.
Scoring 단계에서 scheduler는 필터링한 노드 중에서 점수를 매겨 노드별로 점수를 매깁니다.
마지막으로 kube-scheduler는 순위가 가장 높은 노드에 Pod를 할당합니다. 점수가 동일한 노드가 두 개 이상 있는 경우, 무작위로 선택합니다.
그 중에서 저는 Assigning Pods to Nodes에 대해 공부를 하고 있기 때문에
node Affinity, pod Affinity, taints, nodeSelector에 대해 공부를 해보겠습니다.