본문으로 바로가기

Kubernetes Scheduler가 node를 선택하는 기준은 1. 노드 필터링을 거치고, 2. 노드 랭킹 점수에 따라 할당된다.


1. 노드 필터링(노드 제약 체크)


- PodFitsHostPorts: 컨테이너가 사용하는 Port 중복 체크

- PodFitsResources: Request 사용 가능한 Node

- NoDiskConflict: AWS EBS, GCE PD, ISCSI 및 Ceph 가 지원되는지

- NoVolumeZoneConflict: Volume path 등 노드에서 제한이 있는지 

- MatchNodeSelector: Node selector 제약조건 만족 (특정노드만 배포)

- HostName: PodSpec의 NodeName 필드에 지정된 노드를 제외한 모든 노드



2. 노드 랭킹(priorities)


SUM(weight(k) * priorityFunc(k))   k = LeastRequestedPriority, BalancedResourceAllocation, ServiceSpreadingPriority, EqualPriority)


- LeastRequestedPriority: 새 노드가 노드에 스케줄 된 경우, (Node 전체 capacity - 이미 노드에 있는 모든 pod requests sum - 현재 pod request) / Node 전체 capacity). CPU와 Memory 동일한 가중치 적용

- BalancedResourceAllocation: 현재 pod이 배치 된 후, CPU와 Memory 사용률이 균형을 검사

- SelectorSpreadPriority: 같은 Node에있는 service, replication controller, or replica set에 속하는 Pod 수를 최소화 

- CalculateAntiAffinityPriority: 특정 label에 대해 동일한 값을 갖는 노드에서 동일한 서비스에 속하는 포드의 수를 최소화


Reference: https://github.com/kubernetes/community/blob/master/contributors/devel/scheduler_algorithm.md

 Other Contents 

댓글을 달아 주세요

티스토리 툴바