WorkloadPriorityClass는 Kueue 컨트롤러에서 활용되며 Pod의 우선순위와는 독립적인 우선순위 클래스다. WorkloadPriorityClass를 사용하면 pod의 우선순위에 영향을 주지 않고 Workload의 우선순위를 제어할 수 있다.
이 기능은 다음과 같은 경우에 유용하다: 특정 기간 동안 비활성 상태로 남아있는 워크로드의 우선순위를 높이고 싶을 때, 개발 워크로드에는 낮은 우선순위를, 프로덕션 워크로드에는 높은 우선순위를 설정하고 싶을 때
apiVersion: kueue.x-k8s.io/v1beta1
kind: WorkloadPriorityClass
metadata:
name: urgent-ml-tasks
value: 10000 # 우선순위 값 (높을수록 우선순위 높음)
description: "Urgent ML training tasks requiring immediate attention"
globalDefault: false # 전역 기본값 여부
---
apiVersion: kueue.x-k8s.io/v1beta1
kind: WorkloadPriorityClass
metadata:
name: production-workloads
value: 5000
description: "Production ML workloads"
---
apiVersion: kueue.x-k8s.io/v1beta1
kind: WorkloadPriorityClass
metadata:
name: development-experiments
value: 1000
description: "Development and experimental workloads"
globalDefault: true # 기본 우선순위로 설정
---
apiVersion: kueue.x-k8s.io/v1beta1
kind: WorkloadPriorityClass
metadata:
name: background-processing
value: 100
description: "Low priority background processing tasks"
kueue.x-k8s.io/priority-class 레이블을 설정하여 WorkloadPriorityClass를 지정할 수 있다.
apiVersion: batch/v1
kind: Job
metadata:
name: critical-model-training
namespace: ml-team
labels:
kueue.x-k8s.io/queue-name: ml-training-queue
kueue.x-k8s.io/priority-class: urgent-ml-tasks # WorkloadPriorityClass 지정
spec:
suspend: true
template:
spec:
containers:
- name: trainer
image: critical-model-trainer:latest
resources:
requests:
nvidia.com/gpu: "4"
cpu: "16"
memory: "64Gi"
restartPolicy: Never
Kueue는 위 Job에 대해 다음과 같은 Workload를 생성한다. priorityClassSource 필드를 통해 구분할 수 있으며, WorkloadPriorityClass 사용 시 kueue.x-k8s.io/workloadpriorityclass 값을, PriorityClass 사용 시 scheduling.k8s.io/priorityclass 값을 갖는다.
apiVersion: kueue.x-k8s.io/v1beta1
kind: Workload
metadata:
name: job-critical-model-training-abc123
namespace: ml-team
spec:
priorityClassSource: kueue.x-k8s.io/workloadpriorityclass # WorkloadPriorityClass 사용
priorityClassName: urgent-ml-tasks
priority: 10000 # WorkloadPriorityClass의 value
queueName: ml-training-queue
podSets:
- count: 1
name: main
template:
spec:
containers:
- name: trainer
image: critical-model-trainer:latest
resources:
requests:
nvidia.com/gpu: "4"
cpu: "16"
memory: "64Gi"
# PriorityClass 생성 (Kubernetes 기본)
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority-pods
value: 1000
globalDefault: false
description: "High priority pods for critical workloads"
---
# Job에서 Pod Priority 사용
apiVersion: batch/v1
kind: Job
metadata:
name: pod-priority-job
labels:
kueue.x-k8s.io/queue-name: ml-queue
spec:
template:
spec:
priorityClassName: high-priority-pods # Pod의 우선순위에 영향
containers:
- name: worker
image: ml-trainer:latest
resources:
requests:
cpu: "4"
memory: "8Gi"
위 경우 생성되는 Workload:
apiVersion: kueue.x-k8s.io/v1beta1
kind: Workload
metadata:
name: job-pod-priority-job-xyz789
spec:
priorityClassSource: scheduling.k8s.io/priorityclass # Kubernetes PriorityClass 사용
priorityClassName: high-priority-pods
priority: 1000 # PriorityClass의 value
# Pod priority와 Workload priority가 동일