CompositePodGroup API
CompositePodGroup API
CompositePodGroup은 다중 레벨 워크로드 계층 구조에서 비잎(non-leaf) 노드를 나타내는 런타임 객체예요. Workload API가 정적 스케줄링 정책 템플릿을 정의하는 반면, CompositePodGroup과 PodGroup 객체는 특정 워크로드 인스턴스에 대해 정책과 계층 참조를 운반하는 런타임 대응물이에요.
출처: 문서
본문
CompositePodGroup이란 무엇인가?
CompositePodGroup API 리소스는 scheduling.k8s.io/v1alpha3 API 그룹의 일부예요. 이 API를 사용하려면 클러스터에 그 API 그룹과 CompositePodGroup 기능 게이트가 둘 다 활성화되어 있어야 해요.
CompositePodGroup은 하위 그룹(CompositePodGroup 또는 PodGroup 객체일 수 있음)의 그룹을 나타내요. 하위 그룹 전체에 걸쳐 집합적으로 적용되는 스케줄링 정책, 중단 모드, 우선순위 설정, 선택적 토폴로지 제약을 운반해요.
API 구조 (API structure)
CompositePodGroup은 하위 그룹의 원하는 스케줄링 동작을 정의하는 spec과 status 하위 리소스로 구성돼요.
스케줄링 정책
각 CompositePodGroup은 spec.schedulingPolicy에 스케줄링 정책(basic 또는 gang)을 운반해요. 워크로드 컨트롤러가 CompositePodGroup을 만들면 이 정책은 생성 시점에 Workload의 CompositePodGroupTemplate에서 복사돼요.
CompositePodGroup의 gang 정책에서는 minGroupCount 필드가 동시에 스케줄링 가능해야 하는 하위 그룹의 최소 수를 지정해요.
spec:
schedulingPolicy:
gang:
minGroupCount: 2
부모 그룹 참조 (Parent group reference)
비루트(non-root) CompositePodGroup 리소스는 spec.parentCompositePodGroupName으로 부모 그룹을 지정해요. 루트 CompositePodGroup 객체는 이 필드를 설정하지 않은 채 둬요.
spec:
parentCompositePodGroupName: root-group-0
워크로드 참조 (Workload reference)
spec.workloadRef 필드는 CompositePodGroup을 파생된 Workload 객체의 CompositePodGroupTemplate에 연결해요.
spec:
workloadRef:
workloadName: hierarchical-workload
templateName: replica-group
상태 (Status)
CompositePodGroup API 스키마는 status 하위 리소스를 포함해요. 알파 릴리스에서 status 필드는 API 유형에 존재하지만, kube-scheduler는 CompositePodGroup 객체에 대해 status 조건을 업데이트하거나 채우지 않아요. 복합 그룹의 상태 추적은 향후 릴리스에서 구현될 예정이에요.
CompositePodGroup 생성하기
워크로드 컨트롤러가 런타임에 Workload 템플릿에서 CompositePodGroup 객체를 자동으로 생성해요.
다음 매니페스트는 최소 2개의 하위 그룹이 동시에 스케줄링 가능해야 하는 gang 스케줄링 정책으로 루트 CompositePodGroup을 만들어요.
apiVersion: scheduling.k8s.io/v1alpha3
kind: CompositePodGroup
metadata:
name: root-group-0
namespace: default
spec:
workloadRef:
workloadName: hierarchical-workload
templateName: root
schedulingPolicy:
gang:
minGroupCount: 2
클러스터의 CompositePodGroup 리소스를 조사할 수 있어요.
kubectl get compositepodgroups
특정 복합 그룹의 세부 사항을 보려면:
kubectl describe compositepodgroup root-group-0
어떻게 맞물리는가
컨트롤러, Workload, CompositePodGroup, PodGroup, Pod 사이의 관계는 다음 패턴을 따라요.
- 워크로드 컨트롤러가
CompositePodGroupTemplates트리와 잎PodGroupTemplates를 정의하는 Workload를 만들어요. - 각 런타임 인스턴스에 대해 컨트롤러가 위에서 아래로 루트 CompositePodGroup, 하위 CompositePodGroup 객체, 잎 PodGroup 객체를 만들어요.
- 컨트롤러가
spec.schedulingGroup.podGroupName으로 잎 PodGroup을 참조하는 파드를 만들어요.
다음 예시는 2레벨 워크로드에 대한 완전한 매니페스트 계층 구조를 보여줘요.
apiVersion: scheduling.k8s.io/v1alpha3
kind: Workload
metadata:
name: hierarchical-workload
namespace: default
spec:
compositePodGroupTemplates:
- name: root
schedulingPolicy:
gang:
minGroupCount: 2
podGroupTemplates:
- name: workers-a
schedulingPolicy:
gang:
minCount: 4
- name: workers-b
schedulingPolicy:
gang:
minCount: 4
---
apiVersion: scheduling.k8s.io/v1alpha3
kind: CompositePodGroup
metadata:
name: root-group-0
namespace: default
spec:
workloadRef:
workloadName: hierarchical-workload
templateName: root
schedulingPolicy:
gang:
minGroupCount: 2
---
apiVersion: scheduling.k8s.io/v1alpha3
kind: PodGroup
metadata:
name: workers-a-0
namespace: default
spec:
parentCompositePodGroupName: root-group-0
workloadRef:
workloadName: hierarchical-workload
templateName: workers-a
schedulingPolicy:
gang:
minCount: 4
---
apiVersion: scheduling.k8s.io/v1alpha3
kind: PodGroup
metadata:
name: workers-b-0
namespace: default
spec:
parentCompositePodGroupName: root-group-0
workloadRef:
workloadName: hierarchical-workload
templateName: workers-b
schedulingPolicy:
gang:
minCount: 4
---
apiVersion: v1
kind: Pod
metadata:
name: worker-a-0
namespace: default
spec:
schedulingGroup:
podGroupName: workers-a-0
containers:
- name: worker
image: registry.k8s.io/pause:3.9
Workload는 수명이 긴 정책 템플릿 역할을 하고, CompositePodGroup과 PodGroup 리소스는 인스턴스별 런타임 스케줄링 상태를 처리해요.
다음 단계
- CompositePodGroup 수명주기 읽기
- Workload API와 템플릿 정의 알아보기
- PodGroup API에서 잎 그룹 구조 보기
- PodGroup 스케줄링 정책 읽기
- Workload 인식 선점 알아보기