스케줄링 그룹
스케줄링 그룹 (Scheduling Group)
이 기능을 사용하려면 사용자(또는 클러스터 관리자)가 클러스터의 모든 관련 컴포넌트에서 GenericWorkload 기능 게이트(feature gate)를 활성화해야 해요.
자세한 내용은 기능 게이트 활성화/비활성화 (Enable Or Disable Feature Gates)를 참고하세요.
Pod를 PodGroup에 연결해 그 Pod가 함께 스케줄되는 Pod 그룹에 속한다는 것을 나타낼 수 있어요. 이를 통해 스케줄러는 각 Pod를 독립적으로 취급하는 대신 갱 스케줄링 같은 그룹 수준 정책을 적용할 수 있습니다.
출처: 문서
스케줄링 그룹 지정하기 (Specifying a scheduling group)
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으로 옮길 수 없습니다.
동작 (Behavior)
s spec.schedulingGroup을 설정하면 스케줄러는 참조된 PodGroup을 조회하고 그 안에 정의된 스케줄링 정책을 적용합니다.
- PodGroup이 basic 정책을 사용하면 각 Pod는 표준 Kubernetes 동작으로 독립적으로 스케줄됩니다. 그룹화는 그룹 수준 라벨로 사용됩니다.
- PodGroup이 gang 정책을 사용하면 Pod는 "전부 아니면 전무(all-or-nothing)" 스케줄링 수명 주기에 들어갑니다. 스케줄러는 그룹의 최소
minCount개의 Pod를 동시에 배치하려고 합니다. 최소값이 충족되지 않으면 어느 것도 노드에 바인딩되지 않습니다.
이 기능을 사용하려면 클러스터의 모든 관련 컴포넌트에서 CompositePodGroup 기능 게이트를 활성화해야 해요.
자세한 내용은 기능 게이트 활성화/비활성화를 참고하세요.
CompositePodGroup 기능 게이트가 활성화되면 PodGroup은 상위 CompositePodGroup을 지정할 수도 있어요. 계층적 워크로드에서 스케줄링은 전체 그룹 트리에 정의된 정책(다중 레벨 갱 스케줄링이나 토폴로지 제약 같은)에 따라 제어됩니다.
누락된 그룹 참조 (Missing group references)
Pod가 아직 존재하지 않는 PodGroup을 참조하면 그 Pod는 대기(pending) 상태로 유지됩니다. 마찬가지로 참조된 PodGroup이 아직 생성되지 않은 상위 CompositePodGroup(spec.parentCompositePodGroupName으로 지정)을 지정하면, 전체 그룹 계층이 클러스터에 존재할 때까지 스케줄링이 시작되지 않고 Pod는 대기 상태로 유지됩니다.
필요한 모든 PodGroup과 CompositePodGroup 리소스가 존재하면 스케줄러가 자동으로 Pod를 다시 고려합니다.
다음 단계 (What's next)
- PodGroup API와 그 수명 주기 알아보기
- CompositePodGroup API 읽어보기
- PodGroup 스케줄링 정책 읽어보기
- 갱 스케줄링 알고리즘 이해하기