Gang 스케줄링
Gang 스케줄링 (gang-scheduling)
기능 상태: Kubernetes v1.37부터 Beta, 기본적으로 비활성화됨
이 기능에 대한 자세한 정보
gang 스케줄링은 파드 그룹이 '전부 아니면 전무(all-or-nothing)' 기준으로 스케줄링되도록 보장해요. 클러스터가 전체 그룹(minCount로 지정되는 정의된 최소 파드 수 포함)을 수용할 수 없다면, 그중 어떤 파드도 노드에 바인딩되지 않아요.
참고:
스케줄러는 초기 배치 중 구성된 minCount보다 적은 수의 파드를 절대 인정하지 않지만, 실행 중인 파드가 나중에 삭제되거나 축출되거나 minCount 요구 사항이 증가하면 실제 런타임 스케줄 파드 수는 이 임계값 아래로 떨어질 수 있어요. 이런 일이 발생하면 스케줄러는... 조건이 충족될 때만 추가 파드를 배치해요.
이 기능은 PodGroup API에 의존해요. 클러스터에서 GenericWorkload 기능 게이트와 scheduling.k8s.io/v1beta1 API 그룹이 활성화되어 있는지 확인하세요.
동작 방식
GangScheduling 플러그인이 활성화되면 스케줄러는 gang 스케줄링 정책을 가진 PodGroup에 속한 파드의 수명주기를 바꿔요. 각 PodGroup에 대해 이 프로세스는 다음 단계를 따라요.
- 스케줄러는 다음 두 조건이 모두 충족될 때까지 파드를
PreEnqueue단계에 보류해요. PodGroup은 두 조건이 모두 충족될 때까지 활성 스케줄링 큐에 들어가지 않아요.- 참조된 PodGroup 객체가 존재한다.
- PodGroup을 위해 생성된 파드 수(이미 스케줄된 것과 스케줄되지 않은 것 모두)가 최소한
minCount이상이다.
- 쿼럼(quorum)이 충족되면 스케줄러는 그룹의 모든 미스케줄링 파드에 대한 배치를 찾으려고 시도해요. PodGroup 스케줄링 주기를 사용해서 단일 원자적 스케줄링 결정을 내려요.
GangScheduling플러그인은 주기 중 각 평가된 파드에 대해 호출되는PlacementFeasible확장 지점을 구현해요. 이는 성공적으로 배치된 파드 수(이전 주기에서 이미 스케줄된 것 포함)를minCount값과 비교해서minCount제약이 충족되는지 결정하는 데 사용돼요. - 스케줄러가 최소한
minCount수의 파드에 대해 유효한 배치를 찾으면, 성공적으로 배치된 파드가 할당된 노드에 바인딩되도록 허용해요.minCount요구 사항을 충족할 만큼 충분한 배치를 찾지 못하면 어떤 파드도 스케줄되지 않아요. 대신 클러스터 리소스가 확보되기를 기다리며 스케줄 불가능 큐로 옮겨져요.
CompositePodGroup을 이용한 계층적 gang 스케줄링
자세한 정보는 Enable Or Disable Feature Gates를 참고하세요.
CompositePodGroup 기능 게이트와 scheduling.k8s.io/v1alpha3 API 그룹이 활성화되면 gang 스케줄링이 CompositePodGroup을 지원하도록 확장돼요. 파드를 그룹화하는 PodGroup과 달리 CompositePodGroup은 하위 그룹들(PodGroup 또는 다른 CompositePodGroup)을 함께 그룹화해요. CompositePodGroup은 스케줄링 중 하위 그룹에 적용되는 스케줄링 정책을 지정해요.
minGroupCount필드를 가진gang정책: 단일 단위로 원자적으로 함께 스케줄링되어야 하는 최소 하위 그룹 수(CompositePodGroup또는PodGroup객체)를 지정해요.basic정책: 하위 그룹이 독립적으로 스케줄링될 수 있음을 나타내요.
gang 정책은 여러 하위 그룹에 걸쳐 전부 아니면 전무 스케줄링이 요구되는 다중 컴포넌트 워크로드에 유용하며, 최소 수의 하위 그룹이 함께 스케줄링되도록 보장해요. 이런 요구를 가진 워크로드의 예로는 복제된(replicated) AI 학습이 있어요.
basic 정책은 각각 독립적인 gang으로 스케줄링될 수 있는 여러 파드 그룹으로 구성된 워크로드, 예를 들어 AI 추론 워크로드에 사용할 수 있어요.
계층적 쿼럼
GangScheduling 플러그인은 루트 CompositePodGroup이 **계층적 쿼럼(hierarchical quorum)**을 충족할 때까지 PreEnqueue 단계에서 활성 스케줄링 큐 진입을 보류해요. 이 쿼럼은 리프 PodGroup 객체부터 루트 CompositePodGroup까지 상향식으로 평가돼요.
- 리프
PodGroup은PodGroup객체가 존재하고 스케줄링 정책 기준을 충족할 잠재력이 있을 때만 쿼럼을 충족해요.gang정책의 경우: 구성 파드 중 최소한minCount가 생성됐다.basic정책의 경우: 구성 파드 중 최소 하나가 생성됐다.
CompositePodGroup은CompositePodGroup객체가 존재하고 스케줄링 정책 기준을 충족할 잠재력이 있을 때만 쿼럼을 충족해요.gang정책의 경우: 직접 하위 그룹 중 최소한minGroupCount가 쿼럼을 충족한다.basic정책의 경우: 직접 하위 그룹 중 최소 하나가 쿼럼을 충족한다.
- 전체 계층적 쿼럼은 루트
CompositePodGroup이 쿼럼을 충족할 때만 충족돼요.
결국 루트 CompositePodGroup은 계층적 쿼럼을 충족하고, 그 하위 PodGroup 중 하나에 속하는 보류 중인 파드가 최소 하나 있을 때만 활성 스케줄링 큐에 인정돼요.
배치 실행 가능성
GangScheduling 플러그인의 PlacementFeasible 메서드는 PodGroup과 CompositePodGroup 모두에 대한 평가를 지원해요. 이것은 하위 평가를 시작하기 전과 CompositePodGroup의 각 하위 그룹 평가 후에 스케줄링 주기에 의해 호출돼요.
다음 내용
- PodGroup API와 그 수명주기에 대해 알아보세요.
- CompositePodGroup API를 읽어보세요.
- PodGroup 스케줄링 정책을 읽어보세요.
- PodGroup 스케줄링을 읽어보세요.