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

在 Kubernetes v1.31 中,我们很高兴引入了对 CPU 管理能力的重大增强:针对 CPUManager 静态策略distribute-cpus-across-cores 选项。此特性目前处于 Alpha 阶段, 默认被隐藏,标志着旨在优化 CPU 利用率和改善多核处理器系统性能的战略转变。

理解这一特性

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

cpu-cache-architecture

虽然默认方法可以最小化核间通信,并在某些情况下是有益的,但也带来了挑战。 在同一物理核上共享的 CPU 可能导致资源竞争,从而可能造成性能瓶颈,这在 CPU 密集型应用中尤为明显。

全新的 distribute-cpus-across-cores 特性通过修改分配策略来解决这个问题。 当此特性被启用时,此策略选项指示 CPUManager 尽可能将 CPU(硬件线程)分发到尽可能多的物理核上。 这种分发旨在最小化共享同一物理核的 CPU 之间的争用,从而通过为应用提供专用的核资源来潜在提高性能。

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

cpu-ordering

启用此特性

要启用此特性,用户首先需要在 kubelet 配置中添加 --cpu-manager-policy=static kubelet 标志或 cpuManagerPolicy: static 字段。 然后用户可以在 Kubernetes 配置中添加 --cpu-manager-policy-options distribute-cpus-across-cores=truedistribute-cpus-across-cores=true 到自己的 CPUManager 策略选项中。此设置指示 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 管理器的更多信息,以及 CPU 管理器与其他节点级资源管理器的关系。

参与其中

此特性由 SIG Node 推动。 如果你有兴趣帮助开发此特性、分享反馈或参与其他目前 SIG Node 项目的工作,请参加 SIG Node 会议了解更多细节。