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 會議以獲取更多詳細資訊。