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

启用此功能

要启用此功能,用户首先需要在 KubeletConfiuration 中添加 --cpu-manager-policy=static kubelet 标志或 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 管理器的更多信息,以及它如何与其他节点级资源管理器相关联。

参与其中

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