CompositePodGroup 수명주기

CompositePodGroup 수명주기 (lifecycle)

이 기능을 쓰려면 사용자(또는 클러스터 관리자)가 클러스터의 모든 관련 컴포넌트에서 CompositePodGroup 기능 게이트를 활성화해야 해요. 자세한 내용은 Enable Or Disable Feature Gates 문서를 참고하세요.

CompositePodGroup은 다중 레벨 PodGroup 계층구조에서 리프가 아닌 노드를 나타내요. PodGroup 리소스와 달리 CompositePodGroup 리소스는 파드를 직접 포함하지 않아요. 대신 하위 CompositePodGroupPodGroup 객체의 계층구조를 유지하면서, 그 하위 그룹에 적용되는 스케줄링 정책을 담아요.

소유권과 가비지 컬렉션

CompositePodGroup 객체는 그 하위 CompositePodGroupPodGroup 리소스와 함께, Kubernetes ownerReferences를 통해 이를 만든 워크로드 컨트롤러가 소유해요. 소유 워크로드 객체가 삭제되면 캐스케이딩 가비지 컬렉션이 자동으로 하위 리소스들을 삭제해요.

CompositePodGroup 이름은 네임스페이스 안에서 고유해야 하고 유효한 DNS 서브도메인이어야 해요.

생성 순서

제대로 된 계층구조 해석과 스케줄링을 보장하기 위해 워크로드 컨트롤러는 리소스를 하향식(top-down) 순서로 만들어요.

  1. Workload: 정적 템플릿(CompositePodGroupTemplatesPodGroupTemplates)을 정의해요.
  2. 루트 CompositePodGroup: spec.workloadRefWorkload의 루트 템플릿을 가리키도록 생성돼요.
  3. 하위 CompositePodGroupPodGroup: 하향식으로 생성돼요. 각 하위 그룹은 spec.parentCompositePodGroupName으로 상위 그룹을, spec.workloadRef로 자기의 템플릿을 지정해요.
  4. Pods: spec.schedulingGroup.podGroupName이 리프 PodGroup을 가리키도록 생성돼요.

그룹이 존재하지 않는 상위 CompositePodGroup을 참조하거나, 파드가 아직 생성되지 않은 PodGroup을 참조하면, 스케줄러는 계층구조 안의 모든 상위 리소스가 존재할 때까지 스케줄링을 보류해요.

제한 사항과 검증 규칙

  • 일관된 스케줄러 이름: 전체 CompositePodGroup 계층구조의 모든 파드는 동일한 spec.schedulerName을 사용해야 해요. 불일치가 감지되면 스케줄러는 계층구조를 스케줄 불가능으로 거부해요.
  • 일관된 우선순위: 전체 CompositePodGroup 계층구조의 모든 파드는 동일한 spec.priority 값을 지정해야 하며, 이 값은 루트 그룹이 지정한 우선순위와 같아야 해요. 불일치가 감지되면 스케줄러는 계층구조를 스케줄 불가능으로 거부해요.
  • 일관된 선점 정책: 전체 CompositePodGroup 계층구조의 모든 파드는 동일한 spec.preemptionPolicy를 사용해야 해요. 또한 PodGroupPreemptionPolicy 기능 게이트가 활성화되면 루트 그룹의 선점 정책은 파드들이 지정한 것과 같아야 해요. 불일치가 감지되면 스케줄러는 계층구조를 스케줄 불가능으로 거부해요.
  • 최대 중첩 깊이: 그룹-템플릿 계층구조는 최대 깊이 4 레벨을 지원해요.
  • 목록 항목 제한: Workload의 어떤 레벨에서든 하위 CompositePodGroupTemplatePodGroupTemplate의 최대 개수는 8개예요.
  • 불변의 gang 그룹 개수: CompositePodGroupspec.schedulingPolicy.gang.minGroupCount 필드는 생성 후 변경할 수 없어요.
  • 불변의 계층구조 참조: 그룹의 spec.parentCompositePodGroupName과 파드의 spec.schedulingGroup은 한번 설정되면 변경할 수 없어요.

다음 내용

  • CompositePodGroup API 개요를 읽어보세요.
  • Workload API와 템플릿 정의에 대해 알아보세요.
  • PodGroup API에서 리프 그룹이 어떻게 구성되는지 확인하세요.
  • PodGroup 스케줄링 정책을 읽어보세요.
  • 워크로드 인지 선점에 대해 알아보세요.