工作负载感知的抢占

工作负载感知的抢占

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

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

当此特性被启用时,调度器将 PodGroup 视为单个抢占者单元,而不是孤立地评估 PodGroup 中的各个 Pod。 为了给组中悬决的 Pod 腾出空间,它会在整个集群中搜索被抢占者, 并知道如何根据其他 PodGroup 的干扰模式将其作为被抢占者来处理和抢占。

此特性依赖于编组调度Workload API。确保在集群中启用了 GenericWorkloadGangScheduling 特性门控以及 scheduling.k8s.io/v1alpha2 API 组

工作原理

工作负载感知的抢占过程遵循与默认抢占相同的原则, 但存在以下差异:

  1. 集群范围域:调度器不会逐个节点地评估抢占,而是将整个集群作为单个域进行评估。 它会在多个节点间选择一组可以被移除的被抢占者,从而为抢占者 PodGroup 腾出足够的调度空间。
  1. 被抢占者重要性层级:调度器使用严格的层级来决定哪些抢占单元(单个 Pod 或 PodGroup)更为关键、应当被豁免抢占:

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

说明:

当调度单个 Pod 时,适用默认的 Pod 抢占机制。 从 1.36 版本开始,当调度器为单个 Pod 执行默认抢占并尝试抢占属于某个 PodGroup 的 Pod 时, 它不会考虑该 PodGroup 的 prioritydisruptionMode 字段。

接下来

最后修改 August 18, 2026 at 3:51 PM PST: [zh] Add workload-aware-preemption.md (af569c687c)