Kubernetes v1.36 [alpha](默认禁用)工作负载感知抢占引入了一种专为 PodGroup 设计的抢占机制。当 PodGroup 无法调度时,调度器会利用一种抢占逻辑,试图使该 PodGroup 的调度成为可能。这种方法仅在 PodGroup 调度期间使用,并取代了给定 PodGroup 中 Pod 的默认抢占机制。
当启用此功能时,调度器将 PodGroup 视为一个单一的抢占单元,而不是孤立地评估 PodGroup 中的各个 Pod。为了给组中的挂起 Pod 腾出空间,它会在整个集群范围内搜索受害者,并知道如何根据它们的干扰模式(disruption modes)将其他 PodGroup 视为受害者进行抢占。
此功能依赖于 Gang 调度 和 工作负载 API。请确保集群中启用了 GenericWorkload 和 GangScheduling 特性门控以及 scheduling.k8s.io/v1alpha2 API 组。
工作负载感知抢占过程遵循与 默认抢占 相同的原则,但有几点区别:
集群范围域:调度器不是逐个节点地评估抢占,而是将整个集群评估为一个单一的域。它会在多个节点中选择一组受害者,这些受害者可以被移除,从而为抢占 PodGroup 的调度腾出足够的空间。
受害者重要性分级:调度器使用严格的层次结构来决定哪些抢占单元(单个 Pod 或 PodGroup)更重要,应当免受抢占:
Pod 组优先级和干扰:调度器会考虑 PodGroup 特定的 优先级和干扰模式,以评估在抢占事件期间是否以及如何抢占其 Pod。
priority 或 disruptionMode 字段。