關於容量緩衝區

容量緩衝區可讓您在叢集中主動宣告作用中或待命容量緩衝區層級,藉此減少 Google Kubernetes Engine (GKE) 工作負載的 Pod 啟動延遲。預先宣告備用容量,即可經濟實惠地加快啟動工作負載。

本文將說明容量緩衝區的運作方式。如要瞭解如何啟用及使用容量緩衝區,請參閱設定容量緩衝區

何時使用容量緩衝區

對於啟動延遲較為敏感且需要快速調度資源的應用程式,請使用容量緩衝區。當流量突然增加時,作用中的緩衝區會提供預先佈建的容量,專為低延遲的擴充作業而設計。如果流量持續增加,與預先佈建相比,備用緩衝區能以更實惠的成本提供 Pod 排程。

容量緩衝區可帶來下列好處:

  • 盡量縮短延遲時間:作用中緩衝區提供執行中的節點,有助於縮短延遲時間。備用緩衝區可快速恢復運作,與主動緩衝區相比,備用緩衝區的容量可用性比新節點更快,且成本更低。
  • 高成本效益的過度佈建:容量緩衝區可協助您維持安全網。對於大規模工作負載,這種方法通常比其他過度佈建方法 (例如降低 HorizontalPodAutoscaler (HPA) 使用率目標) 更具成本效益,因為隨著叢集成長,閒置容量可能會線性增加。
  • 滿足工作負載需求:您可以完全掌控容量緩衝區設定。您可以選擇納入自訂 DaemonSet 預先載入映像檔、調整啟動時間,以及控制緩衝區大小,以符合自身需求。

對於需要快速擴充的延遲時間敏感型工作負載,建議您使用容量緩衝區,例如 AI 代理程式、AI 推論、銷售活動期間的零售應用程式,或玩家活動高峰期間的遊戲伺服器。

容量緩衝區的運作方式

使用 Kubernetes CapacityBuffer 自訂資源定義備用容量緩衝區,藉此實作容量緩衝區。GKE 叢集自動調度器會監控 CapacityBuffer 資源,並將其視為待處理需求,確保有可用備用容量。如果叢集容量不足,無法滿足緩衝區中定義的資源要求,叢集自動配置器就會佈建額外節點。

當高優先順序工作負載擴大時,GKE 會立即將工作負載排定至緩衝區的可用容量。這項即時排程適用於副本數量或緩衝區中預留的資源量,可避免節點佈建作業通常會有的延遲。工作負載使用緩衝區單元時,叢集自動調度器會佈建新節點,以重新填滿緩衝區。

容量緩衝策略

您可以根據延遲和費用的需求,使用不同的佈建策略設定容量緩衝區。

作用中緩衝區

作用中緩衝區會提供執行中的節點,以低延遲方式擴充符合預留容量的工作負載。由於節點已在執行,因此在擴增事件期間,節點可提供最短的 Pod 聲明延遲時間。

待命緩衝區

待命緩衝區提供暫停的節點。待命策略比主動策略更具成本效益,但會稍微延遲節點恢復作業,因此節點需要一段時間才能接受工作負載。

費用和定價

容量緩衝區的計費方式會因緩衝區類型而異:

  • 作用中緩衝區:系統會針對 GKE 維護的執行中 VM,以標準 GKE 運算費率計費,這些 VM 會做為作用中緩衝區容量。在 Autopilot 中,執行中的 Pod 會套用標準的 Pod 計費費率。
  • 待命緩衝區:VM 執行個體暫停時,您不必支付運算費用 (CPU 或記憶體)。您會產生少許儲存空間費用 (例如 VM 開機磁碟),以及相關聯資源的費用,例如靜態外部 IP 位址。GKE 恢復待命 VM 來代管工作負載時,會套用標準運算或 Pod 型計費費率。

CapacityBuffer CRD

如要設定容量緩衝區,請建立 CapacityBuffer CustomResourceDefinition (CRD)。您可以設定容量緩衝區,以符合不同條件:

  • 固定副本:根據參照的 Pod 範本資源要求,指定要建立的緩衝區 Pod 固定數量。這是建立已知大小緩衝區最簡單的方法。
  • 資源限制:指定緩衝區應保留的 CPU 和記憶體總量。控制器會根據參照的 Pod 範本資源要求,計算要建立的緩衝區 Pod 數量。
  • 以百分比為準:將緩衝區空間定義為現有可擴充物件的百分比,該物件定義了擴充子資源 (例如 Deployment、StatefulSet、ReplicaSet 或 Job)。緩衝區空間會隨著參考工作負載的規模動態調整。以百分比為準的容量緩衝區僅適用於實作 Kubernetes 規模子資源的物件。

詳情請參閱 CapacityBuffer CRD 參考文件

最佳做法

設定容量緩衝區時,請按照下列建議操作,盡量提高成本效益和回應速度:

  • 採用成本最佳化、待命優先策略:如果工作負載可容忍約 30 秒的短暫擴充延遲,請優先使用待命緩衝區。這項策略可避免全新 VM 的冷節點啟動,且不必支付有效 VM 的全額費用。
  • 針對延遲時間敏感的工作負載使用作用中緩衝區:如果工作負載無法容許節點恢復時間,且 Pod 排程時間必須盡可能縮短,請使用作用中緩衝區。
  • 採用混合策略,兼顧效能和成本:結合小型作用中緩衝區和大型待機緩衝區,打造經濟實惠的設定。GKE 會優先從待命緩衝區恢復節點,藉此重新填滿作用中緩衝區 (約需 30 秒),同時在背景佈建新節點,以重新填滿待命緩衝區。這項設定會以有效容量吸收初始尖峰流量,並以較低成本的待機容量因應持續成長。
  • 為初始爆量活動調整緩衝區大小:定義作用中緩衝區的大小,以涵蓋預期會遇到的初始副本突然尖峰,然後備用緩衝區節點可以繼續運作。
  • 為持續性負載調整待命緩衝區大小:定義足夠的待命緩衝區,以涵蓋預期會遇到的擴展負載,這樣緩衝區就能在冷啟動後於背景重新填滿。只要備用緩衝區夠大,Pod 排程延遲時間上限就能縮短至節點恢復運作所需的時間,大約是 30 秒。當容量緩衝區開始使用並重新填滿時,新的緩衝區節點會在暫停前轉換為有效狀態。這項策略有助於在長時間負載期間提升有效容量。
  • 使用緩衝區模擬器:嘗試不同的作用中和待機緩衝區大小,找出最適合特定工作負載的結果。使用 https://github.com/gke-labs/buffers-simulator 的開放原始碼 GKE 緩衝區模擬工具,模擬工作負載的調度行為,微調緩衝區大小規則,達成效能目標。

需求條件和限制

容量緩衝區須符合下列規定和限制:

  • 容量緩衝區適用於執行 1.35.2-gke.1842000 以上版本 (適用於作用中緩衝區) 的 GKE 叢集,以及執行 1.36.0-gke.2253000 以上版本 (適用於待命緩衝區) 的 GKE 叢集。
  • 容量緩衝區僅支援使用以節點為準的計費模式的標準節點集區,以及選取特定硬體的 Autopilot 節點集區。容量緩衝區不支援使用依 Pod 計算的計費模式的工作負載。
  • 在標準叢集上,建議您啟用節點自動佈建。自動佈建節點功能可讓叢集自動配置器根據 CapacityBuffer 中的資源要求,建立新的節點集區。如果未啟用自動佈建節點功能,叢集自動配置器只會擴充現有節點集區。
  • 有效和待命容量緩衝區都會計入 Compute Engine 配額

備用緩衝區有下列額外限制:

  • 只有啟用自動佈建節點功能的 Standard 叢集才支援這些功能。
  • 系統不支援附加 GPU 或 TPU 的節點。
  • 不支援本機 SSD。
  • 不支援客戶自行管理的加密金鑰 (CMEK)。
  • 不支援機密 Google Kubernetes Engine 節點
  • 您應熟悉與 Compute Engine 暫停和繼續作業相關的限制。主要限制包括:
    • 不支援使用客戶提供的加密金鑰 (CSEK) 保護磁碟的節點。
    • 不支援記憶體超過 208 GB 的節點。
    • 不支援 Bare Metal 執行個體。
    • 節點 OS 必須支援 ACPI S3 休眠訊號。
    • 暫停程序長度與記憶體大小成正比。
    • 能否繼續取決於是否能取得繼續作業所需的基礎資源。

後續步驟