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

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

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

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

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

如要查看所有 GKE 最佳做法的整合式總覽,請參閱「GKE 最佳做法」。

批次工作負載的運作方式

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

批次平台管理

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

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

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

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

在 GKE 準備批次平台架構

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

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

建議 資源
選取 GKE 作業模式

GKE 提供下列作業模式:

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

請參閱 Autopilot 和 標準模式的概要比較。

選擇節點的機器類型

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 Processing Unit (TPU) 等硬體加速器。建議採用 GPU 分時策略,讓多個容器共用同一部實體 GPU 的時間。這種做法適用於要求較少的突發同質 GPU 工作負載。多重執行個體 GPU 可將 GPU 分區,同時在多個容器之間共用單一 GPU 資源。

在 Standard 叢集上啟用叢集自動調度器

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

建議您使用下列設定來設定叢集自動配置器:

  • 使用 optimize-utilization 設定檔移除未使用的節點,速度比 balanced 設定檔快三倍。詳情請參閱「自動調度資源設定檔」。
  • 將位置政策設為 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 重試和 Job 失敗,進而提升叢集資源耗用量。舉例來說,您可以設定搶占、API 啟動的驅逐或根據汙點的驅逐,其中沒有 NoExecute 汙點效果容錯的 Pod 會遭到驅逐。瞭解如何使用 Pod 失敗政策處理可重試和不可重試的 Pod 失敗。
將多項工作視為一個單位來管理 使用 JobSet API 以單元形式管理多個 Job,解決工作負載模式 (例如一個驅動程式 (或協調器) 和多個工作人員 (例如 MPIJob)),同時根據您的用途設定與常見模式一致的 Job 預設值。舉例來說,您可以預設建立已編列索引的 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 可讓您精細調整叢集上執行的工作負載存取權限。

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

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

詳情請參閱「 Workload Identity Federation for GKE」和「存取儲存的密鑰」。

設定叢集網路隔離 設定叢集的網路隔離功能,讓控制層端點和 worker 節點都能使用內部 IP 位址。

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

使用 Shielded GKE 節點 設定 Shielded GKE 節點,提供可驗證的節點身分和完整性,加強保護 GKE 節點。
實體隔離 基於安全考量,工作負載可能需要更嚴密的隔離措施。 使用節點 Taint 控制排程:使用節點 Taint 和工作負載容許條件,在節點集區中以實體方式區隔租戶。這有助於確保只有適當的工作負載會排定在這些節點集區中。

排入佇列和公平共享

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

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

建議 資源
使用 Kueue

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

  • 工作應等待的情況
  • 何時應允許工作啟動,例如建立 Pod
  • 工作應遭到先占時,例如刪除 Pod

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

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

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

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

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

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

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

使用網路附加儲存裝置

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

  • 使用 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 Virtual NIC (gVNIC),為 GKE 節點增加網路頻寬。gVNIC 是專為 Compute Engine 設計的虛擬網路介面,建議用於高效能應用程式。
  • 指定每個核心的執行緒數量,即可停用多執行緒並行。
最佳化工作負載網路和延遲時間 GKE 支援節點集區的密集配置政策,可指定這些節點 (以及在節點上執行的工作負載) 應在區域內彼此靠近。對於緊密耦合的高效能工作負載而言,這項功能特別實用,因為這類工作負載非常重視不同程序之間的低延遲。詳情請參閱「密集配置」。
使用 Spot VM

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

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

  • 設定自動調度資源 Spot VM 節點集區,並搭配 location_policy= "ANY"。採用這項政策後,Spot VM 遭預先終止的風險會降低。這種組合特別適合可承受個別 worker 節點先占的工作負載,例如令人滿意的平行運算。
  • 如果工作負載的資源用量可預測,結合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 叢集」。

在 Google Cloud 控制台中觀察 AI/機器學習工作負載

在 Google Cloud 控制台中,依序前往「Kubernetes Engine」>「AI/ML」>「Jobs」,即可查看 JobSet、Job、PyTorchJob 和 RayJob。您可以在可觀測性資訊主頁中存取記錄、事件和視覺化等詳細資料。

如要在 JobSet 中查看子項工作,或查看 RayJob 所屬的工作者,請在使用者介面中前往父項資源。

在 Google Cloud 控制台中查看工作

後續步驟