이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

Kubernetes/Scheduler

Kubernetes Scheduler (Pod를 원하는 Worker Node에 배포하기)

이쿠우우 2020. 10. 11. 09:54
반응형

 

 

Kubernetes Scheduler 

Pod를 원하는 Worker Node에 배포하기

 

 

 


[Kubernetes Scheduler 관련 글 목록]

Kubernetes Scheduler (Pod를 원하는 Worker Node에 배포하기)

Kubernetes Scheduler (nodeSelector)

Kubernetes Scheduler (Taint & Toleration)

Kubernetes Scheduler (Affinity)




 

 

 

 

Kubernetes Scheduler 란?

 

 

 

 

Kubernetes 에서 Scheduling은 

Cluster의 Kube-Scheduler 모듈이 담당하는 기능으로

Pod가 어떤 Worker Node에서 실행되어야 적합한지 판단하는것을 역할을 수행함.

 

Kube-Scheduler 모듈은 Pod가 배포되는 것을 감시하고 있다가 

새로운 Pod를 탐지하고 Pod 가 아직 배포될 Worker Noder가 배정되지 않았다면 

해당 Pod가 어떤 Worker Node 에 동작해야 최상의 상태로 Running 할 수 있을지를 판단하여

Woker Node 를 배정하는 역할을 수행함.

 


 

Scheduler는 2단계로 Pod를 어떤 Worker Node 에 배포할지 판단함.

 

첫번째 : Filtering

Kube-Scheduler가 모든 Worker Node의 리소스 상태를 파악해서

Pod 를 배포될 수 있는 리소스가 충분한 Worker Node의 리스트를 생성함.

Kube-Scheduler가 Worker Node의 리소스 상태를 파악하는 방법은 

Topology Filter, Volume Filter, Resource Filter3가지가 있음

 

Topology Filter

Pod가 특정 Worker Node에서 실행될 수 있는지를 확인함.

주로 관리자가 특정 Worker Node에 Pod가 배포되도록 

정책을 만든것을 확인하는 역할을 수행함

Pod의 nodeSelector 설정의 Label이 Worker Node 에 있는지 확인하고

Pod Affinity 설정을 확인하고

Taint에 Pod 가 Tolerate 되는지 확인하고

이러전 조건에 부합되는 Worker Node 리스트를 생성함.

 

 

Volume Filter

Pod에 Volume object를 사용할 경우 

Volume Filter를 사용하게 됨.

어떤 Worker Node가 설정되어있는 Volume Object Type을 

지원할 수 있는지 파악해야하고 

mount되는 Volume이 충돌이 일어나지 않는지 확인함.

사용자가 Volume Object 에 node-affinity를 정의해서 특정 Worker Node 에만

Volume을 생성할 수 있도록 하는데 

이러한 조건들을 파악해서 

Volume Object를 생성할 수 있는 Worker Node 리스트를 생성함.

 

 

Resource Filter

모든 Worker Node 의 리소스를 파악함.

CPU, Memory, Disk 가 여유로운지 확인을 해서 

어떤 Worker Node에서 Pod 배포이 가능한지 판별하고

Pod에서 특정 Port를 사용해야 할 경우

Worker Node의 Network Port를 확인해서 

Worker Node 에서 이미 사용하는 Port 와 Pod에서 사용하고자 하는 Port가 

충동나지 않는지 확인을 한 후 

이러한 조건을 통과하는 Worker Node 리스트를 생성함.

 

 

 

두번째 : scoring

생성한 list에서 각 Worker Node의 순위를 매김.

순위를 매기는 방법은 Scheduler에서 사용하는 Scoring Rule이 있다고 함.

그런다음 순위가 가장 높은 Worker Node에 Pod를 배포하도록 함.

만약 순위가 동일한 Worker Node 가 많다면 랜덤으로 배정됨.

 


 

 

관리자가 직접 특정 Worker Node 에 Pod 가 배포되도록 설정할 수도 있음.

 

Scheduler 가 자동으로 최적화된 Worker Node에 Pod를 잘 배포하지만

Scheduler의 판단이 잘못될 경우도 있음.

 

DataBase나 특정 Container를 HA 구성을 해야할 경우

반드시 Pod가 서로 다른 Worker Node 에 배포가 되야함.

예로 들면 Mysql Pod를 HA로 구성할려면 Worker Node 1, Worker Node 2 에

각각 Pod 가 하나씩 배포 되어있어야하는데

Worker Node 1 에 리소스가 훨씬 여유롭다면 

Scheduler 가 판단했을때 Mysql Pod를 모두 Worker Node 1에 배포 되는것이 

효율적이라고 판단하여 

Worker Node 1에 모든 Pod 가 배포되어 HA구성이 안될수도 있음.

 

 

이런 경우를 해결하기 위해 Kube-Scheduler의 다양한 기능을 사용해서 

관리자가 직접 특정 Worker Node에 Pod 가 배포 되도록 설정할 수 도 있음

 

대표적으로

nodeSelector

Taint & Toleration

Affinity

3가지 방법이 있음.

 

이후 글에서 이 3가지 방법을 자세히 알아보겠음.

 

 

 

 


제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!


 

 

 

 

참고

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

https://skasha.tistory.com/92

 

 

 

반응형