피드로 돌아가기
Kubernetes BlogDevOps
원문 읽기
Kubernetes v1.35가 Workload API와 Gang Scheduling을 도입해 대규모 멀티팟 워크로드의 all-or-nothing 배치 스케줄링 지원
Kubernetes v1.35: Introducing Workload Aware Scheduling
AI 요약
Context
기존 Kubernetes 스케줄러는 각 Pod을 독립적으로 스케줄링하기 때문에 머신러닝 배치 작업처럼 여러 워커 Pod을 동일한 랙에 배치해야 하는 대규모 워크로드 스케줄링에 부적합했다. 사용자들은 워크로드 인식 스케줄링을 위해 커스텀 스케줄러를 직접 구현해야 했으며, AI 시대에 이러한 사용 사례가 증가하면서 네이티브 지원의 필요성이 대두되었다.
Technical Solution
- Workload API 도입: scheduling.k8s.io/v1alpha1 API 그룹에 새로운 Workload 리소스를 추가해 멀티팟 애플리케이션의 스케줄링 요구사항을 구조화된 형식으로 정의
- Gang Scheduling 구현: minCount 파라미터로 최소 실행 가능한 Pod 수를 지정하고, Permit gate에서 전체 그룹의 유효한 배치를 확인 후 모두 동시에 노드에 바인딩하는 all-or-nothing 정책 적용
- Pod Group 리프렌싱: workloadRef 필드를 통해 생성된 Pod들을 Workload 리소스의 특정 podGroup에 연결하는 메커니즘 추가
- 타임아웃 기반 롤백: 5분 내에 minCount 이상의 Pod 배치가 불가능할 경우 전체 그룹의 Pod을 거부하고 큐로 반환해 리소스 해제
- Opportunistic Batching: 동일한 스케줄링 요구사항(이미지, 리소스 요청, affinity 등)을 가진 연속된 Pod들에 대해 첫 번째 Pod의 feasibility 계산을 재사용해 스케줄링 레이턴시 단축
Key Takeaway
Workload API와 Gang Scheduling의 도입으로 Kubernetes 스케줄러가 멀티팟 워크로드를 first-class citizen으로 취급하게 됨으로써, 부분 배치로 인한 리소스 낭비와 교착 상태를 원천적으로 방지하는 설계 패턴이 확립되었다. 향후 단일 사이클 스케줄링, 워크로드 레벨 프리엠션, 오토스케일링 통합 등으로 점진적 확장이 계획되어 있다.
실천 포인트
분산 머신러닝 배치 작업이나 동일한 워커 Pod을 대량 배포하는 팀에서 GenericWorkload와 GangScheduling 피처 게이트를 활성화해 Workload API를 사용하면, 부분 배치로 인한 교착 상태를 제거하고 전체 작업의 성공/실패를 원자적으로 관리할 수 있다. Opportunistic Batching은 기본 활성화되므로 동일한 Pod 스펙을 사용하는 워크로드는 별도 구성 없이 자동으로 스케줄링 성능 향상을 받을 수 있다.