Kubernetes v1.37:推进工作负载感知调度
内容提要
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 的集成。