在 GKE 上執行批次工作負載的最佳做法


本頁面介紹使用 Google Kubernetes Engine (GKE) 建構及最佳化批次處理平台的最佳做法,包括:

  • 架構
  • 工作管理:
  • 多用戶群架構
  • 安全性
  • 排入佇列
  • 儲存空間
  • 成效
  • 具成本效益
  • 監控

GKE 提供強大的架構,可協調處理資料處理、訓練機器學習模型執行科學模擬等批次工作負載,以及其他高效能運算工作負載

這些最佳做法適用於有興趣在 GKE 中部署批次工作負載的平台管理員、雲端架構師和營運專員。參考架構:GKE 上的批次處理平台展示了本指南中討論的許多最佳做法,並可部署在您自己的 Google Cloud 專案中。

批次工作負載的運作方式

批次工作負載是一組工作,會執行完成,不需要使用者介入。如要定義工作,請使用 Kubernetes Jobs 資源。批次平台會接收工作,並按照接收順序將工作排入佇列。批次平台中的佇列會套用優先順序、配額和可分配資源等處理邏輯。透過佇列和自訂批次處理參數,Kubernetes 可讓您最佳化可用資源的使用情形、盡量減少排定工作的閒置時間,以及盡可能節省成本。下圖顯示可做為批次平台一部分的 GKE 元件。

批次平台管理

傳統上,批次平台有兩種主要使用者角色:開發人員和平台管理員:

  • 開發人員會提交工作,指定要執行的程式、要處理的資料,以及工作需求。接著,開發人員會收到工作提交確認訊息和專屬 ID。工作完成後,開發人員會收到通知,以及工作的所有輸出內容或結果。
  • 平台管理員負責管理及提供有效率且可靠的批次處理平台給開發人員。

批次處理平台必須符合下列規定:

  • 平台資源已妥善佈建,確保作業執行時幾乎不需要使用者介入。
  • 平台資源會根據貴機構的安全性和可觀測性最佳做法進行設定。
  • 盡可能有效率地使用平台資源。如果發生資源爭用情形,系統會優先完成最重要的工作。

在 GKE 中準備批次平台架構

GKE 環境包含節點,也就是 Compute Engine 虛擬機器 (VM),這些節點會組成叢集。

下表列出規劃及設計批次平台架構時的重要建議:

建議 資源
選取 GKE 作業模式

GKE 提供下列作業模式:

  • 在 Autopilot 模式中,GKE 會自動管理叢集設定,包括節點、資源調度、安全性及其他預設設定,讓您專注處理工作負載。Autopilot 叢集預設為高可用性。
  • 在 Standard 模式中,您可以定義及管理叢集設定,包括節點、資源調度、安全性和其他進階設定。

請參閱 Autopilot 和 Standard 模式的比較概要

選擇節點的機器類型

GKE 支援下列 Compute Engine VM 系列:

  • 成本效益最高的系列,例如 E2
  • 兼顧價格和效能,例如 N2、N2D 或 N1
  • 適合向外擴充,例如 Tau T2D 或 Tau T2A
  • 記憶體最佳化,例如 M2 或 M1
  • 運算最佳化,例如 C2 或 C2D
  • 加速器最佳化,例如搭載 NVIDIA B200 GPU 的 A4

每個機器系列都與一或多個 CPU 平台相關聯,例如 Arm 處理器,以及 Intel 和 AMD 的 x86 處理器。

瞭解目前適用於工作負載的選項

為節點使用硬體加速器

您也可以在 GKE 中使用圖形處理單元 (GPU) 和 Tensor 處理單元 (TPU) 等硬體加速器。建議採用 GPU 分時策略,讓多個容器共用同一部實體 GPU 的時間。這種方法適用於要求較少的爆量和同質 GPU 工作負載。多執行個體 GPU:分割 GPU,讓多個容器同時共用單一 GPU 資源。

在 Standard 叢集上啟用叢集自動配置器

GKE 會依據工作負載需求,自動調整指定節點集區中的節點數量。您不需要手動新增或移除節點,也不必超額佈建節點集區。您只需要指定節點集區的大小上下限。

建議您使用下列設定,設定叢集自動調度器:

  • 使用 optimize-utilization 設定檔,移除未使用的節點,速度比平衡設定檔快三倍。詳情請參閱「自動調度資源設定檔」。
  • 將位置資訊政策設為 ANY。GKE 叢集自動配置器會優先使用未使用的預留項目,並在區域中任何可用的區域建立節點。詳情請參閱位置資訊政策
  • 啟用節點自動佈建功能,即可自動管理及自動調度基礎架構資源。使用自動佈建功能建立節點集區後,叢集自動配置器就能動態調整節點集區大小。詳情請參閱「節點自動佈建的運作方式」。

使用 Autopilot 叢集時,您不必擔心佈建節點或管理節點集區,因為系統會透過節點自動佈建功能自動佈建節點集區,並自動調整節點集區大小,以滿足工作負載需求。

在發布版本中註冊叢集

GKE 可以自動管理叢集版本和升級作業。根據發布版本採用模型,您可以將叢集註冊至 GKE 可用管道。

詳情請參閱「如何為叢集選擇最合適的發布版本

定義要為叢集排除的維護範圍

定義升級範圍排除時段後,GKE 會尊重這項設定,在維護作業完成前,不會中斷長時間執行的批次工作負載。

詳情請參閱「排除的維護範圍」。

管理工作生命週期

在 Kubernetes 中,您會在多個 Pod 中執行工作負載。Pod 是一組一或多個容器,包含共用儲存空間和網路資源。Pod 是由 Kubernetes 規格定義。

Job 會建立一或多個 Pod,並持續嘗試執行,直到指定數量的 Pod 成功終止為止。隨著 Pod 完成,Job 會追蹤成功完成的次數。一旦達到指定的成功完成數,Job 就完成了。

下表列出設計及管理作業時的重要建議:

建議 資源
選取「工作完成模式」 將「完成模式」指定為 Indexed。根據 Pod 的索引指派要處理的資料分割區時,這項設定就很有用。Job 的 Pod 會取得相關聯的完成索引。刪除 Job 會清除建立的 Pod。暫停 Job 會刪除其作用中的 Pod,直到 Job 再次恢復為止。
設定 CronJob,定期執行排程動作 使用 GKE 的 CronJob 定期執行排程動作,例如備份、產生報表,或排定機器學習模型訓練時間。
管理 Job 中的失敗 定義 Kubernetes Pod 失敗政策和 Pod 退避失敗限制,以處理 Job 中可重試和不可重試的失敗。這項定義可避免因 Pod 中斷而導致不必要的 Pod 重試和工作失敗,進而提升叢集資源消耗量。舉例來說,您可以設定搶占API 啟動的逐出汙點的逐出,其中沒有 NoExecute 汙點效果容許條件的 Pod 會遭到逐出。瞭解如何使用 Pod 失敗政策處理可重試和不可重試的 Pod 失敗情形
將多個工作視為一個單位來管理 使用 JobSet API 以單元形式管理多個工作,解決工作負載模式 (例如一個驅動程式 (或協調器) 和多個工作者 (例如 MPIJob)),同時根據您的用途設定與常見模式一致的工作預設值。舉例來說,您可以預設建立已建立索引的 Job、為 Pod 的可預測完整網域名稱 (FQDN) 建立無標題服務,以及設定相關聯的 Pod 失敗政策。
延長無法容忍重新啟動的 Pod 執行時間 在 Pod 規格中,將 Kubernetes cluster-autoscaler.kubernetes.io/safe-to-evict 註解設為 false。叢集自動配置器會遵循 Pod 上設定的移除規則。如果節點包含具有 cluster-autoscaler.kubernetes.io/safe-to-evict 註解的 Pod,自動調度器就無法刪除節點。

詳情請參閱「考慮 Pod 的排程與服務中斷」。

管理多用戶群

GKE 叢集多用戶群架構可讓單一機構中的不同使用者或工作負載 (稱為「用戶群」) 管理 GKE 資源。GKE 資源的管理可能遵循租戶隔離、配額和限制範圍或成本分配等條件。

下表列出管理多重租戶時的主要建議:

建議 資源
使用命名空間管理用戶端隔離 您可以將每個租戶及其 Kubernetes 資源分到各自的命名空間
使用政策強制隔離用戶群 定義政策,限制 API 存取權、設定配額、限制資源用量,以及限制容器能執行的動作。這些政策會依命名空間劃分。
設定 GKE 費用分配 使用 GKE 費用分配功能,依命名空間取得每個租戶的叢集資源要求洞察資料。

控管批次平台存取權

GKE 可讓您微調叢集上執行工作負載的存取權。

下表列出管理存取權和安全性時的重要建議

建議 資源
設定 GKE 適用的 Workload Identity Federation GKE 可讓 GKE 叢集中的工作負載模擬 Identity and Access Management (IAM) 服務帳戶,以存取 Google Cloud 服務。使用 Workload Identity Federation for GKE,工作負載就能安全地存取儲存在 GKE 外部的密碼。

詳情請參閱「 GKE 適用的工作負載身分聯盟」和「存取儲存的密鑰」。

設定叢集網路隔離 設定叢集的網路隔離,讓控制層端點和工作站節點都能擁有內部 IP 位址。

詳情請參閱「關於自訂網路隔離」。

使用受防護的 GKE 節點 設定 受防護的 GKE 節點,提供可驗證的高強度節點身分和完整性,進一步提高 GKE 節點的安全性。
實體隔離 基於安全考量,您的工作負載可能需要更強的隔離措施。 使用節點 taint 控制排程,透過節點 taint 和工作負載容許度,在節點集區中以實體方式區隔租戶。這可確保只有適當的工作負載會排定在這些節點集區上。

排隊和公平分享

如要控管資源用量,您可以為每個租戶指派資源配額限制、將傳入的工作排入佇列,並依接收順序處理工作。

下表列出管理批次工作負載佇列和公平分享時的主要建議:

建議 資源
使用 Kueue

Kueue 是 Kubernetes 原生的工作佇列系統,適用於 Kubernetes 叢集中的批次、高效能運算、機器學習和類似應用程式。為協助在租戶之間公平分享叢集資源,Kueue 會管理配額和工作耗用配額的方式。Kueue 會做出下列決策:

  • 工作應等待的時間
  • Job 應允許啟動時,例如建立 Pod
  • 工作應遭搶占時,例如刪除 Pod

如要瞭解如何實作工作佇列系統,請參閱「在 GKE 上實作工作佇列系統,並在命名空間之間共用配額」。

如要進一步瞭解 Kueue,請參閱 Kueue 概念

獲得最佳儲存空間、效能和成本效益

有效運用 GKE 運算和儲存空間資源,有助於降低成本。 其中一項策略是適當調整及設定運算執行個體,以符合批次處理需求,同時不犧牲效能。

下表列出設計及管理儲存空間和提升效能時的主要建議:

建議 資源
使用 Compute Engine 永久磁碟

建議您使用下列 Compute Engine 永久磁碟設定:

使用網路附加儲存裝置

如要獲得最佳儲存空間效能,請搭配使用下列網路附加儲存空間和永久磁碟:

  • 使用 Filestore,讓 Pod 中的所有工作節點存取相同的儲存空間命名空間,並擴充容量
  • 使用 Cloud Storage FUSE,直接從容器存取 Cloud Storage,做為本機 POSIX 掛接點。
定義 Pub/Sub

批次工作負載也可能會讀取及寫入資料。舉例來說,您可以使用 Pub/Sub,然後將結果寫入 BigQuery 等資料倉儲,藉此更新報表和資訊主頁。

建議您使用下列儲存空間解決方案:

  • 如要使用代管物件儲存空間,請使用 Cloud Storage
  • 如要使用代管網路檔案儲存空間,請使用 Filestore
  • 如要使用需要檔案系統語意的工作負載,請使用 Cloud Storage FUSE CSI 驅動程式。Kubernetes 應用程式可透過這個驅動程式,將 Cloud Storage bucket 掛接為本機檔案系統
指定工作負載的調整參數

建議您使用下列設定:

  • 為工作負載自訂節點系統設定。舉例來說,您可以設定 TCP 通訊端接收緩衝區的最小值、預設值和最大值。使用節點系統設定
  • 使用網路設定檔啟用忙碌輪詢。對於容易受到網路延遲影響的工作負載,這項功能或許能帶來改善。使用網路設定檔。
  • 啟用 Google 虛擬 NIC (gVNIC),即可提高 GKE 節點的網路頻寬。gVNIC 是專為 Compute Engine 設計的虛擬網路介面,建議用於高效能應用程式。
  • 指定每個核心的執行緒數量,即可停用多執行緒並行功能
最佳化工作負載的網路和延遲 GKE 支援節點集區的密集配置方式政策,這項政策會指定這些節點 (以及在節點上執行的工作負載) 應配置在區域內彼此相近的實體位置。對於緊密耦合的高效能工作負載而言,這項功能特別實用,因為這類工作負載的各個程序之間延遲時間較短,是主要考量因素。詳情請參閱密集配置
使用 Spot VM

Spot VM 是 Compute Engine 虛擬機器 (VM) 執行個體,價格低於標準 Compute Engine VM,但不保證可用性。

建議您使用下列解決方案:

  • 設定自動調度 Spot VM 節點集區,並搭配 location_policy= "ANY"。採用這項政策後,Spot VM 遭預先終止的風險較低。如果工作負載可承受個別工作站節點遭到搶占,例如令人滿意的平行運算,這個組合就特別實用。
  • 如果工作負載的資源用量可預測,結合Google Cloud預留項目承諾使用折扣,可大幅節省費用。建立節點集區,並將大小設為保留執行個體數量,然後優先使用這個節點集區,盡量提高使用率。
使用圖片串流

使用映像檔串流來提取容器映像檔。GKE 會從符合條件的映像檔串流資料。這樣一來,您不必等待整個映像檔下載完畢,即可初始化工作負載,進而大幅縮短初始化的時間,並提高成本效益。

監控叢集

GKE 整合了觀測和記錄工具,可協助您監控叢集的可靠性和效率。下表列出啟用及使用 GKE 可觀測性工具時的主要建議:

建議 資源
使用 Prometheus

GKE 與 Google Cloud Observability 整合。自訂要讓 GKE 傳送至 Cloud Logging 和 Cloud Monitoring 的指標

Google Cloud Managed Service for Prometheus 預設會為 GKE 叢集啟用。建議您使用代管收集功能,免除設定及維護 Prometheus 伺服器的複雜程序。

詳情請參閱「Managed Service for Prometheus」。

使用 Cloud Monitoring 資訊主頁

使用 GKE 的監控資訊主頁,即可查看叢集和資源使用率的高階總覽,並深入瞭解及篩選各種指標和維度。

詳情請參閱監控 GKE 叢集

後續步驟