Kubernetes v1.32 新增 CPU 管理器静态策略选项以实现严格 CPU 预留
在 Kubernetes v1.32 中,经过社区多年的讨论,我们很高兴为 CPU Manager static 策略引入了一个 strict-cpu-reservation
选项。此功能目前处于 Alpha 阶段,关联的策略默认是隐藏的。只有在集群中明确启用 Alpha 行为,才能使用此策略。
理解此功能
CPU Manager static 策略用于减少延迟或提高性能。reservedSystemCPUs
为 OS 系统守护进程和 Kubernetes 系统守护进程定义了一个明确的 CPU 集。此选项专为 Telco/NFV 类用例设计,在这些用例中,不受控制的中断/计时器可能会影响工作负载性能。您可以使用此选项为系统/Kubernetes 守护进程以及中断/计时器定义明确的 cpuset,这样系统上的其余 CPU 就可以专门用于工作负载,受不受控制的中断/计时器的影响更小。有关此参数的更多详细信息,请参见明确保留 CPU 列表页面。
如果您想保护系统守护进程和中断处理,显而易见的方法是使用 reservedSystemCPUs
选项。
然而,在 Kubernetes v1.32 发布之前,这种隔离仅对请求整数个 CPU 的 guaranteed Pod 生效。在 Pod 准入时,kubelet 仅将 CPU 请求与可分配 CPU 进行比较。在 Kubernetes 中,limit 可以高于 request;之前的实现允许 burstable 和 best-effort Pod 占用 reservedSystemCPUs
的容量,这可能会导致宿主 OS 服务 CPU 饥饿 - 我们知道在实际部署中有人遇到了这个问题。这种现有行为也使得基准测试(包括基础设施和工作负载)结果不准确。
启用此新的 strict-cpu-reservation
策略选项后,CPU Manager static 策略将不允许任何工作负载使用保留的系统 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
计数长期为零,您的 best-effort 工作负载可能会发生资源饥饿。
我们认为任何出于运维目的(例如日志转发器)所需的 Pod 都不应以 best-effort 方式运行,但您可以根据需要检查和调整保留的 CPU 核心数量。
结论
严格的 CPU 保留对于 Telco/NFV 用例至关重要。它也是实现一体化部署类型(工作负载部署在同时承担控制、工作节点和存储角色的节点上)的先决条件。
我们希望您开始使用此功能,并期待您的反馈。
延伸阅读
请查看 控制节点上的 CPU 管理策略 任务页面,了解更多关于 CPU Manager 的信息,以及它如何与其他节点级资源管理器协同工作。
参与贡献
此功能由 SIG Node 推动。如果您有兴趣帮助开发此功能、分享反馈或参与任何其他正在进行的 SIG Node 项目,请参加 SIG Node 会议了解更多详情。