工作负载优先级类
一个优先级类,其值由 Kueue 控制器使用,并且独立于 Pod 的优先级。
WorkloadPriorityClass
允许您控制 Workload
’s 优先级,而不影响 Pod 的优先级。此功能适用于以下情况
- 希望对在特定持续时间内保持非活动状态的工作负载进行优先级排序
- 希望为开发工作负载设置较低优先级,为生产工作负载设置较高优先级
示例 WorkloadPriorityClass 如下所示
apiVersion: kueue.x-k8s.io/v1beta1
kind: WorkloadPriorityClass
metadata:
name: sample-priority
value: 10000
description: "Sample priority"
WorkloadPriorityClass
对象是集群范围的,因此可以在任何命名空间中的作业中使用它们。
如何在作业中使用 WorkloadPriorityClass
您可以通过设置标签 kueue.x-k8s.io/priority-class
来指定 WorkloadPriorityClass
。
apiVersion: batch/v1
kind: Job
metadata:
name: sample-job
labels:
kueue.x-k8s.io/queue-name: user-queue
kueue.x-k8s.io/priority-class: sample-priority
spec:
...
Kueue 为上述作业生成了以下 Workload
。PriorityClassName
字段可以接受 PriorityClass
或 WorkloadPriorityClass
名称作为值。为了区分,当使用 WorkloadPriorityClass
时,priorityClassSource
字段具有 kueue.x-k8s.io/workloadpriorityclass
值。当使用 PriorityClass
时,priorityClassSource
字段具有 scheduling.k8s.io/priorityclass
值。
apiVersion: kueue.x-k8s.io/v1beta1
kind: Workload
metadata:
name: job-sample-job-7f173
spec:
priorityClassSource: kueue.x-k8s.io/workloadpriorityclass
priorityClassName: sample-priority
priority: 10000
queueName: user-queue
...
对于其他作业框架,您可以使用相同的标签设置 WorkloadPriorityClass
。以下是 MPIJob
的示例。
apiVersion: kubeflow.org/v2beta1
kind: MPIJob
metadata:
name: pi
labels:
kueue.x-k8s.io/queue-name: user-queue
kueue.x-k8s.io/priority-class: sample-priority
spec:
...
Pod 优先级和工作负载优先级之间的关系
在为给定作业创建 Workload
时,Kueue 考虑以下场景
- 作业同时指定
WorkloadPriorityClass
和PriorityClass
WorkloadPriorityClass
用于工作负载的优先级。PriorityClass
用于 Pod 的优先级。
- 作业仅指定
WorkloadPriorityClass
WorkloadPriorityClass
用于工作负载的优先级。WorkloadPriorityClass
不用于 Pod 的优先级。
- 作业仅指定
PriorityClass
PriorityClass
用于工作负载的优先级和 Pod 的优先级。
在某些作业框架中,有 CRD
- 定义多个 Pod 规范,其中每个规范可以有自己的 Pod 优先级,或
- 在专用字段中定义整体 Pod 优先级。默认情况下,kueue 将采用第一个具有一个设置的 PodSet 的 PriorityClassName,但是 CRD 与 Kueue 的集成可以实现
JobWithPriorityClass 接口
来更改此行为。你可以阅读每个作业集成的代码,以了解如何获取优先级类。
工作负载优先级使用位置
工作负载优先级用于
- 对 ClusterQueues 中的工作负载进行排序。
- 确定工作负载是否可以抢占其他工作负载。
工作负载优先级值始终可变
Workload
的 Priority
字段始终可变。如果 Workload
已挂起一段时间,你可以考虑根据自己的策略更新其优先级,以更早执行它。Workload 的 PriorityClassSource
和 PriorityClassName
字段不可变。
接下来是什么?
- 了解如何 运行作业
- 了解如何 运行具有工作负载优先级的作业
- 阅读 API 参考 以了解
WorkloadPriorityClass