목차
How scheduling works
What to Schedule
•
모든 Pod는 nodeName이라는 필드 존재
◦
기본으로 설정되어있지 않음
◦
Pod Manifest 파일을 만들 때 지정하지 않음
▪
쿠버네티스에서 자동으로 추가함
•
스케줄러에서는 nodeName이 없는 것을 찾음
◦
스케줄링에 대한 후보(candidates)들임
Which node to schedule
•
스케줄링 알고리즘을 통해 Pod의 올바른 Node를 식별
•
식별이 완료되면 Node에 Pod를 지정
(Schedule) Bind Pod to Node
•
바인딩 개체를 만들어 nodeName 속성을 설정해 노드에 Pod를 지정
No Scheduler
•
노드를 모니터하고 스케줄링할 스케줄러가 없다면 Pod는 보류(Pending) 상태가 지속됨
◦
직접 포드를 노드에 할당 가능
•
Scheduler 없이 Pod를 지정하는 가장 쉬운 방법 = 파일에 직접 nodeName을 설정 (Pod를 creating하는 동안)
•
nodeName 지정은 생성 시에만 가능
Pod가 이미 node에 할당된 경우
•
쿠버네티스는 nodeName 필드를 수정하는 것을 허용하지 않음
•
Binding Object를 생성하고 Pod의 binding API에 POST 요청을 보내면 가능
◦
실제 Scheduler가 하는 방식
1.
바인딩 개체에서 nodeName을 가진 targetNode를 지정
2.
Pod의 Binding API에 POST Request를 JSON 포맷으로 보냄
•
YAML 파일을 JSON으로 변환해야 함
# pod-bind-definition.yaml
apiVersion: v1
kind: Binding
metadata:
name: nginx
target:
apiVersion: v1
kind: Node
name: node02
YAML
복사
$ curl --header "Content-Type:application/json" --request POST \
--data '{"apiVersion":"v1", "kind:"Binding", ...}'
# 출력값
http://$SERVER/api/v1/namespaces/default/pods/$PODNAME/binding/
Bash
복사