本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

Kubernetes v1.31:新的 Kubernetes CPUManager 靜態策略:跨核心分發 CPU

在 Kubernetes v1.31 中,我們很高興地宣佈對 CPU 管理能力的一項重大增強:為 CPUManager 靜態策略引入 distribute-cpus-across-cores 選項。此功能目前處於 Alpha 階段,預設隱藏,標誌著一次旨在最佳化 CPU 利用率和提高多核處理器系統性能的戰略轉變。

瞭解此特性

傳統上,Kubernetes 的 CPUManager 傾向於儘可能緊湊地分配 CPU,通常將它們集中在最少數的物理核心上。然而,分配策略至關重要,同一物理主機上的 CPU 仍然共享物理核心的某些資源,例如快取和執行單元等。

cpu-cache-architecture

雖然預設方法可以最大限度地減少核心間通訊,並且在某些場景下可能有利,但它也帶來了挑戰。共享一個物理核心的 CPU 可能會導致資源爭用,從而可能引發效能瓶頸,這在 CPU 密集型應用程式中尤其明顯。

新的 distribute-cpus-across-cores 功能透過修改分配策略來解決此問題。啟用後,此策略選項會指示 CPUManager 將 CPU(硬體執行緒)分散到儘可能多的物理核心上。這種分佈旨在最大限度地減少共享同一物理核心的 CPU 之間的爭用,透過為應用程式提供專用的核心資源來潛在地提升其效能。

從技術上講,在此靜態策略中,空閒 CPU 列表會按照圖中所示的方式重新排序,目的是從不同的物理核心分配 CPU。

cpu-ordering

啟用該特性

要啟用此功能,使用者首先需要在 kubelet 標誌中新增 --cpu-manager-policy=static,或在 KubeletConfiguration 中設定 cpuManagerPolicy: static 欄位。然後,使用者可以在 Kubernetes 配置中將 --cpu-manager-policy-options distribute-cpus-across-cores=truedistribute-cpus-across-cores=true 新增到他們的 CPUManager 策略選項中。此設定會指示 CPUManager 採用新的分佈策略。需要注意的是,此策略選專案前不能與 full-pcpus-onlydistribute-cpus-across-numa 選項同時使用。

當前的侷限與未來的方向

與任何新功能一樣,尤其是處於 Alpha 階段的功能,存在一些侷限性和未來需要改進的地方。當前一個顯著的侷限是 distribute-cpus-across-cores 無法與其他可能在 CPU 分配策略上存在衝突的策略選項結合使用。這一限制可能會影響與某些依賴更專業化資源管理的工作負載和部署場景的相容性。

展望未來,我們致力於增強 distribute-cpus-across-cores 選項的相容性和功能。未來的更新將專注於解決這些相容性問題,允許此策略與其他 CPUManager 策略無縫結合。我們的目標是提供一個更靈活、更強大的 CPU 分配框架,能夠適應各種工作負載和效能需求。

結論

在 Kubernetes CPUManager 中引入 distribute-cpus-across-cores 策略是我們不斷努力完善資源管理和提高應用程式效能的又一步。透過減少物理核心上的爭用,該功能提供了一種更均衡的 CPU 資源分配方法,尤其有益於執行異構工作負載的環境。我們鼓勵 Kubernetes 使用者測試這一新功能並提供反饋,這對 shaping its future development 將非常有價值。

本草案旨在清晰地解釋新功能,同時設定對其當前階段和未來改進的預期。

進一步閱讀

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

參與進來

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