自動擴縮工作負載

透過自動擴縮,你可以透過一種或多種方式自動更新工作負載。這使得你的叢集能夠更靈活、高效地應對資源需求的變化。

在 Kubernetes 中,你可以根據當前的資源需求來**擴縮**工作負載。這使得你的叢集能夠更靈活、高效地應對資源需求的變化。

當你擴縮工作負載時,你可以增加或減少工作負載管理的副本數量,或者原地調整副本可用的資源。

第一種方法被稱為**水平擴縮**,而第二種方法被稱為**垂直擴縮**。

根據你的用例,有手動和自動兩種方法來擴縮你的工作負載。

手動擴縮工作負載

Kubernetes 支援**手動擴縮**工作負載。水平擴縮可以使用 `kubectl` CLI 來完成。對於垂直擴縮,你需要**修補**工作負載的資源定義。

請參閱下面的兩種策略示例。

自動擴縮工作負載

Kubernetes 也支援**自動擴縮**工作負載,這是本頁的重點。

Kubernetes 中**自動擴縮**的概念是指自動更新管理一組 Pod(例如 Deployment)的物件的能力。

水平擴縮工作負載

在 Kubernetes 中,你可以使用 **HorizontalPodAutoscaler** (HPA) 自動水平擴縮工作負載。

它作為一個 Kubernetes API 資源和 控制器 實現,並週期性地調整工作負載中的副本數量,以匹配觀察到的資源利用率,例如 CPU 或記憶體使用情況。

有一個關於為 Deployment 配置 HorizontalPodAutoscaler 的演練教程

垂直擴縮工作負載

特性狀態: Kubernetes v1.25 [穩定]

你可以使用 **VerticalPodAutoscaler** (VPA) 自動垂直擴縮工作負載。與 HPA 不同,VPA 預設不隨 Kubernetes 一起提供,而是一個可以在 GitHub 上找到的獨立專案。

安裝後,它允許你為工作負載建立自定義資源定義 (CRD),這些定義了**如何**以及**何時**擴縮所管理副本的資源。

目前,VPA 可以以四種不同的模式執行

VPA 的不同模式
模式描述
Auto (自動)目前為 `Recreate`。未來可能會改為原地更新。
Recreate (重建)VPA 在 Pod 建立時分配資源請求,並透過在請求的資源與新建議顯著不同時驅逐現有 Pod 來更新它們。
Initial (初始)VPA 只在 Pod 建立時分配資源請求,之後永不更改。
Off (關閉)VPA 不會自動更改 Pod 的資源需求。建議值會被計算並可在 VPA 物件中檢視。

Pod 原地垂直擴縮

功能狀態: Kubernetes v1.33 [beta] (預設啟用:true)

從 Kubernetes 1.34 開始,VPA 不支援原地調整 Pod 大小,但目前正在進行此整合工作。要手動原地調整 Pod 大小,請參閱原地調整容器資源大小

基於叢集大小的自動擴縮

對於需要根據叢集大小擴縮的工作負載(例如 `cluster-dns` 或其他系統元件),你可以使用 **Cluster Proportional Autoscaler**。與 VPA 一樣,它不屬於 Kubernetes 核心,而是作為其自己的專案託管在 GitHub 上。

Cluster Proportional Autoscaler 監視可排程的節點和核心數量,並相應地擴縮目標工作負載的副本數量。

如果副本數量應保持不變,你可以使用 **Cluster Proportional Vertical Autoscaler** 根據叢集大小垂直擴縮你的工作負載。該專案**目前處於測試階段**,可以在 GitHub 上找到。

雖然 Cluster Proportional Autoscaler 擴縮工作負載的副本數量,但 Cluster Proportional Vertical Autoscaler 會根據叢集中的節點和/或核心數量調整工作負載(例如 Deployment 或 DaemonSet)的資源請求。

事件驅動的自動擴縮

還可以基於事件擴縮工作負載,例如使用 **Kubernetes Event Driven Autoscaler** (KEDA)

KEDA 是一個 CNCF 畢業專案,它使你能夠根據要處理的事件數量(例如佇列中的訊息數量)擴縮你的工作負載。有各種各樣的介面卡可供選擇,以適應不同的事件源。

基於排程計劃的自動擴縮

另一種擴縮工作負載的策略是**排程**擴縮操作,例如在非高峰時段減少資源消耗。

類似於事件驅動的自動擴縮,這種行為可以透過 KEDA 及其 `Cron` 擴縮器 來實現。`Cron` 擴縮器允許你定義擴縮工作負載(或縮小)的排程計劃(和時區)。

擴縮叢集基礎設施

如果擴縮工作負載不足以滿足你的需求,你還可以擴縮叢集基礎設施本身。

擴縮叢集基礎設施通常意味著新增或刪除節點。閱讀節點自動擴縮以獲取更多資訊。

下一步

上次修改時間:2025 年 4 月 7 日上午 9:46 (PST):更新 v1.33 beta 的 InPlacePodVerticalScaling 文件 (#50290) (c014f72fbb)