Workload 优先级类
WorkloadPriorityClass
允许你控制 Workload
的优先级,而不会影响 Pod 的优先级。
此功能适用于以下场景:
- 希望优先调度那些长时间处于非活跃状态的工作负载
- 希望为开发环境工作负载设置较低优先级,为生产环境工作负载设置较高优先级
一个示例 WorkloadPriorityClass 如下所示:
apiVersion: kueue.x-k8s.io/v1beta1
kind: WorkloadPriorityClass
metadata:
name: sample-priority
value: 10000
description: "示例优先级"
WorkloadPriorityClass
对象是集群范围的,因此可以被任何命名空间下的作业使用。
如何在 Job 上使用 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 会为上述 Job 生成如下 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 优先级的关系
为给定作业创建 Workload
时,Kueue 会考虑以下场景:
- 作业同时指定了
WorkloadPriorityClass
和PriorityClass
WorkloadPriorityClass
用于 Workload 的优先级。PriorityClass
用于 Pod 的优先级。
- 作业仅指定了
WorkloadPriorityClass
WorkloadPriorityClass
用于 Workload 的优先级。WorkloadPriorityClass
不用于 Pod 的优先级。
- 作业仅指定了
PriorityClass
PriorityClass
用于 Workload 和 Pod 的优先级。
在某些作业框架中,CRD 可能: - 定义多个 Pod 规范,每个规范可以有自己的 Pod 优先级,或 - 在专用字段中定义整体 Pod 优先级。
默认情况下,kueue 会采用第一个设置了 PriorityClassName 的 PodSet,但 CRD 与 Kueue 的集成可以实现
JobWithPriorityClass 接口
来改变此行为。
你可以阅读每个作业集成的代码,了解优先级类的获取方式。
Workload 优先级的用途
Workload 的优先级用于:
- 在 ClusterQueue 中对 Workload 排序。
- 决定某个 Workload 是否可以抢占其他 Workload。
Workload 优先级值始终可变
Workload
的 Priority
字段始终是可变的。
如果某个 Workload
已经挂起一段时间,你可以根据自己的策略考虑提升其优先级以提前执行。
Workload 的 PriorityClassSource
和 PriorityClassName
字段是不可变的。
下一步?
- 了解如何运行作业
- 了解如何使用 Workload 优先级运行作业
- 阅读
WorkloadPriorityClass
的 API 参考
反馈
这个页面有帮助吗?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.