本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes v1.31:新的 Kubernetes CPUManager 静态策略:跨核心分发 CPU
在 Kubernetes v1.31 中,我们很高兴地宣布对 CPU 管理能力的一项重大增强:为 CPUManager 静态策略引入 distribute-cpus-across-cores
选项。此功能目前处于 Alpha 阶段,默认隐藏,标志着一次旨在优化 CPU 利用率和提高多核处理器系统性能的战略转变。
了解此特性
传统上,Kubernetes 的 CPUManager 倾向于尽可能紧凑地分配 CPU,通常将它们集中在最少数的物理核心上。然而,分配策略至关重要,同一物理主机上的 CPU 仍然共享物理核心的某些资源,例如缓存和执行单元等。

虽然默认方法可以最大限度地减少核心间通信,并且在某些场景下可能有利,但它也带来了挑战。共享一个物理核心的 CPU 可能会导致资源争用,从而可能引发性能瓶颈,这在 CPU 密集型应用程序中尤其明显。
新的 distribute-cpus-across-cores
功能通过修改分配策略来解决此问题。启用后,此策略选项会指示 CPUManager 将 CPU(硬件线程)分散到尽可能多的物理核心上。这种分布旨在最大限度地减少共享同一物理核心的 CPU 之间的争用,通过为应用程序提供专用的核心资源来潜在地提升其性能。
从技术上讲,在此静态策略中,空闲 CPU 列表会按照图中所示的方式重新排序,目的是从不同的物理核心分配 CPU。

启用该特性
要启用此功能,用户首先需要在 kubelet 标志中添加 --cpu-manager-policy=static
,或在 KubeletConfiguration 中设置 cpuManagerPolicy: static
字段。然后,用户可以在 Kubernetes 配置中将 --cpu-manager-policy-options distribute-cpus-across-cores=true
或 distribute-cpus-across-cores=true
添加到他们的 CPUManager 策略选项中。此设置会指示 CPUManager 采用新的分布策略。需要注意的是,此策略选项目前不能与 full-pcpus-only
或 distribute-cpus-across-numa
选项同时使用。
当前的局限与未来的方向
与任何新功能一样,尤其是处于 Alpha 阶段的功能,存在一些局限性和未来需要改进的地方。当前一个显著的局限是 distribute-cpus-across-cores
无法与其他可能在 CPU 分配策略上存在冲突的策略选项结合使用。这一限制可能会影响与某些依赖更专业化资源管理的工作负载和部署场景的兼容性。
展望未来,我们致力于增强 distribute-cpus-across-cores
选项的兼容性和功能。未来的更新将专注于解决这些兼容性问题,允许此策略与其他 CPUManager 策略无缝结合。我们的目标是提供一个更灵活、更强大的 CPU 分配框架,能够适应各种工作负载和性能需求。
结论
在 Kubernetes CPUManager 中引入 distribute-cpus-across-cores
策略是我们不断努力完善资源管理和提高应用程序性能的又一步。通过减少物理核心上的争用,该功能提供了一种更均衡的 CPU 资源分配方法,尤其有益于运行异构工作负载的环境。我们鼓励 Kubernetes 用户测试这一新功能并提供反馈,这对 shaping its future development 将非常有价值。
本草案旨在清晰地解释新功能,同时设定对其当前阶段和未来改进的预期。
进一步阅读
请查看控制节点上的 CPU 管理策略任务页面,以了解有关 CPU 管理器的更多信息,以及它与其他节点级资源管理器的关系。
参与进来
此功能由 SIG Node 推动。如果你有兴趣帮助开发此功能、分享反馈或参与任何其他正在进行的 SIG Node 项目,请参加 SIG Node 会议了解更多详情。