워크로드 API

기능 상태: Beta since Kubernetes v1.37; disabled by default
More information about this feature

To use this feature, you (or a cluster administrator) will need to enable the GenericWorkload feature gate for all relevant components in your cluster.

See Enable Or Disable Feature Gates for more information.

워크로드 API 리소스를 사용하여 멀티 파드 애플리케이션에 대한 스케줄링 요구 사항과 구조를 기술할 수 있다. 워크로드 컨트롤러가 워크로드에 대한 런타임 동작을 제공하는 반면, 워크로드 API는 잡(Job) 등과 같은 "실제" 워크로드에 대한 스케줄링 제약 조건을 제공하기 위한 것이다.

워크로드란?

워크로드 API 리소스는 scheduling.k8s.io/v1alpha1 API 그룹에 속하며 (이 API를 사용하려면 클러스터에서 해당 API 그룹과 GenericWorkload 기능 게이트가 활성화되어 있어야 한다). 이 리소스는 멀티 파드 애플리케이션의 스케줄링 요구 사항을 구조화하고 기계가 읽을 수 있는 형태로 정의한다. 잡과 같은 사용자 대상 워크로드가 무엇을 실행할지 정의하는 반면, 워크로드 리소스는 파드 그룹이 어떻게 스케줄링되어야 하는지와 라이프사이클 전반에 걸쳐 배치가 어떻게 관리되어야 하는지를 결정한다.

API 구조

워크로드를 사용하면 파드 그룹을 정의하고 스케줄링 정책을 적용할 수 있다. 파드 그룹 목록과 컨트롤러에 대한 참조, 두 부분으로 구성된다.

파드 그룹

podGroups 목록은 워크로드의 개별 구성 요소를 정의한다. 예를 들어, 머신 러닝 잡에는 driver 그룹과 worker 그룹이 있을 수 있다.

podGroups의 각 항목에는 다음이 필요하다.

  1. 파드의 워크로드 참조에서 사용할 수 있는 고유한 name.
  2. 스케줄링 정책 (basic 또는 gang).
apiVersion: scheduling.k8s.io/v1alpha1
kind: Workload
metadata:
  name: training-job-workload
  namespace: some-ns
spec:
  controllerRef:
    apiGroup: batch
    kind: Job
    name: training-job
  podGroups:
  - name: workers
    policy:
      gang:
        # 4개의 파드가 동시에 실행될 수 있는 경우에만 gang을 스케줄링할 수 있다
        minCount: 4

워크로드 제어 오브젝트 참조

controllerRef 필드는 잡이나 사용자 정의 CRD와 같이 애플리케이션을 정의하는 특정 상위 오브젝트에 워크로드를 연결한다. 이 필드는 가시성(observability)과 도구 연동에 유용하다. 이 데이터는 워크로드를 스케줄링하거나 관리하는 데 사용되지 않는다.

다음 내용

1 - 파드그룹(PodGroup) 스케줄링 정책

기능 상태: Beta since Kubernetes v1.37; disabled by default
More information about this feature

To use this feature, you (or a cluster administrator) will need to enable the GenericWorkload feature gate for all relevant components in your cluster.

See Enable Or Disable Feature Gates for more information.

모든 파드그룹은 spec.schedulingPolicy 필드에 스케줄링 정책을 선언해야만 한다. 이 정책은 스케줄러가 그룹 내 파드 모음을 어떻게 다루는지를 결정한다.

정책 유형

schedulingPolicy 필드는 basic과 gang이라는 두 가지 정책 유형을 지원한다. 둘 중 정확히 하나를 지정해야 한다.

Basic 정책

basic 정책은 스케줄러가 모든 파드를 최선 노력(best-effort) 방식으로 평가하도록 지시한다. gang 정책과 달리, basic 정책을 사용하는 파드그룹은 현재 스케줄링 가능한 파드의 수와 관계없이 실행 가능한 것으로 간주된다.

basic 정책을 사용하는 주된 이유는 파드를 그룹으로 묶어 가시성과 관리를 개선하며, 단일하고 원자적인 파드그룹 스케줄링 주기 내에서 함께 평가되도록 하기 위함이다.

이 정책은 동시 시작이 필요하지는 않지만 논리적으로 함께 속하는 그룹, 또는 "전부 아니면 전무(all-or-nothing)" 배치를 의미하지 않는 그룹 수준 제약 조건의 가능성을 열어두고자 하는 경우에 적합하다.

schedulingPolicy:
  basic: {}

Gang 정책

gang 정책은 "전부 아니면 전무" 스케줄링을 강제한다. 이는 부분적인 시작이 교착 상태(deadlock)나 자원 낭비로 이어지는, 긴밀하게 결합된 워크로드에 필수적이다.

이는 모든 워커가 동시에 실행되어야 진행되는 잡(Job)이나 기타 배치 프로세스에 사용할 수 있다.

gang 정책에는 minCount 필드가 필요하며, 이는 그룹이 실행 가능한 것으로 간주되기 위해 동시에 스케줄링될 수 있어야 하는 최소 파드 수를 의미한다.

schedulingPolicy:
  gang:
    # 그룹이 승인되기 위해 동시에 스케줄링될 수 
    # 있어야 하는 파드 수.
    minCount: 4

PodGroupTemplates를 통한 정책 설정

워크로드 API를 사용할 때는 PodGroupTemplates 내부에 스케줄링 정책을 정의한다. 워크로드 컨트롤러는 템플릿의 정책을 자신이 생성하는 각 파드그룹으로 복사하여, 파드그룹이 자체적으로 완결되도록 만든다. 워크로드의 템플릿을 변경하면 새로 생성되는 파드그룹에만 영향을 미치며, 기존 파드그룹에는 영향을 주지 않는다.

(워크로드 없이 생성된) 단독 파드그룹의 경우에는 파드그룹 자체에 spec.schedulingPolicy를 직접 설정한다.

다음 내용