本文已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

Kubernetes v1.26:CPUManager 正式发布 (GA)

CPU 管理器是 kubelet(Kubernetes 节点代理)的一部分,它允许用户为容器分配独占 CPU。自 Kubernetes v1.10 版本 毕业成为 Beta 版本 以来,CPU 管理器证明了其可靠性,并履行了为容器分配独占 CPU 的职责,因此其应用稳步增长,使其成为性能关键和低延迟设置中的主要组件。随着时间的推移,大多数更改都是关于错误修复或内部重构,以下是值得注意的用户可见的更改:

CPU 管理器已经达到了“开箱即用”的程度,因此在 Kubernetes v1.26 中,它已升级为正式可用 (GA)。

CPU 管理器的自定义选项

CPU 管理器支持两种操作模式,使用其策略进行配置。使用 none 策略,CPU 管理器将 CPU 分配给容器,没有任何特定的约束,除了 Pod 规范中设置的(可选)配额。使用 static 策略,如果 Pod 属于 Guaranteed QoS 类,并且该 Pod 中的每个容器都请求整数数量的 vCPU 核心,则 CPU 管理器将独占分配 CPU。独占分配意味着其他容器(无论是来自同一个 Pod 还是来自不同的 Pod)都不会被调度到该 CPU 上。

这种简单的操作模型很好地服务了用户群,但是随着 CPU 管理器的日益成熟,用户开始关注更复杂的使用场景以及如何更好地支持它们。

社区意识到,与其添加更多的策略,不如说几乎所有新的使用场景都是 static CPU 管理器策略启用的行为的某种变体。因此,决定添加 选项来调整静态策略的行为。这些选项的成熟度各不相同,就像任何其他 Kubernetes 功能一样,为了被接受,每个新选项在禁用时都提供向后兼容的行为,并记录它们如何相互交互(如果它们确实需要交互)。

这使 Kubernetes 项目能够将 CPU 管理器核心组件和核心 CPU 分配算法升级到 GA,同时也使该领域进入了一个新的实验时代。在 Kubernetes v1.26 中,CPU 管理器支持 三种不同的策略选项

full-pcpus-only
将 CPU 管理器核心分配算法限制为仅使用完整的物理核心,从而减少来自允许共享核心的硬件技术的噪音邻居问题。
distribute-cpus-across-numa
驱动 CPU 管理器将 CPU 均匀分布在 NUMA 节点上,以便在需要多个 NUMA 节点才能满足分配的情况下使用。
align-by-socket
更改 CPU 管理器将 CPU 分配给容器的方式:考虑将 CPU 与套接字边界对齐,而不是与 NUMA 节点边界对齐。

进一步发展

在主要 CPU 管理器功能升级后,每个现有的策略选项都将遵循各自的升级流程,与 CPU 管理器和其他选项相互独立。有添加新选项的空间,但对 CPU 管理器及其策略选项目前所提供的更大灵活性的需求也在增长。

社区正在讨论将 CPU 管理器和其他目前属于 kubelet 可执行文件一部分的资源管理器拆分为可插拔的独立 kubelet 插件。如果您对这项工作感兴趣,请加入 SIG Node 通信渠道(Slack、邮件列表、每周会议)的讨论。

进一步阅读

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

参与其中

此功能由 SIG Node 社区推动。请加入我们,与社区联系,并分享您关于上述功能及其他方面的想法和反馈。我们期待您的来信!