PodGroup API
PodGroup API (podgroup-api)
기능 상태:
Kubernetes v1.35 [alpha](기본 비활성화)
PodGroup은 단일 단위로 함께 스케줄되는 Pod 그룹을 나타내는 런타임 오브젝트예요. Workload API가 스케줄링 정책 템플릿을 정의하는 반면, PodGroup은 그 그룹의 특정 인스턴스에 대한 정책과 스케줄링 상태를 모두 담는 런타임 상대편(counterpart)이에요.
PodGroup이란? (What is a PodGroup?)
PodGroup API 리소스는 scheduling.k8s.io/v1alpha2 API 그룹의 일부예요. 이 API를 사용하려면 클러스터에 그 API 그룹과 GenericWorkload 기능 게이트가 모두 활성화되어 있어야 해요.
PodGroup은 자기 완결적인(self-contained) 스케줄링 단위예요. 함께 스케줄되어야 하는 Pod 그룹을 정의하고, 배치를 지배하는 스케줄링 정책을 담으며, 그 스케줄링 결정의 런타임 상태를 기록해요.
API 구조 (API structure)
PodGroup은 원하는 스케줄링 동작을 정의하는 spec과 현재 스케줄링 상태를 반영하는 status로 구성돼요.
스케줄링 정책 (Scheduling policy)
각 PodGroup은 spec.schedulingPolicy에 스케줄링 정책(basic 또는 gang)을 담아요. 워크로드 컨트롤러가 PodGroup을 만들 때, 이 정책은 생성 시점에 Workload의 PodGroupTemplate에서 복사돼요. 독립형(standalone) PodGroup의 경우 정책을 직접 설정해요.
spec:
schedulingPolicy:
gang:
minCount: 4
템플릿 참조 (Template reference)
선택적인 spec.podGroupTemplateRef는 PodGroup을 그것이 생성된 Workload의 PodGroupTemplate으로 연결해 줘요. 이는 관찰성(observability)과 도구(tooling)에 유용해요.
spec:
podGroupTemplateRef:
workload:
workloadName: training-policy
podGroupTemplateName: worker
PodGroup에 DRA 디바이스 요청하기 (Requesting DRA devices for a PodGroup)
기능 상태:
Kubernetes v1.36 [alpha](기본 비활성화)
Dynamic Resource Allocation (DRA)을 통해 사용 가능한 디바이스는 spec.resourceClaims 필드를 통해 PodGroup이 요청할 수 있어요:
apiVersion: scheduling.k8s.io/v1alpha2
kind: PodGroup
metadata:
name: training-group
namespace: some-ns
spec:
...
resourceClaims:
- name: pg-claim
resourceClaimName: my-pg-claim
- name: pg-claim-template
resourceClaimTemplateName: my-pg-template
PodGroup과 연관된 ResourceClaim은 그 그룹에 속한 모든 Pod가 공유할 수 있어요. ResourceClaim의 status.reservedFor에 개별 Pod 대신 PodGroup에 대한 참조만 두면, 같은 PodGroup의 어떤 수의 Pod든 하나의 ResourceClaim을 공유할 수 있어요. ResourceClaim은 각 PodGroup에 대해 ResourceClaimTemplate으로부터 생성될 수도 있어, 각 생성된 ResourceClaim에 할당된 디바이스를 각 PodGroup의 Pod들이 공유할 수 있게 해요.
자세한 내용과 더 완전한 예시는 DRA 문서를 참고하세요.
상태 (Status)
스케줄러는 status.conditions를 업데이트해서 그룹이 성공적으로 스케줄됐는지 보고해요. 주요 컨디션은 PodGroupScheduled로, 필요한 모든 Pod가 배치되면 True, 스케줄링이 실패하면 False예요.