共用方式為


Azure Kubernetes Service (AKS) 中的垂直 Pod 自動調整

本文提供在 Azure Kubernetes Service (AKS) 中的使用垂直 Pod 自動調整程式 (VPA) 概觀,其基礎為開放原始碼 Kubernetes 版本。

設定時,VPA 會按照每個工作負載的過去使用量,自動設定容器的資源要求和限制。 VPA 會釋出其他 Pod 的 CPU 和記憶體,並協助確保有效地利用 AKS 叢集。 垂直 Pod 自動調整程式提供一段時間的資源使用量建議。 若要管理資源使用量突然增加,請使用水平 Pod 自動調整程式,以視需要調整 Pod 複本數目。

福利

垂直 Pod 自動調整程式提供下列優點:

  • 分析處理器和記憶體資源,調整至適合應用程式的「正確大小」。 VPA 不只負責擴大,也負責根據資源使用量隨著時間縮小。
  • 如果 Pod 需要變更其資源要求,則將調整模式設定為 [自動] 或 [重新建立] 會被收回。
  • 您可以藉由指定資源原則以設定個別容器的 CPU 和記憶體條件約束。
  • 確定節點有正確的資源可排程 Pod。
  • 提供對處理器或記憶體資源所做之任何調整的可設定記錄。
  • 改善叢集資源使用率,並釋放其他 Pod 的 CPU 和記憶體。

限制與考量

使用垂直 Pod 自動調整程式時,請考慮下列限制和考量:

  • VPA 支援每個叢集最多有 1,000 個與 VerticalPodAutoscaler 物件相關聯的 Pod。
  • VPA 可能會建議比叢集中可用的更多資源,這可防止 Pod 指派給節點,並因資源不足而進行執行。 克服此限制的方式是將 LimitRange 設定為每個命名空間的最大可用資源,以確保 Pod 不會要求超過所指定值的資源。 您也可以在 VerticalPodAutoscaler 物件中設定每個 Pod 的允許資源建議上限。 VPA 無法完全克服節點資源不足問題。 限制範圍固定,但節點資源使用量會動態變更。
  • 不建議您搭配使用 VPA 與水平 Pod 自動調整程式 (HPA),這會根據相同的 CPU 和記憶體使用量計量進行調整。
  • VPA 建議工具最多只會儲存八天的歷程資料。
  • 因為工作負載實際記憶體使用量的可見度有限,所以 VPA 不支援 JVM 型工作負載。
  • VPA 不支援在 VPA 旁執行您自己的 VPA 實作。 支援額外或自訂建議工具。
  • 不支援 AKS Windows 容器。

VPA 概觀

VPA 物件包含三個元件:

  • 推薦程式:推薦程式會監視目前和過去的資源使用量,包括計量歷程記錄、記憶體不足 (OOM) 事件和 VPA 部署規格,並使用其收集的資訊來提供容器 CPU 和記憶體要求/限制的建議值。
  • 更新程式:更新程式會監視受控 Pod,以確保其資源要求已正確設定。 如果沒有,更新程式會移除這些 Pod,讓其控制器可以使用更新的要求重新建立它們。
  • VPA 許可控制器:VPA 許可控制器會根據更新程式的活動,在其控制器建立或重新建立的新 Pod 上設定正確的資源要求。

VPA 許可控制器

VPA 許可控制器是一個二進位檔案,可將自己註冊為變動許可 Webhook。 建立新的 Pod 之後,VPA 許可控制器會從 API 伺服器中取得要求,並評估是否有相符的 VPA 設定,或尋找對應的 VPA 設定,並使用目前的建議以在 Pod 中設定資源要求。

獨立工作 overlay-vpa-cert-webhook-check 會在 VPA 許可控制器外部執行。 overlay-vpa-cert-webhook-check 工作會建立和續約憑證,並將 VPA 許可控制器註冊為 MutatingWebhookConfiguration

VPA 物件作業模式

針對您想要自動計算資源需求的每個控制器,插入垂直 Pod 自動調整程式資源,通常為部署狀態。

VPA 可以操作四種模式:

  • Auto:VPA 會在 Pod 建立期間指派資源要求,並使用慣用的更新機制來更新現有 Pod。 Auto,相當於 Recreate,其為預設模式。 重新啟動 Pod 要求的免費或就地更新之後,可以將其用作 Auto 模式的慣用更新機制。 使用 Auto 模式,如果 VPA 需要變更其資源要求,則會收回 Pod。 這可能會導致同時重新啟動 Pod,造成應用程式不一致。 在此情況下,您可以使用 PodDisruptionBudget 來限制重新啟動,並維護一致性。
  • Recreate:VPA 會在 Pod 建立期間指派資源要求,以及在所要求的資源與新建議明顯不同時收回現有 Pod 來更新現有 Pod (如果已定義,則遵守 Pod 中斷預算)。 只有在您需要確保只要資源要求變更即重新啟動 Pod 時,才應該使用此模式。 否則,建議您使用 Auto 模式,以利用可用的免費重新啟動更新。
  • Initial:VPA 只會在 Pod 建立期間指派資源要求。 其不會更新現有的 Pod。 此模式適用於測試和了解 VPA 行為,而不會影響執行中的 Pod。
  • Off:VPA 不會自動變更 Pod 的資源需求。 系統會計算建議,而且可以在 VPA 物件中進行檢查。

應用程式開發的部署模式

如果您不熟悉 VPA,建議您在應用程式開發期間使用下列部署模式來識別其唯一資源使用率特性、測試 VPA 以確認其正常運作,並與其他 Kubernetes 元件一起測試以最佳化叢集的資源使用率:

  1. 在生產叢集中,設定 UpdateMode = "Off",並以建議模式來執行 VPA,以測試和熟悉 VPA。 UpdateMode = "Off" 可以避免引入可能導致中斷的設定錯誤。
  2. 先藉由收集指定時段內的實際資源使用率遙測資料來建立可檢視性,這可協助您了解受其上執行之工作負載影響的容器和 Pod 資源的行為及任何問題跡象。
  3. 熟悉監視資料以瞭解效能特性。 根據此深入解析,據此設定所需的要求/限制,然後在下次部署或升級中進行設定。
  4. 根據您的需求,將 updateMode 值設定為 AutoRecreateInitial

下一步

若要了解如何在 AKS 叢集上設定垂直 Pod 自動調整程式,請參閱在 AKS 中使用垂直 Pod 自動調整程式