Kubernetes v1.32 為嚴格的 CPU 預留添加了新的 CPU Manager 靜態策略選項

在 Kubernetes v1.32 中,經過社群多年的討論,我們很高興為 CPU 管理器的靜態策略引入了 strict-cpu-reservation 選項。該功能目前處於 Alpha 階段,相關的策略預設是隱藏的。只有在叢集中明確啟用 Alpha 行為,你才能使用該策略。

瞭解此特性

CPU 管理器的靜態策略用於減少延遲或提高效能。reservedSystemCPUs 為作業系統系統守護程序和 Kubernetes 系統守護程序定義了一個明確的 CPU 集合。此選項專為電信/NFV 型別的用例而設計,在這些用例中,不受控制的中斷/計時器可能會影響工作負載的效能。你可以使用此選項為系統/Kubernetes 守護程序以及中斷/計時器定義明確的 CPU 集合,以便系統上的其餘 CPU 可以專用於工作負載,同時減少不受控制的中斷/計時器的影響。有關此引數的更多詳細資訊,請參閱顯式預留 CPU 列表頁面。

如果你想保護你的系統守護程序和中斷處理,最直接的方法是使用 reservedSystemCPUs 選項。

然而,直到 Kubernetes v1.32 釋出,這種隔離僅對請求整數個 CPU 的 Guaranteed Pods 實現。在 Pod 准入時,kubelet 僅將 CPU **請求**與可分配的 CPU 進行比較。在 Kubernetes 中,limits 可以高於 requests;之前的實現允許 Burstable 和 Best-Effort Pods 使用 reservedSystemCPUs 的容量,這可能會導致主機作業系統的 CPU 資源耗盡 —— 我們知道有人在實際部署中遇到了這種情況。現有的行為也使得基準測試(無論是針對基礎設施還是工作負載)的結果不準確。

當啟用這個新的 strict-cpu-reservation 策略選項時,CPU 管理器的靜態策略將不允許任何工作負載使用為系統預留的 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 管理器計數器來監控此功能的影響

  • 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 預留對於電信/NFV 用例至關重要。它也是啟用一體化型別部署的先決條件,在這種部署中,工作負載被放置在兼具控制、工作和儲存角色的節點上。

我們希望你開始使用此功能,並期待你的反饋。

進一步閱讀

請檢視控制節點上的 CPU 管理策略任務頁面,以瞭解有關 CPU 管理器的更多資訊,以及它與其他節點級資源管理器的關係。

參與進來

此功能由 SIG Node 推動。如果你有興趣幫助開發此功能、分享反饋或參與任何其他正在進行的 SIG Node 專案,請參加 SIG Node 會議以獲取更多詳細資訊。