所有 Kubernetes Pod 都在单个 CPU 中运行

所有 Kubernetes Pod 都在单个 CPU 中运行

我的机器有 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 管理器负责为CPUKubernetes 中的 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

相关内容