Search

Manual Scheduling

Created
2023/09/30 08:59
Tags
k8s
CKA
Mumshad Mannambeth
Scheduling
스케줄링의 방식은 1) 생성된 Pod에서 nodeName이 존재하지 않는 Pod를 찾고, 2) 해당 Pod를 대상으로 스케줄링 알고리즘을 수행, 3) 배정된 노드를 nodeName에 기입의 순서로 이뤄짐
만일 스케줄러 없이 수동으로 노드 배정을 하고 싶은 경우엔, 직접 노드를 정하고 이를 nodeName에 기입하면 해당 노드로 Pod가 배정됨
올바른 Pod의 생성 순서는 Pending 상태의 Pod를 마스터 노드에 생성 → 스케줄링 및 노드 배정 → 마스터 노드의 Pod를 삭제 → Kubelet에 의해 배정된 노드 내에서 Pod를 생성
이와 같은 절차는 Pod를 생성하는 정의 (예를 들어 yaml 파일)를 기반으로 하기 때문에 한 번 Pod가 생성된 경우 정의 파일 내에 노드를 변경하더라도 반영되지 않음
따라서 nodeName을 수정하여 반영하고 싶다면, 기존 Pod를 삭제하고 변경된 정의를 기준으로 다시 생성해야함
** 스케줄링이 되지 않은 Pod는 Pending 상태로 마스터 노드에 존재
** Pod 자체를 다른 노드로 옮기면 되지 않나라는 고민이 들 수 있지만, Pod는 특정 노드에 종속된 하나의 프로세스에 불과하기 때문에 노드를 변경하는 것은 불가능
** 굳이 마스터 노드와 배정된 노드에 Pod를 각각 한 번씩 생성하는 과정을 거치는 이유는 쿠버네티스의 아키텍쳐와 디자인에 기인한 것으로 추정되고, 마스터 노드와 워커 노드의 모델 일관성과 코드 일관성, 인터페이스 일관성을 의식하여 높은 확장성과 관리 단순화를 노린 것이 해당 현상으로 나타난 것 같음
kubectl get pod —namespace=kube-system
위 명령어로 스케줄러 유무를 확인할 수 있음