Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

KJH

K8S scheduler 본문

Kubernetes

K8S scheduler

모이스쳐라이징 2021. 9. 22. 00:52

1. Scheduler 란

  • 각 노드에서 리소스 사용률을 추적하여 Pod가 실행되어야 하는 노드를 선택합니다.

scheduler 구조

 

2. 동작 순서

  • 스케쥴러의 동작 순서는 [filter -> Score -> binding] 순으로 진행 됩니다.

 

2.1 filter

  • 노드의 물리적인 사용량을 모두 체크하며, Affinity 설정이 된 파드인지 점검합니다.

 

2.1.1 기본 설정

옵션 내용
NoVolumeZoneConflictPred pod가 요청한 볼륨을 노드에서 사용가능한지 검토
MaxEBSVolumeCountPred 연결 해야하는 EBS볼륨의 수와 구성된 제한을 초과하는지 검토
MaxGCEPDVolumeCountPred 연결 해야하는 GCEPD볼륨의 수와 구성된 제한을 초과하는지 검토
MaxAzureDiskVolumeCountPred 연결 해야하는 Azure볼륨의 수와 구성된 제한을 초과하는지 검토
MaxCSIVolumeCountPred 연결 해야하는 CSI볼륨의 수와 구성된 제한을 초과하는지 검토
MatchInterPodAffinityPred POD에 Affinity 설정이 들어있을 경우
NoDiskConflictPred 요청한 볼륨과 이미 마운트된 볼륨으로 인해 포드가 노드에 장착될 수 있는지 여부를 검토
CheckNodeMemoryPressurePred 메모리가 부족한 노드에겐 파드가 예약되지 않는다
CheckNodeDiskPressurePred 디스크가 부족한 노드에겐 파드가 예약되지 않는다
CheckNodePIDPressurePred PID가 부족한 노드에겐 파드가 예약되지 않는다
CheckNodeConditionPred 네트워크, kubelet을 사용할 수 없을 경우 파드가 예약되지 않는다.
PodToleratesNodeTaintsPred 파드의 tolertations를 보고 tains노드를 매치해줌
CheckVolumeBindingPred PVC가 결합되어 있는지 확인
GeneralPred  

 

2.2 score

score에 설정된 체크포인트에 의해 파드가 배포되기 적절한지 클러스터의 모든 노드에게 점수를 부여 합니다.

 

2.2.1 기본 설정

옵션 내용
SelectorSpreadPriority 동일한 Service, StatefulSet 또는 ReplicaSet에 속하는 포드를 고려하여 여러 호스트에 포드를 분산합니다
LeastRequestedPriority request 리소스가 적은 노드를 선호합니다.
BalancedResourceAllocation 리소스 상태가 균형이 맞는 노드를 선호합니다.  abs(cpu-memory)값이 작은 노드가 순위가 높음

 

2.2.2 score 추가 설정

 

옵션 내용
InterPodAffinityPriority POD에 Affinity 설정이 들어있을 경우
NodePreferAvoidPodsPriority [scheduler.alpha.kubernetes.io/preferAvoidPods]를 사용하는 서로 다른 Pod가 동일한 Node에서 실행되지 않아야 함 (가중치 10000)
NodeAffinityPriority NodeAffinity와 NodeSelector를 사용하는 파드에 명시된 노드는 우선순위를 가집니다.
TaintTolerationPriority toleration된 파드는 taint된 노드에 우선순위를 가집니다.
ImageLocalityPriority 해당 파드의 컨테이너 이미지가 이미 노드에서 사용중이라면, 그 이미지는 사용중인 노드를 선호합니다.

 

2.2.3 score의 리소스 계산식

 

LeastRequestedPriority

LeastRequested = (CPU(capacity-sum(pod_requested))*10/capacity+ MEM(capacity-sum(pod_requested))*10/capacity)/2

 

BalancedResourceAllocation

fractionOfCapacity = float64(requested) / float64(capacity)
cpuFraction := fractionOfCapacity(totalResources.MilliCPU, allocatableResources.MilliCPU)
memoryFraction := fractionOfCapacity(totalResources.Memory, allocatableResources.Memory)
score = 10 - abs(cpuFraction-memoryFraction)*10

 

 

2.3 binding

  • score의 결과에 따라 점수가 높은곳으로 파드가 배포되는 단계입니다.

 

 

※ 이미지 출처

1. https://kubernetes.io/docs/concepts/scheduling-eviction/scheduling-framework/

 

'Kubernetes' 카테고리의 다른 글

K8S Volume  (0) 2021.10.06
K8S Ingress  (0) 2021.10.04
K8S Service  (0) 2021.10.02
K8S Pod  (0) 2021.09.25
K8S 소개  (0) 2021.09.22