토폴로지 인지 워크로드 스케줄링
토폴로지 인지 워크로드 스케줄링 (topology-aware-scheduling)
토폴로지 인지 스케줄링(Topology-Aware Scheduling, TAS) 은 고려 중인 PodGroup에 대해 최적의 배치를 찾아내는 배치 스케줄링 알고리즘이에요. 모든 파드가 같은 토폴로지 도메인 안에 함께 배치되도록 보장해 주죠. TAS 플러그인 구성을 바꿔서 사용자가 TAS를 자신의 특정 요구에 맞게 조정할 수 있어요.
스케줄링 프레임워크: TAS 플러그인 구성
스케줄러에는 TAS 확장 지점을 구현하는 새롭거나 확장된 인트리(in-tree) 플러그인이 포함돼요.
TopologyPlacement:PlacementGeneratePlugin인터페이스를 구현해요. 요청된 토폴로지key(PodGroup에서 정의)의 서로 다른 값에 따라 노드를 그룹화해서 후보 배치를 생성해요.NodeResourcesFit:PlacementScorePlugin인터페이스를 구현하도록 확장됐어요. 표준 파드 빈패킹(bin-packing)과 유사한 로직으로, 배치 안의 모든 노드에 걸친 할당 비율을 기준으로 배치에 점수를 매겨요. 배치 안에서 리소스 활용도를 최대화하기 위해MostAllocated전략을 사용하고, 표준 파드별 플러그인 설정에서 리소스 가중치를 상속받아요.PodGroupPodsCount:PlacementScorePlugin인터페이스를 구현해요. 성공적으로 스케줄링할 수 있는 PodGroup의 총 파드 수를 기준으로 후보 배치에 점수를 매겨요.
플러그인 가중치와 빈패킹 리소스 가중치 커스터마이징
기본적으로 NodeResourcesFit와 PodGroupPodsCount 플러그인은 동일한 가중치(둘 다 기본값 1)로 구성돼요. 이는 빈패킹 로직과 가능한 한 많은 파드를 스케줄링하는 것 사이의 좋은 균형을 유지하기 위해서예요.
이 가중치나 빈패킹 전략의 리소스 가중치를 KubeSchedulerConfiguration에서 조정할 수 있어요. 다음 예시 스니펫은 두 플러그인의 가중치를 바꾸는 방법과 NodeResourcesFit 리소스 가중치를 재정의하는 방법을 보여줘요. 후자의 변경은 파드별 페어링과 배치 스코어링 알고리즘 모두에 적용돼요.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
plugins:
placementScore:
enabled:
# 1) 배치 점수 플러그인의 기본 가중치를 변경
- name: NodeResourcesFit
weight: 2
- name: PodGroupPodsCount
weight: 5
pluginConfig:
- name: NodeResourcesFit
args:
# 2) 파드별 및 배치 스코어링 알고리즘의 점수 리소스 가중치를 변경
scoringStrategy:
# 이 타입은 파드별 스케줄링에서만 고려됨. 배치 스코어링은
# 항상 MostAllocated 전략을 사용함.
type: LeastAllocated
# 리소스 가중치는 파드별 및 배치 스코어링 알고리즘 모두에서 사용됨.
resources:
- name: cpu
weight: 2
- name: memory
weight: 3