스케줄링 그룹
스케줄링 그룹 (Scheduling Group)
FEATURE STATE: Kubernetes v1.35 [alpha](기본적으로 비활성화)
Pod를 PodGroup에 연결하면, 그 Pod가 함께 스케줄링되는 Pod 그룹에 속한다는 걸 나타낼 수 있어요. 이렇게 하면 스케줄러가 각 Pod를 독립적으로 다루는 대신 갱 스케줄링(gang scheduling) 같은 그룹 수준 정책을 적용할 수 있어요.
스케줄링 그룹 지정
GenericWorkload 기능 게이트가 활성화되어 있으면 Pod 매니페스트의 spec.schedulingGroup 필드를 설정할 수 있어요. 이 필드는 같은 네임스페이스 안의 특정 PodGroup 객체에 이름으로 연결돼요.
apiVersion: v1
kind: Pod
metadata:
name: worker-0
namespace: some-ns
spec:
schedulingGroup:
podGroupName: training-worker-0
containers:
- name: ml-worker
image: training:v1
schedulingGroup 필드는 불변(immutable)이에요. 한번 설정하면 Pod를 다른 PodGroup으로 옮길 수 없어요.
동작
spec.schedulingGroup을 설정하면 스케줄러가 참조된 PodGroup을 찾아 그 안에 정의된 스케줄링 정책을 적용해요.
- PodGroup이
basic정책을 사용하면 각Pod는 표준 Kubernetes 동작으로 독립적으로 스케줄링돼요. 이때 그룹화는 그룹 수준 레이블로 사용돼요. - PodGroup이
gang정책을 사용하면Pod는 "전부 아니면 전무(all-or-nothing)" 스케줄링 수명 주기에 들어가요. 스케줄러는 그룹의 최소minCountPod를 동시에 배치하려고 해요. 최소값을 충족하지 않으면 어떤 Pod도 노드에 바인딩되지 않아요.
PodGroup 참조 누락
Pod가 아직 존재하지 않는 PodGroup을 참조하면 Pod는 pending 상태로 남아요. 스케줄러는 PodGroup이 생성되면 해당 Pod를 자동으로 다시 고려해요.
최종 정책이 basic이든 gang이든 관계없이 적용돼요. 스케줄러가 정책을 결정하려면 PodGroup이 필요하기 때문이에요.
더 알아보기
- PodGroup API와 그 수명 주기를 알아보세요.
- PodGroup 스케줄링 정책을 읽어 보세요.
- 갱 스케줄링 알고리즘을 이해해 보세요.