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 Filter, 3가지가 있음
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/
'Kubernetes > Scheduler' 카테고리의 다른 글
kubernetes PriorityClass ( Priority & Preemption ) (0) | 2020.10.11 |
---|---|
Kubernetes Scheduler (Affinity) (0) | 2020.10.11 |
Kubernetes Scheduler (Taint & Toleration) (0) | 2020.10.11 |
Kubernetes Scheduler (nodeSelector) (0) | 2020.10.11 |