Search
🗓️

[CKA] 15. Manual Scheduling

Date
2024/11/23
Category
Devops
Tag
Kubernetes
CKA
Scheduling
목차

 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
복사