Kubernetes v1.32 增加了新的 CPU Manager 静态策略选项用于严格 CPU 预留

在 Kubernetes v1.32 中,经过社区多年的讨论,我们很高兴地引入了 CPU Manager 静态策略strict-cpu-reservation 选项。此特性当前处于 Alpha 阶段,默认情况下关联的策略是隐藏的。 只有在你的集群中明确启用了此 Alpha 行为后,才能使用此策略。

理解此特性

CPU Manager 静态策略用于减少延迟或提高性能。reservedSystemCPUs 定义了一个明确的 CPU 集合,供操作系统系统守护进程和 Kubernetes 系统守护进程使用。 此选项专为 Telco/NFV 类型的使用场景设计,在这些场景中,不受控制的中断/计时器可能会影响工作负载的性能。 你可以使用此选项为系统/Kubernetes 守护进程以及中断/计时器定义明确的 CPU 集合, 从而使系统上的其余 CPU 可以专用于工作负载,并减少不受控制的中断/计时器带来的影响。 有关此参数的更多详细信息,请参阅 显式预留的 CPU 列表 页面。

如果你希望保护系统守护进程和中断处理,显而易见的方法是使用 reservedSystemCPUs 选项。

然而,在 Kubernetes v1.32 发布之前,这种隔离仅针对请求整数个 CPU 的 Guaranteed 类型 Pod 实现。在 Pod 准入时,kubelet 仅将 CPU 请求量与可分配的 CPU 进行比较。在 Kubernetes 中,限制值可以高于请求值; 之前的实现允许 Burstable 和 BestEffort 类型的 Pod 使用 reservedSystemCPUs 的容量, 这可能导致主机操作系统服务缺乏足够的 CPU 资源 —— 并且我们已经知道在实际部署中确实发生过这种情况。 现有的行为还导致基础设施和工作负载的基准测试结果不准确。

当启用这个新的 strict-cpu-reservation 策略选项后,CPU Manager 静态策略将不允许任何工作负载使用预留的系统 CPU 核心。

启用此特性

要启用此特性,你需要同时开启 CPUManagerPolicyAlphaOptions 特性门控和 strict-cpu-reservation 策略选项。并且如果存在 /var/lib/kubelet/cpu_manager_state 文件,则需要删除该文件并重启 kubelet。

使用以下 kubelet 配置:

kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
featureGates:
  ...
  CPUManagerPolicyOptions: true
  CPUManagerPolicyAlphaOptions: true
cpuManagerPolicy: static
cpuManagerPolicyOptions:
  strict-cpu-reservation: "true"
reservedSystemCPUs: "0,32,1,33,16,48"
...

当未设置 strict-cpu-reservation 或将其设置为 false 时:

# cat /var/lib/kubelet/cpu_manager_state
{"policyName":"static","defaultCpuSet":"0-63","checksum":1058907510}

strict-cpu-reservation 设置为 true 时:

# cat /var/lib/kubelet/cpu_manager_state
{"policyName":"static","defaultCpuSet":"2-15,17-31,34-47,49-63","checksum":4141502832}

监控此特性

你可以通过检查以下 CPU Manager 计数器来监控该特性的影响:

  • cpu_manager_shared_pool_size_millicores:报告共享池大小,以毫核为单位(例如 13500m)
  • cpu_manager_exclusive_cpu_allocation_count:报告独占分配的核心数,按完整核心计数(例如 16)

如果 cpu_manager_shared_pool_size_millicores 计数在长时间内为零, 你的 BestEffort 类型工作负载可能会因资源匮乏而受到影响。

我们建议,任何用于操作目的的 Pod(如日志转发器)都不应以 BestEffort 方式运行, 但你可以根据需要审查并调整预留的 CPU 核心数量。

总结

严格的 CPU 预留对于 Telco/NFV 使用场景至关重要。 它也是启用一体化部署类型(其中工作负载被放置在同时担任控制面节点、工作节点和存储角色的节点上)的前提条件。

我们希望你开始使用该特性,并期待你的反馈。

进一步阅读

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

参与其中

此特性由 SIG Node 推动。如果你有兴趣帮助开发此特性、分享反馈或参与任何其他正在进行的 SIG Node 项目, 请参加 SIG Node 会议以获取更多详情。