워크로드 API

워크로드 API (Workload API)

기능 상태: Kubernetes v1.35 [alpha] (기본 비활성)

Workload API 리소스는 다중 Pod 애플리케이션의 스케줄링 요구사항과 구조를 정의합니다. [Job] 같은 워크로드 컨트롤러가 애플리케이션의 런타임 상태를 관리하는 반면, WorkloadPods 그룹이 어떻게 스케줄되어야 하는지 지정해요. Job 컨트롤러는 런타임 시 WorkloadPodGroupTemplates에서 [PodGroup] 객체를 만드는 유일한 내장 컨트롤러입니다.

Workload란 무엇인가? (What is a Workload?)

Workload API 리소스는 scheduling.k8s.io/v1alpha2 [API 그룹]의 일부이며, 이 API를 사용하려면 클러스터에 그 API 그룹과 GenericWorkload [feature gate]가 활성화되어 있어야 합니다.

Workload는 정적이고 오래 지속되는(long-lived) 정책 템플릿이에요. Pod 그룹에 어떤 스케줄링 정책이 적용되어야 하는지 정의하지만, 런타임 상태 자체는 추적하지 않습니다. 런타임 스케줄링 상태는 컨트롤러가 WorkloadPodGroupTemplates에서 만드는 [PodGroup] 객체에 의해 유지됩니다.

API 구조 (API structure)

WorkloadPodGroupTemplates 목록과 선택적 컨트롤러 참조 두 필드로 구성됩니다. 전체 Workload 스펙은 생성 후 변경 불가능(immutable)합니다. 기존 템플릿을 수정하거나 podGroupTemplates에 새 템플릿을 추가하거나 제거할 수 없어요.

PodGroupTemplates

spec.podGroupTemplates 목록은 워크로드의 서로 다른 구성 요소를 정의합니다. 예를 들어 머신러닝 Job은 driver 템플릿과 worker 템플릿을 가질 수 있어요.

podGroupTemplates의 각 항목은 다음을 가져야 합니다.

  1. PodGroupspec.podGroupTemplateRef에서 템플릿을 참조하는 데 사용되는 고유한 name
  2. 스케줄링 정책(basic 또는 gang)

WorkloadAwarePreemption [feature gate]가 활성화되면 podGroups의 각 항목은 우선순위와 중단 모드를 가질 수도 있습니다.

단일 Workload의 PodGroupTemplates 최대 수는 8입니다.

apiVersion: scheduling.k8s.io/v1alpha2
kind: Workload
metadata:
  name: training-job-workload
  namespace: some-ns
spec:
  controllerRef:
    apiGroup: batch
    kind: Job
    name: training-job
  podGroupTemplates:
  - name: workers
    schedulingPolicy:
      gang:
        # gang은 4개 pod가 한 번에 실행될 수 있을 때만 스케줄 가능해요
        minCount: 4
      priorityClassName: high-priority # WorkloadAwarePreemption feature gate에서만 적용
      disruptionMode: PodGroup        # WorkloadAwarePreemption feature gate에서만 적용

워크로드 컨트롤러가 이 템플릿 중 하나에서 PodGroup을 만들 때, schedulingPolicyPodGroup 자체의 스펙에 복사합니다. Workload에 대한 변경은 새로 생성된 PodGroups에만 영향을 주며 기존에는 영향을 주지 않아요.

워크로드 제어 객체 참조 (Referencing a workload controlling object)

controllerRef 필드는 Workload를 애플리케이션을 정의하는 특정 상위 수준 객체(예: [Job] 또는 사용자 지정 CRD)와 연결해요. 이는 관측성(observability)과 도구에 유용합니다. 이 데이터는 Workload를 스케줄하거나 관리하는 데 사용되지 않아요.

Job과 gang 스케줄링 (Gang scheduling with Jobs)

기능 상태: Kubernetes v1.36 [alpha] (기본 비활성)

WorkloadWithJob feature gate가 활성화되면, [Job] 컨트롤러는 .spec.parallelism.spec.completions와 같은 병렬 인덱스 Job에 대해 Workload와 PodGroup 객체를 자동으로 만듭니다. gang 정책의 minCount는 Job의 parallelism으로 설정되므로, 모든 Pod가 노드에 바인딩되기 전에 함께 스케줄 가능해야 합니다.

이것이 Job과 함께 gang 스케줄링을 사용하는 내장 경로입니다. Job 컨트롤러가 자동으로 처리하므로 직접 Workload나 PodGroup 객체를 만들 필요가 없어요. 다른 워크로드 컨트롤러(예: JobSet)는 자체 Workload와 PodGroup 객체를 독립적으로 관리할 수 있습니다.

다음 내용 (What's next)