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

Kubernetes v1.26:CPUManager 進入 GA 階段

CPU 管理器是 kubelet(Kubernetes 節點代理)的一部分,它使使用者能夠為容器分配獨佔的 CPU。自 Kubernetes v1.10 中 進入 Beta 階段以來,CPU 管理器證明了其可靠性,並很好地完成了為容器分配獨佔 CPU 的任務,因此其採用率穩步增長,使其成為效能關鍵型和低延遲環境中的重要元件。隨著時間的推移,大多數變更是關於錯誤修復或內部重構,其中值得注意的面向使用者的變更有以下幾點:

CPU 管理器達到了“開箱即用”的程度,因此在 Kubernetes v1.26 中,它已正式釋出(GA)。

CPU 管理器的自定義選項

CPU 管理器支援兩種操作模式,透過其**策略**進行配置。使用 `none` 策略時,CPU 管理器為容器分配 CPU 時沒有任何特定約束,除了在 Pod 規約中設定的(可選)配額。使用 `static` 策略時,如果 Pod 屬於 Guaranteed QoS 類別,並且該 Pod 中的每個容器都請求整數個 vCPU 核心,則 CPU 管理器會獨佔地分配 CPU。獨佔分配意味著其他容器(無論是來自同一個 Pod 還是不同的 Pod)都不會被排程到該 CPU 上。

這種簡單的操作模型很好地服務了使用者群體,但隨著 CPU 管理器日益成熟,使用者開始關注更復雜的用例以及如何更好地支援它們。

社群沒有增加更多策略,而是意識到幾乎所有新的用例都是 `static` CPU 管理器策略所啟用行為的某種變體。因此,決定新增選項來調整靜態策略的行為。這些選項像其他 Kubernetes 特性一樣,具有不同的成熟度。為了被接受,每個新選項在停用時都提供向後相容的行為,並記錄它們之間如何互動(如果它們確實互動的話)。

這使得 Kubernetes 專案能夠將 CPU 管理器核心元件和核心 CPU 分配演算法升級到 GA,同時也為該領域的實驗開創了一個新時代。在 Kubernetes v1.26 中,CPU 管理器支援三種不同的策略選項

full-pcpus-only
將 CPU 管理器的核心分配演算法限制為僅使用完整的物理核心,從而減少由允許共享核心的硬體技術引起的“吵鬧的鄰居”問題。
distribute-cpus-across-numa
驅動 CPU 管理器在 NUMA 節點之間均勻分佈 CPU,適用於需要多個 NUMA 節點來滿足分配請求的情況。
align-by-socket
更改 CPU 管理器為容器分配 CPU 的方式:將 CPU 視為在插槽(socket)邊界對齊,而不是 NUMA 節點邊界。

未來發展

在 CPU 管理器主特性正式釋出後,每個現有的策略選項將遵循其各自的畢業流程,獨立於 CPU 管理器和其他選項。未來還有增加新選項的空間,但同時,對靈活性(超出 CPU 管理器及其策略選專案前所能提供的)的需求也日益增長。

社群正在進行討論,計劃將 CPU 管理器和當前屬於 kubelet 可執行檔案的其他資源管理器拆分為可插拔、獨立的 kubelet 外掛。如果您對此工作感興趣,請透過 SIG Node 的溝通渠道(Slack、郵件列表、每週會議)加入討論。

進一步閱讀

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

參與進來

此特性由 SIG Node 社群推動。請加入我們,與社群聯絡,分享您對上述特性及其他方面的想法和反饋。我們期待您的聲音!