工作负载感知抢占 (Workload-Aware Preemption)

特性状态: Kubernetes v1.36 [alpha](默认禁用)

工作负载感知抢占引入了一种专为 PodGroup 设计的抢占机制。当 PodGroup 无法调度时,调度器会利用一种抢占逻辑,试图使该 PodGroup 的调度成为可能。这种方法仅在 PodGroup 调度期间使用,并取代了给定 PodGroup 中 Pod 的默认抢占机制。

当启用此功能时,调度器将 PodGroup 视为一个单一的抢占单元,而不是孤立地评估 PodGroup 中的各个 Pod。为了给组中的挂起 Pod 腾出空间,它会在整个集群范围内搜索受害者,并知道如何根据它们的干扰模式(disruption modes)将其他 PodGroup 视为受害者进行抢占。

此功能依赖于 Gang 调度工作负载 API。请确保集群中启用了 GenericWorkloadGangScheduling 特性门控以及 scheduling.k8s.io/v1alpha2 API 组

工作原理

工作负载感知抢占过程遵循与 默认抢占 相同的原则,但有几点区别:

  1. 集群范围域:调度器不是逐个节点地评估抢占,而是将整个集群评估为一个单一的域。它会在多个节点中选择一组受害者,这些受害者可以被移除,从而为抢占 PodGroup 的调度腾出足够的空间。

  2. 受害者重要性分级:调度器使用严格的层次结构来决定哪些抢占单元(单个 Pod 或 PodGroup)更重要,应当免受抢占:

    • 优先级:优先级越高的单元越重要。
    • 工作负载类型:在相同优先级下,PodGroup 被认为比单个 Pod 更重要。
    • 组大小(PodGroups):如果两个单元都是 PodGroup,则成员更多(规模更大)的那个被认为更重要。
    • 开始时间:更早启动的单元更重要。
  3. Pod 组优先级和干扰:调度器会考虑 PodGroup 特定的 优先级和干扰模式,以评估在抢占事件期间是否以及如何抢占其 Pod。

说明

在调度单个 Pod 时,适用默认的 Pod 抢占规则。截至 1.36 版本,当调度器执行单个 Pod 的默认抢占并尝试抢占属于 PodGroup 的 Pod 时,它**不会**遵循该 PodGroup 的 prioritydisruptionMode 字段。

接下来


最后修改于 2026 年 2 月 26 日上午 11:21 PST: KEP-5710: Update scheduler docs for workload aware preemption (29bd816087)