Kubernetes v1.33:Pod 原地調整大小功能進階至 Beta
我謹代表 Kubernetes 專案,激動地宣佈,最初在 Kubernetes v1.27 中作為 Alpha 功能引入的 Pod 原地調整大小(in-place Pod resize)功能(也稱為原地 Pod 垂直擴縮),已升級至 Beta 階段,並將在 Kubernetes v1.33 版本中預設啟用!這標誌著在使 Kubernetes 工作負載的資源管理更靈活、干擾更小方面,我們取得了重要的里程碑。
什麼是 Pod 原地調整大小?
傳統上,更改分配給容器的 CPU 或記憶體資源需要重啟 Pod。雖然這對於許多無狀態應用來說是可以接受的,但對於有狀態服務、批處理作業或任何對重啟敏感的工作負載來說,這可能會造成中斷。
Pod 原地調整大小允許你更改分配給一個正在執行的 Pod 內的容器的 CPU 和記憶體請求(requests)與限制(limits),通常無需重啟容器。
核心理念如下
- Pod 規範中的
spec.containers[*].resources
欄位現在代表期望的資源,並且對於 CPU 和記憶體是可變的。 status.containerStatuses[*].resources
欄位反映了當前在一個執行中容器上配置的實際資源。- 你可以透過新的
resize
子資源更新 Pod 規範中的期望資源來觸發調整大小操作。
你可以在 v1.33 的 Kubernetes 叢集上,使用 kubectl 編輯一個 Pod 來嘗試此功能(需要 kubectl
v1.32+ 版本)。
kubectl edit pod <pod-name> --subresource resize
有關詳細的使用說明和示例,請參閱 Kubernetes 官方文件:調整分配給容器的 CPU 和記憶體資源。
為什麼 Pod 原地調整大小很重要?
Kubernetes 在水平擴充套件工作負載(增加或減少副本)方面仍然表現出色,但 Pod 原地調整大小為垂直擴充套件解鎖了幾個關鍵優勢:
- 減少中斷: 有狀態應用、長時間執行的批處理作業和敏感工作負載可以在不遭受與 Pod 重啟相關的停機或狀態丟失的情況下調整其資源。
- 提高資源利用率: 在不中斷的情況下,縮減配置過度的 Pod,從而釋放叢集中的資源。反之,為負載較重的 Pod 提供更多資源,而無需重啟。
- 更快的擴充套件速度: 更迅速地應對臨時的資源需求。例如,Java 應用在啟動時通常比在穩定狀態下需要更多的 CPU。可以從較高的 CPU 開始,之後再調低。
從 Alpha 到 Beta 有哪些變化?
自 v1.27 的 Alpha 版本釋出以來,我們投入了大量工作來使該功能成熟,提高其穩定性,並根據反饋和進一步開發來完善使用者體驗。以下是主要變化:
顯著的面向使用者的變化
resize
子資源: 修改 Pod 資源現在必須透過 Pod 的resize
子資源來完成 (kubectl patch pod <name> --subresource resize ...
)。kubectl
v1.32+ 版本支援此引數。- 透過 Conditions 反映調整狀態: 舊的
status.resize
欄位已被棄用。調整大小操作的狀態現在透過兩個 Pod Conditions 公開:PodResizePending
:表示 Kubelet 無法立即批准調整大小(例如,reason: Deferred
表示暫時無法,reason: Infeasible
表示在節點上不可能)。PodResizeInProgress
:表示調整大小已被接受並正在應用。在此階段遇到的錯誤現在會在此 Condition 的訊息中報告,並帶有reason: Error
。
- Sidecar 支援: 現在支援原地調整 Sidecar 容器。
穩定性和可靠性增強
- 精煉的已分配資源管理: Kubelet 的分配管理邏輯進行了重大重構,使其更加一致和健壯。這些更改消除了整類的錯誤,並大大提高了 Pod 原地調整大小的可靠性。
- 改進的檢查點和狀態跟蹤: 實現了一個更強大的系統來跟蹤“已分配(allocated)”和“已驅動(actuated)”的資源,使用新的檢查點檔案(
allocated_pods_state
,actuated_pods_state
)來可靠地管理跨 Kubelet 重啟的調整大小狀態,並處理執行時報告的資源與請求資源不符的邊緣情況。修復了與檢查點和狀態恢復相關的幾個錯誤。檢查點的效率也得到了提高。 - 更快的調整大小檢測: Kubelet 的 Pod 生命週期事件生成器(PLEG)的增強功能使 Kubelet 能夠更快地響應和完成調整大小操作。
- 增強的 CRI 整合: 新增了
UpdatePodSandboxResources
CRI 呼叫,以便更好地通知執行時和外掛(如 NRI)關於 Pod 級資源的變化。 - 大量的 Bug 修復: 解決了與 systemd cgroup 驅動程式、無限制容器的處理、CPU 最小份額計算、容器重啟退避、錯誤傳播、測試穩定性等相關的問題。
接下來是什麼?
進入 Beta 階段意味著該功能已準備好進行更廣泛的採用,但開發並未就此停止!以下是社群下一步關注的重點:
- 穩定性和生產化: 繼續專注於加固功能,提高效能,並確保其在生產環境中足夠健壯。
- 解決限制: 努力放寬文件中提到的一些當前限制,例如允許減少記憶體限制。
- VerticalPodAutoscaler (VPA) 整合: 使 VPA 能夠利用 Pod 原地調整大小的工作已經在進行中。一個新的
InPlaceOrRecreate
更新模式將允許它首先嚐試非破壞性的調整大小,如果需要,則回退到重新建立。這將使使用者能夠從 VPA 的建議中受益,同時顯著減少中斷。 - 使用者反饋: 收集採用 Beta 功能的使用者的反饋對於優先考慮進一步的增強和解決任何發現的問題或錯誤至關重要。
開始使用並提供反饋
由於 InPlacePodVerticalScaling
特性門控在 v1.33 中預設啟用,你可以立即開始體驗 Pod 原地調整大小!
請參閱文件以獲取詳細的指南和示例。
隨著此功能進入 Beta 階段,你的反饋非常寶貴。請透過標準的 Kubernetes 溝通渠道(GitHub issues、郵件列表、Slack)報告任何問題或分享你的經驗。你也可以查閱 KEP-1287:原地更新 Pod 資源以瞭解完整深入的設計細節。
我們期待看到社群如何利用 Pod 原地調整大小來在 Kubernetes 上構建更高效、更有彈性的應用程式!