본문 바로가기
CKA

[Udemy CKA - Core Concepts] Scheduling

by 2won2 2024. 8. 21.

 

Scheduling

 

Scheduling 작동 방법

  • Pod의 Yaml파일에는 NodeName 필드가 있음
  • 스케줄러가 모든 Pod를 보고 NodeName이 없는 Pod들을 스케줄링 후보로 선정함
  • Scheduling 알고리즘을 통해 어떤 Node에 Scheduling할지 결정
  • 실행중인 Pod를 다른 Node로 옮기는 것은 불가능
  • 스케줄링 - 필터링 - 우선순위 결정 - Pod 바인딩(이때부터 해당 노드의 kubelet이 이 Pod의 생성 및 관리)

 

Scheduling할 스케줄러가 없는 경우

  • 직접 노드에 할당(Pod Yaml파일에 직접 NodeName 지정)
    • Pod 생성시에만 지정 가능
  • 바인딩 객체 생성
    • 바인딩 API에 Post 요청
      curl --header "Content-Type:application/json" --request POST --data '{"apiVersion": "v1", "kind": "Biding", ...}
      http://$SERVER/api/v1/namespaces/default/pods/$PODNAME/binding/
apiVersion: v1
kind: Binding
metadata:
  name: nginx
target:
  apiVersion: v1
  kind: Node
  name: node02(실제 노드)

 

Practice

  • nginx.yaml이라는 Pod 정의 파일을 가지고 Pod를 생성
    • kubectl create -f nginx.yaml
  • Pod를 수동으로 node01 노드에 스케줄링
    • kubectl delete pod nginx
    • vi nginx.yaml
    • spec아래에 nodeName 추가 (nodeName: node01)
    • kubectl create -f nginx.yaml
  • 동일한 Pod를 controlplane 노드에 스케줄링
    • vi nginx.yaml
    • nodeName을 controlplane으로 변경
    • Pod 삭제 후 재생성 OR kubectl replace --force -f nginx.yaml
    • kubectl get pod - o wide로 확인
  • 스케줄러 여부 확인
    • kubectl get pods -n kube-system