前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8S v1.26:CPUManager 正式发布,生产可用!

K8S v1.26:CPUManager 正式发布,生产可用!

作者头像
我的小碗汤
发布2023-03-20 10:11:15
5310
发布2023-03-20 10:11:15
举报
文章被收录于专栏:我的小碗汤我的小碗汤

CPU 管理器是 kubelet 的一部分;kubelet 是 Kubernetes 的节点代理,能够让用户给容器分配独占 CPU。CPU 管理器自从 Kubernetes v1.10 进阶至 Beta[1], 已证明了它本身的可靠性,能够充分胜任将独占 CPU 分配给容器,因此采用率稳步增长, 使其成为性能关键型和低延迟场景的基本组件。随着时间的推移,大多数变更均与错误修复或内部重构有关, 以下列出了几个值得关注、用户可见的变更:

  • 支持显式保留 CPU[2]:之前已经可以请求为系统资源(包括 kubelet 本身)保留给定数量的 CPU,这些 CPU 将不会被用于独占 CPU 分配。现在还可以显式选择保留哪些 CPU,而不是让 kubelet 自动拣选 CPU。
  • 使用 kubelet 本地 PodResources API[3] 向容器报告独占分配的 CPU[4],就像已为设备所做的一样。
  • 优化系统资源的使用[5],消除不必要的 sysfs 变更。

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 管理器策略所赋予的一些行为变化。因此,决定添加 调整静态策略行为的选项[6]。这些选项都达到了不同程度的成熟度,类似于其他的所有 Kubernetes 特性, 为了能够被接受,每个新选项在禁用时都能提供向后兼容的行为,并能在需要进行交互时记录彼此如何交互。

这使得 Kubernetes 项目能够将 CPU 管理器核心组件和核心 CPU 分配算法进阶至 GA,同时也开启了该领域新的实验时代。在 Kubernetes v1.26 中,CPU 管理器支持三个不同的策略选项[7]

  • full-pcpus-only:将 CPU 管理器核心分配算法限制为仅支持完整的物理核心,从而减少允许共享核心的硬件技术带来的嘈杂邻居问题。
  • distribute-cpus-across-numa:驱动 CPU 管理器跨 NUMA 节点均匀分配 CPU,以应对需要多个 NUMA 节点来满足分配的情况。
  • align-by-socket:更改 CPU 管理器将 CPU 分配给容器的方式:考虑 CPU 按插槽而不是 NUMA 节点边界对齐。

后续发展

在主要 CPU 管理器特性进阶后,每个现有的策略选项将遵循其进阶过程,独立于 CPU 管理器和其他选项。添加新选项的空间虽然存在,但随着对更高灵活性的需求不断增长,CPU 管理器及其策略选项当前所提供的灵活性也有不足。

社区中正在讨论如何将 CPU 管理器和当前属于 kubelet 可执行文件的其他资源管理器拆分为可插拔的独立 kubelet 插件。如果你对这项努力感兴趣,请加入 SIG Node 交流频道(Slack、邮件列表、每周会议)进行讨论。

进一步阅读

请查阅控制节点上的 CPU 管理策略[8]任务页面以了解有关 CPU 管理器的更多信息及其如何适配其他节点级别资源管理器。

参与

此特性由 SIG Node[9] 社区驱动。请加入我们与社区建立联系,就上述特性和更多内容分享你的想法和反馈。我们期待你的回音!

参考资料

[1]

进阶至 Beta: https://kubernetes.io/blog/2018/07/24/feature-highlight-cpu-manager/

[2]

支持显式保留 CPU: https://github.com/Kubernetes/Kubernetes/pull/83592

[3]

PodResources API: https://kubernetes.io/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/#monitoring-device-plugin-resources

[4]

向容器报告独占分配的 CPU: https://github.com/Kubernetes/Kubernetes/pull/97415

[5]

优化系统资源的使用: https://github.com/Kubernetes/Kubernetes/pull/101771

[6]

调整静态策略行为的选项: https://github.com/Kubernetes/enhancements/tree/master/keps/sig-node/2625-cpumanager-policies-thread-placement#proposed-change

[7]

三个不同的策略选项: https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/cpu-management-policies.md#static-policy-options

[8]

控制节点上的 CPU 管理策略: https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/cpu-management-policies/

[9]

SIG Node: https://github.com/Kubernetes/community/blob/master/sig-node/README.md

- END -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CPU 管理器的自定义选项
  • 后续发展
  • 进一步阅读
  • 参与
    • 参考资料
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档