워크로드 인식 선점
워크로드 인식 선점 (Workload-Aware Preemption)
FEATURE STATE: Kubernetes v1.36 [alpha](disabled by default)
워크로드 인식 선점은 PodGroup을 위해 특별히 설계된 선점(Preemption) 메커니즘을 소개해요. PodGroup을 스케줄링할 수 없을 때, 스케줄러는 그 PodGroup의 스케줄링이 가능하도록 만드는 선점 로직을 사용합니다. 이 접근 방식은 PodGroup 스케줄링 중에만 사용되며, 주어진 PodGroup의 파드들을 위한 기본 선점 메커니즘을 대체해요.
이 기능이 활성화되면 스케줄러는 PodGroup에 속한 개별 파드를 따로따로 평가하는 대신, PodGroup 전체를 하나의 단일 선점 단위로 취급합니다. 그룹의 대기 중인 파드들을 위한 공간을 만들기 위해 클러스터 전체에서 희생자(victim)를 찾고, 다른 PodGroup이 희생자가 될 때 그들의 중단 모드(disruption mode)에 따라 어떻게 다루고 선점할지 알고 있어요.
이 기능은 갱 스케줄링(Gang Scheduling)과 워크로드 API(Workload API)에 의존합니다. 클러스터에 GenericWorkload와 GangScheduling 기능 게이트(feature gate)와 scheduling.k8s.io/v1alpha2 API 그룹이 활성화되어 있는지 확인해 주세요.
작동 방식 (How it works)
워크로드 인식 선점 과정은 기본 선점과 동일한 원칙을 따르되, 몇 가지 차이점이 있어요.
- 클러스터 전체 도메인 (Cluster-wide domain): 스케줄러는 노드별로 선점을 평가하는 대신 클러스터 전체를 하나의 도메인으로 평가합니다. 여러 노드에 걸쳐 희생자 집합을 선택해서, 선점하는 PodGroup이 스케줄링될 수 있는 충분한 공간을 만들어요.
- 희생자 중요도 계층 (Victim importance hierarchy): 스케줄러는 어떤 선점 단위(개별 파드 또는 PodGroup)가 더 중요해서 선점을 면해줘야 하는지를 엄격한 계층을 통해 결정합니다.
- 우선순위 (Priority): 더 높은 우선순위의 단위가 항상 더 중요해요.
- 워크로드 유형 (Workload type): 같은 우선순위라면 PodGroup은 개별 파드보다 더 중요한 것으로 간주합니다.
- 그룹 크기 (Group size, PodGroup): 둘 다 PodGroup이라면 멤버가 더 많은(크기가 더 큰) 쪽이 더 중요해요.
- 시작 시간 (Start time): 더 일찍 시작한 단위가 더 중요합니다.
- 파드 그룹 우선순위와 중단 (Pod group priority and disruption): 스케줄러는 PodGroup의 특정 우선순위와 중단 모드를 고려해서, 선점 이벤트 중에 그 파드를 선점할 수 있는지와 어떻게 선점할지를 평가해요.
참고:
단일 파드를 스케줄링할 때는 기본 파드 선점이 적용됩니다. 1.36 기준으로, 스케줄러가 단일 파드를 위해 기본 선점을 수행하면서 PodGroup에 속한 파드를 선점하려고 할 때는 그 PodGroup의
priority또는disruptionMode필드를 존중하지 않습니다.
다음 단계 (What's next)
- PodGroup 우선순위와 중단에 대해 더 알아보기
- 워크로드 API 배우기