Kubernetes v1.31: 新的 Kubernetes CPUManager 静态策略:跨核心分配 CPU

在 Kubernetes v1.31 中,我们很高兴推出一项显著增强 CPU 管理能力的功能:CPUManager 静态策略distribute-cpus-across-cores 选项。该功能目前处于 Alpha 阶段,默认隐藏,标志着旨在优化多核处理器上的 CPU 利用率和提升系统性能的战略转变。

理解该功能

传统上,Kubernetes 的 CPUManager 倾向于尽可能紧凑地分配 CPU,通常将它们打包到最少的物理核心上。然而,分配策略很重要,同一物理主机上的 CPU 仍然共享物理核心的一些资源,例如缓存和执行单元等。

cpu-cache-architecture

虽然默认方法最大限度地减少了核心间通信,在某些场景下可能是有益的,但它也带来了一个挑战。CPU 共享物理核心可能导致资源争用,进而可能导致性能瓶颈,这在 CPU 密集型应用中尤为明显。

新的 distribute-cpus-across-cores 功能通过修改分配策略解决了这个问题。启用后,此策略选项会指示 CPUManager 将 CPU(硬件线程)尽可能分散到更多的物理核心上。这种分布旨在最大限度地减少共享同一物理核心的 CPU 之间的争用,通过为应用提供专用核心资源来潜在地提升性能。

从技术上讲,在该静态策略中,空闲 CPU 列表按照图示方式重新排序,旨在从不同的物理核心分配 CPU。

cpu-ordering

启用该功能

要启用此功能,用户首先需要在 KubeletConfiguration 中添加 --cpu-manager-policy=static kubelet flag 或 cpuManagerPolicy: static 字段。然后用户可以在 Kubernetes 配置中的 CPUManager 策略选项中添加 --cpu-manager-policy-options distribute-cpus-across-cores=truedistribute-cpus-across-cores=true。此设置指示 CPUManager 采用新的分布策略。需要注意的是,此策略选项目前不能与 full-pcpus-onlydistribute-cpus-across-numa 选项结合使用。

当前限制和未来方向

与任何新功能一样,特别是处于 Alpha 阶段的功能,存在一些限制和未来改进空间。一个重要的当前限制是 distribute-cpus-across-cores 不能与其他可能在 CPU 分配策略上冲突的策略选项结合使用。此限制可能会影响与某些工作负载和部署场景的兼容性,这些场景依赖于更专业的资源管理。

展望未来,我们致力于增强 distribute-cpus-across-cores 选项的兼容性和功能。未来的更新将重点解决这些兼容性问题,使此策略能够与其他 CPUManager 策略无缝结合使用。我们的目标是提供一个更灵活、更强大的 CPU 分配框架,能够适应各种工作负载和性能需求。

结论

在 Kubernetes CPUManager 中引入 distribute-cpus-across-cores 策略是我们持续努力优化资源管理和提升应用性能的一个进步。通过减少物理核心上的争用,此功能为 CPU 资源分配提供了一种更平衡的方法,尤其有利于运行异构工作负载的环境。我们鼓励 Kubernetes 用户测试此新功能并提供反馈,这将对其未来的发展起到宝贵的作用。

此草稿旨在清晰解释新功能,同时说明其当前阶段和未来改进的预期。

延伸阅读

请查看 控制节点上的 CPU 管理策略 任务页面,了解更多关于 CPU Manager 的信息,以及它如何与其他节点级资源管理器协同工作。

参与其中

此功能由 SIG Node 推动。如果您有兴趣帮助开发此功能、分享反馈或参与 SIG Node 的任何其他进行中的项目,请参加 SIG Node 会议了解更多详情。