本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes v1.26:CPUManager 進入 GA 階段
CPU 管理器是 kubelet(Kubernetes 節點代理)的一部分,它使使用者能夠為容器分配獨佔的 CPU。自 Kubernetes v1.10 中 進入 Beta 階段以來,CPU 管理器證明了其可靠性,並很好地完成了為容器分配獨佔 CPU 的任務,因此其採用率穩步增長,使其成為效能關鍵型和低延遲環境中的重要元件。隨著時間的推移,大多數變更是關於錯誤修復或內部重構,其中值得注意的面向使用者的變更有以下幾點:
- 支援顯式預留 CPU:之前已經可以請求為系統資源(包括 kubelet 本身)預留給定數量的 CPU,這些 CPU 不會被用於獨佔 CPU 分配。現在還可以顯式選擇要預留哪些 CPU,而不是讓 kubelet 自動選擇。
- 使用 kubelet 本地的 PodResources API,向容器報告獨佔分配的 CPU,這與已有的裝置報告方式非常相似。
- 最佳化系統資源的使用,消除不必要的 sysfs 變更。
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 社群推動。請加入我們,與社群聯絡,分享您對上述特性及其他方面的想法和反饋。我們期待您的聲音!