所有 Kubernetes Pod 都在單一 CPU 中運行

所有 Kubernetes Pod 都在單一 CPU 中運行

我的機器有 48 個 CPU。在建立 pod 之前,我透過 使 1-47 個 CPU 離線echo "0" > /sys/devices/system/cpuN/online

當我為節點建立第一個 pod 時,我#1透過 echo使 CPU 聯機"1" > /sys/devices/system/cpu1/online。 Pod 運行 CPU 壓力任務,我看到CPU0該 Pod 已完全使用。吊艙使用99-100% CPU.

當我在同一節點建立第二個 Pod 時,我上線了CPU #2 echo "1" > /sys/devices/system/cpu2/online。但只有CPU0被充分利用,CPU1CPU2沒有負載。兩個 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 Manager 負責為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.26版,CPU 管理器在 Kubernetes 中正式發布。這意味著 CPU 管理器功能已被認為是穩定的,並且可以在生產環境中使用。所以這可能是您在version 1.23.12not in中遇到問題的原因version 1.31

相關內容