本頁面提供 Pod 水平自動調度資源功能總覽,並說明這項功能在 Google Kubernetes Engine (GKE) 中的運作方式。您也可以參閱如何設定及使用叢集中的水平 Pod 自動調度功能。
水平 Pod 自動調度器會自動根據工作負載的 CPU 或記憶體用量,或根據 Kubernetes 內部回報的自訂指標,或根據叢集外部來源的外部指標,增減 Pod 數量,調整 Kubernetes 工作負載的規模。
啟用節點自動佈建功能的 GKE 叢集,會根據 Pod 數量變化自動調整叢集中的節點數量。因此,建議您為所有叢集使用水平 Pod 自動調度。
為何要使用水平 Pod 自動調度資源
首次將工作負載部署至 Kubernetes 叢集時,您可能不確定工作負載的資源需求,以及這些需求可能會如何因使用模式、外部依附元件或其他因素而異。Pod 水平自動調度功能可確保工作負載在不同情況下都能穩定運作,並讓您只在需要額外容量時付費,藉此控管成本。
要預測哪些指標會顯示工作負載資源不足或未充分運用,並非易事。水平 Pod 自動配置器可根據下列一或多個指標類型,自動調整工作負載中的 Pod 數量:
實際資源用量:當特定 Pod 的 CPU 或記憶體用量超過門檻時,這可以表示為原始值,或是 Pod 要求該資源的百分比。
自訂指標:根據叢集中 Kubernetes 物件回報的任何指標,例如每秒的用戶端要求率或每秒的 I/O 寫入次數。
如果應用程式容易發生網路瓶頸,而非 CPU 或記憶體瓶頸,這項功能就非常實用。
外部指標:根據叢集外部應用程式或服務的指標。
舉例來說,從 Pub/Sub 等管道擷取大量要求時,工作負載可能需要更多 CPU。您可以建立佇列大小的外部指標,並設定水平 Pod 自動調度器,在佇列大小達到指定門檻時自動增加 Pod 數量,在佇列大小縮減時減少 Pod 數量。
您可以將水平 Pod 自動配置器與垂直 Pod 自動配置器合併使用,但須注意限制。
水平 Pod 自動調度資源的運作方式
每個設定的水平 Pod 自動調度器都會透過控制迴路運作。每個工作負載都有專屬的水平 Pod 自動調度器。每個水平 Pod 自動調度器都會定期根據您設定的目標門檻,檢查指定工作負載的指標,並自動變更工作負載的形狀。
每個 Pod 的資源
如果是每個 Pod 分配的資源 (例如 CPU),控制器會查詢 Pod 中執行的每個容器的資源指標 API。
- 如果您為 CPU 或記憶體指定原始值,系統會使用該值。
- 如果您為 CPU 或記憶體指定百分比值,水平 Pod 自動調度器會將該 Pod 的 CPU 或記憶體要求百分比,計算為平均使用率值。
- 自訂指標和外部指標會以原始值或平均值表示。
控制器會使用回報指標的平均值或原始值來產生比率,並使用該比率自動調度工作負載。如要瞭解水平 Pod 自動調度器演算法的說明,請參閱 Kubernetes 專案說明文件。
回應多項指標
如果您設定工作負載,依據多個指標自動調度資源,水平 Pod 自動調度器會分別評估每個指標,並使用調度演算法,根據每個指標判斷新的工作負載規模。系統會選取最大的比例,執行自動調度資源動作。
如果因某種原因導致一或多個指標無法使用,Horizontal Pod 自動調度器仍會根據計算出的最大大小向上調度,但不會向下調度。
避免輾轉現象
資源耗盡是指水平 Pod 自動調度器嘗試執行後續自動調度資源動作時,工作負載尚未完成回應先前自動調度資源動作的情況。為避免資源耗盡,水平 Pod 自動調度器會根據過去五分鐘的資料,選擇最大的建議值。
限制
- 請勿在 CPU 或記憶體上,搭配垂直 Pod 自動調度器來使用水平 Pod 自動調度器。您可以搭配垂直 Pod 自動調度器,使用水平 Pod 自動調度器處理其他指標。您可以設定多維度自動調度 Pod 資源 (Beta 版),同時水平調度 CPU 和垂直調度記憶體。
- 如果您有 Deployment,請勿在支援的 ReplicaSet 或 Replication Controller 上設定水平 Pod 自動調度資源。對 Deployment 或複製控制器執行滾動更新時,系統會以新的複製控制器取代舊的。請改為在 Deployment 本身設定水平 Pod 自動調度資源。
- 您無法對無法調度的工作負載 (例如 DaemonSet) 使用水平 Pod 自動調度功能。
- 水平 Pod 自動調度資源會將指標公開為 Kubernetes 資源,這會對指標名稱設下限制,例如不得使用大寫或「/」字元。指標介面卡可能允許重新命名。如需範例,請參閱
prometheus-adapter
as
運算子。 - 如果自動配置器設定監控的任何指標無法使用,自動配置器就不會縮減規模。如要檢查是否有無法使用的指標,請參閱「查看水平 Pod 自動配置器的詳細資料」。
擴充性
水平 Pod 自動調度器支援的 HPA 物件數量沒有硬性限制。不過,如果 HPA 物件數量超過一定值,HPA 重新計算的間隔時間可能會比標準的 15 秒更長。
- GKE 次要版本 1.22 以上:最多 300 個 HPA 物件,重新計算週期應維持在 15 秒內。
- GKE 次要版本 1.31 以上:如果設定效能 HPA 設定檔,重新計算週期應在 15 秒內,最多可有 1000 個 HPA 物件。瞭解如何設定 Performance HPA 設定檔。
下列因素也可能影響成效:
- 根據多項指標調整規模: 每項指標都會新增擷取呼叫,用於計算建議,進而影響重新計算的週期。
- 自訂指標堆疊的延遲時間:如果回應時間超過約 50 毫秒,就會比標準 Kubernetes 指標通常觀察到的時間更長,進而影響重新計算週期。
與 HorizontalPodAutoscaler
物件互動
您可以為工作負載設定水平 Pod 自動調度器,並前往 Google Cloud 控制台的「Workloads」(工作負載) 頁面,取得自動調度事件的相關資訊和原因。
每個水平 Pod 自動調度器都會以 HorizontalPodAutoscaler
物件的形式存在於叢集中。您可以使用 kubectl get hpa
或 kubectl describe hpa HPA_NAME
等指令與這些物件互動。
您也可以使用 kubectl autoscale
指令建立 HorizontalPodAutoscaler
物件。
後續步驟
- 瞭解如何設定水平 Pod 自動調度資源
- 瞭解如何手動調度應用程式資源
- 瞭解如何使用 KEDA 將資源調度為零
- 進一步瞭解垂直 Pod 自動調度器
- 進一步瞭解叢集自動配置器