Kubernetes v1.37:推进工作负载感知调度

💡 原文英文,约2800词,阅读约需11分钟。
📝

内容提要

Kubernetes v1.37将Workload/PodGroup API及gang调度升级为Beta,引入CompositePodGroup API支持多层级调度和拓扑感知,并扩展抢占与DRA共享。新增控制器集成API和workloadbuilder库,Job控制器原生支持显式调度。这些改进旨在优化AI/ML等复杂批处理工作负载的调度效率。

🔎

延伸解读

Beta升级的意义与影响

Workload/PodGroup API及gang调度在v1.37中升级为Beta,标志着这些特性已接近GA,适合更广泛的采用。但需注意,v1alpha2版本已被v1alpha3取代,引入了破坏性变更,特别是围绕disruptionMode的API结构调整。早期采用者需关注这些变化,并确保在升级前适配新版本。

调度队列与弹性改进

v1.37中,PodGroup成为调度队列的一等公民,整个组作为一个整体排队,而非每个Pod单独排队,这为未来更高级的队列策略奠定基础。同时,minCount字段变为可变,允许控制器动态调整gang的最小规模,支持弹性工作负载的优雅降级或扩展,而不会中断已调度的Pod。

抢占行为的重要变化

v1.37中,默认抢占现在会尊重PodGroup的disruptionMode字段,修复了v1.36中单Pod抢占可能违反组级中断策略的问题。此外,PodGroup新增preemptionPolicy字段(需启用特性门控),作为是否允许抢占的权威字段,取代了之前仅依赖Pod级设置的逻辑,使抢占控制更明确。

采用注意事项

v1.37中的Beta和Alpha特性默认禁用,需手动启用。Beta特性需在kube-apiserver、kube-controller-manager和kubelet上启用相应特性门控;Alpha特性如TopologyAwareWorkloadScheduling和CompositePodGroup需在多个组件上启用,且CompositePodGroup依赖TopologyAwareWorkloadScheduling。建议在测试集群中先行验证。

Q&A

Kubernetes v1.37 中 Workload/PodGroup API 和 gang 调度升级到什么阶段?

在 Kubernetes v1.37 中,Workload/PodGroup API 和 gang 调度正式升级为 Beta 版本,标志着原生“全有或全无”调度能力得到更广泛的采用。

Kubernetes v1.37 引入的 CompositePodGroup API 有什么作用?

CompositePodGroup API 允许表达多层级调度需求,通过树形结构组织 PodGroup 和 CompositePodGroup,支持多级拓扑约束、gang 调度和抢占策略,适用于 JobSet、LeaderWorkerSet 等复杂工作负载。

Kubernetes v1.37 中 PodGroup 的 minCount 字段有什么变化?

minCount 字段从不可变变为可变,允许控制器动态调整 gang 的最小 Pod 数量,支持弹性工作负载的优雅降级或扩展,而不中断已调度的 Pod。

Kubernetes v1.37 中工作负载感知抢占有哪些改进?

改进包括:默认抢占现在尊重 PodGroup 的 disruptionMode;抢占模拟算法优化,只运行一次调度算法;PodGroup 新增 preemptionPolicy 字段,作为是否允许抢占的权威字段。

Kubernetes v1.37 如何支持多层级拓扑感知调度?

通过 CompositePodGroup API 和 Workload 中的 compositePodGroupTemplates 字段,可以在不同层级指定拓扑约束,调度器自上而下解析,子组的拓扑域限制在父组选择的拓扑域内。

Kubernetes v1.37 中 Job 控制器如何利用新的调度 API?

Job API 新增 .spec.scheduling 字段,允许显式声明调度策略、拓扑约束和资源声明,Job 控制器会将其编译为 Workload 和 PodGroup,并设置 Pod 的 schedulingGroup.podGroupName。

Kubernetes v1.37 中 DRA 共享 ResourceClaims 有什么变化?

DRAWorkloadResourceClaims 特性门控升级为 Beta,并修复了禁用该特性时的行为:当 Pod 的 resourceClaims 引用与 PodGroup 匹配的模板时,不再为每个 Pod 创建 ResourceClaim,避免资源耗尽。

Kubernetes v1.37 中 workloadbuilder 库的作用是什么?

workloadbuilder 库提供标准化的构建块,帮助外部控制器将调度意图转换为调度对象,包括验证、构建 Workload 和创建 PodGroup/CompositePodGroup,简化与 WAS 的集成。

🏷️

标签

➡️

继续阅读