Pod Scheduling-Scheduler

cometLEE·2023년 9월 27일
0

kubernetes

목록 보기
7/16

Pod Scheduling에 대해 공부한 내용을 정리한 글입니다.

쿠버네티스 공식 홈페이지 - Kubernetes Scheduler
(https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/)를 참고하여 진행하였습니다.
또한, 마스터 노드1, 워커노드 2로 실습 진행하였습니다.
🤣🤩😊CKA 자격증 준비 및 쿠버네티스 공부 정리입니다.


서론

지난 포스팅인 labels and selectors에 대해서 공부하던 중 나왔던 개념인 nodeselector, 그리고 pod가 어떻게 할당되는지 자세하게 공부하고 싶어서 알아보기로 하였습니다.
도대체 pod는 어떻게 node에 할당이 되는 것인가요?



Kube-Scheduler

쿠버네티스에서 kube-scheduler는 쿠버네티스의 기본 스케줄러입니다.

Pod가 새롭게 생성되면 Scheduler를 통해서 Pod가 실행될 노드를 결정합니다.
모든 Pod는 scheduler에 의해서 최적의 노드가 결정되고 실행됩니다.

클러스터에서 pod의 예약 요구 사항을 충족하는 노드를 실행 가능한 노드라고 합니다. 적합한 노드가 없으면 scheduler가 pod를 배치할 수 있을 때까지 포드는 예약되지 않은 상태로 유지됩니다.

scheduler는 pod에 요구사항에 맞는 노드를 찾아서 적절한 로직을 통해 노드에 점수를 부여하고, 최고의 점수를 갖는 노드에 Pod를 할당합니다.

스케줄링 결정을 위해 고려해야 할 요소에는 개별 및 집합적 리소스 요구 사항, 하드웨어/소프트웨어, policy contraints, affinity 와 anti-affinity spec, local data, 워크로드 간 간섭 등이 포함됩니다.

Kube-scheduler에서 노드 선택

  1. Filtering
  2. Scoring

Filtering 단계에서는 Pod를 예약할 수 있는(요구사항에 맞는) 노드 집합을 찾습니다. 예를 들어 PodFitsResources 필터는 후보 노드에 포드의 특정 리소스 요청을 충족하기에 충분한 사용 가능한 리소스가 있는지 확인합니다. 이 단계 후에 노드 목록에는 적합한 노드가 포함되고, 목록이 비어있으면 포드를 예약할 수 없는 상태가 됩니다.

Kube-Scheduler가 Worker Node의 리소스 상태를 파악하는 방법은
Topology Filter, Volume Filter, Resource Filter, 3가지가 있습니다.

Scoring 단계에서 scheduler는 필터링한 노드 중에서 점수를 매겨 노드별로 점수를 매깁니다.

마지막으로 kube-scheduler는 순위가 가장 높은 노드에 Pod를 할당합니다. 점수가 동일한 노드가 두 개 이상 있는 경우, 무작위로 선택합니다.

Filtering과 Scoring을 설정할 수 있는 2가지 방법

  1. Scheduling Policies
  • Predicates : filtering 을 조절할 수 있음
  • Priorities: scoring 을 조절할 수 있음
  1. Scheduling Profiles
  • KubeSchedulerConfiguration 리소스 타입으로 조절할 수 있음
  • plugins 를 통해 Filter 와 Score 를 조절 가능

3가지 Filters

1. Topology Filter

  • Pod가 특정 Worker Node에서 실행될 수 있는지 확인합니다
  • Pod Affinity 제약을 확인
  • Pod의 nodeSelector 설정의 Label이 Worker Node 에 있는지 확인
  • Taint에 Pod 가 Tolerate 되는지 확인하고 이러한 조건에 부합되는 Worker Node 리스트를 생성합니다.

2. Volume Filter

  • Pod를 생성할 때, 생성하고자 하는 Pod의 디스크 볼륨에 대해서 Node가 지원할 수 있는지를 확인합니다.
  • Pod에 Volume object를 사용하는 경우 Volume Filter를 사용하게 됩니다.
  • Pod를 생성되고자 하는 디스크 볼륨에 대해서 Node가 지원할 수 있는지를 확인하고 마운트 되는 볼륨이 충돌이 일어나지 않는지 확인한다.
  • 쿠버네티스에서는 사용자가 볼륨에 node-affinity를 정의해서 특정 node 에만 그 볼륨을 attach할 수 있도록 하는데, 이러한 조건에 부합하지 않는 Node들을 제거하고 후보 Node 리스트를 만든다.

3. Resource Filter

  • 해당 Node 들이 Pod를 배포할만한 충분한 리소스 (CPU,Memory,Disk)가 있는지를 확인하는 단계입니다.
  • Node가 Pod를 실행하기 위해서는 Pod를 실행하기 위한 디스크 공간이 필요합니다. Pod 의 컨테이너 이미지를 저장하기 위한 공간등이 이에 해당합니다.
  • Worker Node에서 이미 사용하고 있는 Port와 Pod에서 사용하고자 하는 Port가 충돌하는지 확인하고 충돌된다면, 그 Node는 Pod를 생성하기 위한 Pod 리스트에서 제외합니다.

고급 스케줄링 정책 4가지

  1. Node Affinity/Anti-Affinity
  2. Taints and Tolerations
  3. Pod Affinity/Anti-Affinity
  4. Custom Scheduler

그 중에서 저는 Assigning Pods to Nodes에 대해 공부를 하고 있기 때문에
node Affinity, pod Affinity, taints, nodeSelector에 대해 공부를 해보겠습니다.

REFERENCE

블로그-DEVOCEAN
쿠버네티스 공식홈페이지 kube-scheduler

profile
server, kubernetes에 관심이 많이 있습니다

0개의 댓글