아래 내용은 쿠버네티스 공식 홈페이지의 Kubernetes Scheduler의 내용을 일부 정리한 글입니다. 

 

쿠버네티스에서 스케줄링이란? 

  • Kubelet이 실행할 수 있도록 nodes와 pods를 매치시켜주는 것을 말합니다. 

스케줄링

  • 스케줄러가 node에 할당되지 않는 신규 생성된 pods가 있는지 주시합니다.

  • 스케줄러가 node할당이 필요한 pod을 발견했다면, pod을 실행할 수 있는 최적의 node를 찾는 작업을 진행합니다.

  • 스케줄러는 스케줄링 원칙을 고려하여 node를 결정합니다. 

kube-scheduler

  • 쿠버네티스의 기본 스케줄러이며, 컨트롤 플레인(control plane)에 속해 있습니다.

  • 커스텀 스케줄러를 추가하여 대체할 수 있도록 설계되어 있습니다.

  • pods에 있는 모든 컨테이너들 및 모든 pod들이 리소스에 대해 각기 다른 요구사항을가지고 있기 때문에,
    상세 스케줄링 요구사항들에 따른 nodes 필터링이 필요합니다.

  • 클러스터에서는 상세 스케줄링 요구사항에 맞는 노드를 적합한 노드들(feasible nodes)이라고 칭합니다.

  • 적합한 node가 없는 pod은 스케줄러가 적합한 위치를 찾아주기 전까지 unscheduled 상태로 남아있습니다.

  • 스케줄러가 적합한 nodes을 찾은 후에는 Scoring을 위해 사전에 정의된 함수들을 이용하여 nodes의 점수를
    계산하고 가장 높은 점수를 받은 node를 선정하여 API 서버에 알립니다. 이러한 과정을 binding 한다고 합니다.

  • 스케줄링 시 고려하는 내용들

    • individual and collective resource requirements

    • hardware

    • software

    • policy constraints

    • affinity and anti-affinity specifications

    • data locality

    • inter-workload interference

    • etc

kube-scheduler의 스케줄링

kube-scheduler는 pod을 위한 node 선정 시 2 단계 과정을 거칩니다.

  1. Filtering: pod에 적합한 nodes를 찾는 작업

  2. Scoring: Filtering 에 의해서 찾아진 노드들 중 가장 적합한 nodes를 선별하는 작업

 

https://kubernetes.io/docs/concepts/scheduling/kube-scheduler/

 

Kubernetes Scheduler

 

kubernetes.io

블로그 이미지

kyungseop

공부한 내용 정리

,