自動擴縮工作負載
在 Kubernetes 中,你可以根據當前的資源需求來**擴縮**工作負載。這使得你的叢集能夠更靈活、高效地應對資源需求的變化。
當你擴縮工作負載時,你可以增加或減少工作負載管理的副本數量,或者原地調整副本可用的資源。
第一種方法被稱為**水平擴縮**,而第二種方法被稱為**垂直擴縮**。
根據你的用例,有手動和自動兩種方法來擴縮你的工作負載。
手動擴縮工作負載
Kubernetes 支援**手動擴縮**工作負載。水平擴縮可以使用 `kubectl` CLI 來完成。對於垂直擴縮,你需要**修補**工作負載的資源定義。
請參閱下面的兩種策略示例。
- **水平擴縮**:執行應用的多個例項
- **垂直擴縮**:調整分配給容器的 CPU 和記憶體資源
自動擴縮工作負載
Kubernetes 也支援**自動擴縮**工作負載,這是本頁的重點。
Kubernetes 中**自動擴縮**的概念是指自動更新管理一組 Pod(例如 Deployment)的物件的能力。
水平擴縮工作負載
在 Kubernetes 中,你可以使用 **HorizontalPodAutoscaler** (HPA) 自動水平擴縮工作負載。
它作為一個 Kubernetes API 資源和 控制器 實現,並週期性地調整工作負載中的副本數量,以匹配觀察到的資源利用率,例如 CPU 或記憶體使用情況。
有一個關於為 Deployment 配置 HorizontalPodAutoscaler 的演練教程。
垂直擴縮工作負載
Kubernetes v1.25 [穩定]
你可以使用 **VerticalPodAutoscaler** (VPA) 自動垂直擴縮工作負載。與 HPA 不同,VPA 預設不隨 Kubernetes 一起提供,而是一個可以在 GitHub 上找到的獨立專案。
安裝後,它允許你為工作負載建立自定義資源定義 (CRD),這些定義了**如何**以及**何時**擴縮所管理副本的資源。
注意
你需要將 Metrics Server 安裝到你的叢集中,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` 擴縮器允許你定義擴縮工作負載(或縮小)的排程計劃(和時區)。
擴縮叢集基礎設施
如果擴縮工作負載不足以滿足你的需求,你還可以擴縮叢集基礎設施本身。
擴縮叢集基礎設施通常意味著新增或刪除節點。閱讀節點自動擴縮以獲取更多資訊。