工作负载优先级类

一个优先级类,其值由 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 为上述作业生成了以下 WorkloadPriorityClassName 字段可以接受 PriorityClassWorkloadPriorityClass 名称作为值。为了区分,当使用 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 考虑以下场景

  1. 作业同时指定 WorkloadPriorityClassPriorityClass
  • WorkloadPriorityClass 用于工作负载的优先级。
  • PriorityClass 用于 Pod 的优先级。
  1. 作业仅指定 WorkloadPriorityClass
  • WorkloadPriorityClass 用于工作负载的优先级。
  • WorkloadPriorityClass 不用于 Pod 的优先级。
  1. 作业仅指定 PriorityClass
  • PriorityClass 用于工作负载的优先级和 Pod 的优先级。

在某些作业框架中,有 CRD

  • 定义多个 Pod 规范,其中每个规范可以有自己的 Pod 优先级,或
  • 在专用字段中定义整体 Pod 优先级。默认情况下,kueue 将采用第一个具有一个设置的 PodSet 的 PriorityClassName,但是 CRD 与 Kueue 的集成可以实现 JobWithPriorityClass 接口 来更改此行为。你可以阅读每个作业集成的代码,以了解如何获取优先级类。

工作负载优先级使用位置

工作负载优先级用于

  • 对 ClusterQueues 中的工作负载进行排序。
  • 确定工作负载是否可以抢占其他工作负载。

工作负载优先级值始终可变

WorkloadPriority 字段始终可变。如果 Workload 已挂起一段时间,你可以考虑根据自己的策略更新其优先级,以更早执行它。Workload 的 PriorityClassSourcePriorityClassName 字段不可变。

接下来是什么?



上次修改时间为 2024 年 3 月 25 日:将任务组织到文件夹中 (#1899) (d43d3ea4)