容量緩衝區可讓您主動在叢集中宣告作用中或待命容量緩衝區層級,藉此減少 Google Kubernetes Engine (GKE) 工作負載的 Pod 啟動延遲時間。預先宣告備用容量,即可經濟實惠地加快工作負載啟動速度。
本文將說明容量緩衝區的運作方式。如要瞭解如何啟用及使用容量緩衝區,請參閱「設定容量緩衝區」。
使用容量緩衝區的時機
對於啟動延遲時間較為敏感且需要快速調度資源的應用程式,請使用容量緩衝區。當流量突然增加時,作用中緩衝區會提供預先佈建的容量,專為低延遲擴充而設計。如果流量持續增加,與預先佈建相比,備用緩衝區能以更實惠的價格提供 Pod 排程。
容量緩衝區可帶來下列好處:
- 盡可能縮短調度延遲時間:作用中緩衝區會提供執行中的節點,有助於盡可能縮短延遲時間。備用緩衝區可快速恢復運作,與新節點相比,能以較低的成本更快提供容量,且比作用中緩衝區更有效率。
- 高成本效益的過度佈建:容量緩衝區可協助您維持安全網。對於大規模工作負載,這種做法通常比其他過度佈建方法更具成本效益,例如降低水平 Pod 自動配置器 (HPA) 使用率目標,這可能會隨著叢集成長而線性增加閒置容量。
- 符合工作負載需求:您可以完全掌控容量緩衝區設定。您可以選擇納入自訂 DaemonSet 預先載入映像檔、調整啟動時間,以及控管緩衝區大小,以符合自身需求。
對於需要快速擴充的延遲時間敏感型工作負載,建議您使用容量緩衝區,例如 AI 代理程式、AI 推論、銷售活動期間的零售應用程式,或玩家活動高峰期間的遊戲伺服器。
容量緩衝區的運作方式
使用 Kubernetes CapacityBuffer 自訂資源定義備用容量緩衝區,藉此實作容量緩衝區。GKE 叢集自動調度器會監控 CapacityBuffer 資源,並將其視為待處理需求,確保有可用備用容量。如果叢集容量不足,無法滿足緩衝區中定義的資源要求,叢集自動配置器就會佈建額外節點。
當高優先順序工作負載擴充時,GKE 會立即將工作負載排程至緩衝區的可用容量。這項即時排程適用於緩衝區中預留的副本數量或資源量,可避免與節點佈建相關的常見延遲。工作負載使用緩衝區單元時,叢集自動調度器會佈建新節點來補充緩衝區。
容量緩衝區策略
您可以根據延遲和費用的需求,使用不同的佈建策略設定容量緩衝區。
有效緩衝區
作用中緩衝區會提供執行中的節點,以低延遲方式擴充工作負載,這些工作負載會符合預留容量。由於節點已在執行,因此在擴充事件期間,節點可提供最短的 Pod 聲明延遲時間。
待機緩衝區
備用緩衝區提供暫停的節點。待命策略比主動策略更具成本效益,但節點接受工作負載前,會先短暫延遲恢復。
費用和定價
除了標準節點運算成本外,容量緩衝區還提供額外資源,且不另收費。這項服務適用於標準節點集區,以及選取特定硬體的 Autopilot 工作負載。容量緩衝區不支援依 Pod 計算的計費模式。
基礎節點的計費方式會因緩衝區類型而異:
- 作用中緩衝區:系統會針對 GKE 維護的執行中 VM,收取標準節點型運算費率,做為作用中緩衝區容量。
- 待命緩衝區:VM 執行個體暫停時,您不必支付運算費用 (CPU 或記憶體)。您會產生少許儲存空間費用 (例如 VM 開機磁碟和儲存的記憶體狀態),以及相關聯資源的費用,例如靜態外部 IP 位址。當 GKE 恢復待命 VM 來代管工作負載時,系統會套用標準節點運算費率。詳情請參閱「暫停執行個體的定價」。
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 緩衝區模擬器,模擬工作負載調度行為,微調緩衝區大小規則,達成效能目標。
- 從零開始調度工作負載時,縮短冷啟動延遲時間:使用 HPA (
minReplicas: 0) 將工作負載調度至零或從零開始調度,並搭配容量緩衝區。需求增加且工作負載從零開始擴充時,GKE 會立即在預先暖機的緩衝區節點上排定 Pod,不必等待佈建新的運算節點。
需求條件和限制
容量緩衝區有下列規定和限制:
- 執行 1.35.2-gke.1842000 以上版本的 GKE 叢集可使用容量緩衝區 (適用於作用中緩衝區),執行 1.36.0-gke.2253000 以上版本的 GKE 叢集則可使用容量緩衝區 (適用於待命緩衝區)。
- 容量緩衝區僅支援使用以節點為準的計費模式的工作負載 (適用於標準節點集區),以及選取特定硬體的 Autopilot 節點集區。容量緩衝區不支援使用依 Pod 計算的計費模式的工作負載。
- 在標準叢集上,建議您啟用節點自動佈建。啟用自動佈建節點功能後,叢集自動配置器就能根據 CapacityBuffer 中的資源要求建立新的節點集區。如果未啟用自動佈建節點功能,叢集自動調度器只會向上擴充現有節點集區。
- 有效和待命容量緩衝區都會計入 Compute Engine 配額。
- 如果 CapacityBuffer 設定依附元件 (例如 PodTemplate) 選取自訂 ComputeClass,依附元件必須定義在佈建節點上排程所需的任何容許條件、節點選取器或執行階段類別 (例如 GKE Sandbox 的需求)。如需操作說明,請參閱自訂 ComputeClass 說明文件。
備用緩衝區有下列額外限制:
- 啟用自動佈建節點功能的 Standard 叢集支援這些功能。
- 搭載 1.36.0-gke.2853000 以上版本的 Autopilot 叢集支援這項功能。
- 系統不支援附加 GPU 或 TPU 的節點。
- 不支援本機 SSD。
- 不支援機密 Google Kubernetes Engine 節點。
- 您應熟悉與 Compute Engine 暫停和繼續作業相關的限制。
主要限制包括:
- 不支援使用客戶提供的加密金鑰 (CSEK) 保護磁碟的節點。
- 不支援記憶體超過 208 GB 的節點。
- 不支援裸機執行個體。
- 節點 OS 必須支援 ACPI S3 休眠信號。
- 暫停程序長度與記憶體大小成正比。
- 能否繼續取決於繼續作業所需的基礎資源是否可用。
後續步驟
- 如要瞭解如何導入容量緩衝區,請參閱「設定容量緩衝區」。