我的机器有 48 个 CPU。在创建 pod 之前,我通过 离线了 1-47 个 CPU echo "0" > /sys/devices/system/cpuN/online
。
当我在节点上创建第一个 pod 时,我#1
通过 echo在线 CPU。pod"1" > /sys/devices/system/cpu1/online
运行 CPU 压力任务,我看到CPU0
这个 pod 已充分利用。pod 使用99-100% CPU
。
当我在同一个节点上创建第二个 pod 时,我上线了CPU #2 echo "1" > /sys/devices/system/cpu2/online
。但只有 CPU0 被充分利用,CPU1
没有CPU2
负载。两个 pod 都以 50% 的 CPU 使用率运行。
如果我为同一个节点创建更多 pod,它们只会共享CPU0
我联机的更多 CPU。所有其他联机 CPU 都处于闲置状态。
我的Kubernetes version is 1.23.12
。在版本中不会发生这种情况1.28
。在版本中1.28
,所有 pod 都在不同的 CPU 中运行,使用率为 100%。Pod 的 yaml 有 CPU 限制和请求为 1。
我不确定这是版本错误1.23.12
还是某些配置错误。任何评论都将不胜感激。
答案1
CPU 管理器负责为CPU
Kubernetes 中的 Pod 分配资源。在节点上,CPU 管理器负责启用增强型工作负载策略。例如,根据 Pod 是否受到限制以及调度时有哪些 CPU 核心可用,它会指示多个CPU
密集型 Pod 将任务分担到不同的 CPU 核心上。
CPU Manager 自 Kubernetes 开始处于测试阶段v1.12
,默认启用。kubelet--cpu-manager-policy
选项用于定义 CPU Manager 策略。
在Kubernetes 版本 1.23.14他们有个修复错误在變化中。
Kubelet: fix GetAllocatableCPUs method in cpumanage.
从版本 1.26version 1.23.12
,CPU 管理器在 Kubernetes 中正式发布。这意味着 CPU 管理器功能已被视为稳定,并已准备好在生产环境中使用。所以这可能是您在而不是 中遇到问题的原因version 1.31
。