Autopilot 叢集中的「平衡」和「水平擴展」運算級別簡介

您可以在 Google Kubernetes Engine (GKE) Autopilot 叢集中使用 Balanced 和 Scale-Out ComputeClasses,執行需要額外運算容量或專用 CPU 設定的工作負載。本頁適用於叢集管理員,他們希望獲得比預設 Autopilot 叢集設定更彈性的運算選項。

平衡和擴充運算 ComputeClass 總覽

根據預設,GKE Autopilot 叢集中的 Pod 會在容器最佳化運算平台上執行。這個平台非常適合用於一般用途工作負載,例如網路伺服器和中等強度的批次工作。容器最佳化運算平台提供可靠、可擴充且成本最佳化的硬體設定,可滿足大多數工作負載的需求。

如果工作負載有獨特的硬體需求 (例如執行機器學習或 AI 工作、執行即時高流量資料庫,或需要特定 CPU 平台和架構),則可以使用 ComputeClasses 佈建該硬體。

在 Autopilot 叢集中,GKE 提供下列精選的 ComputeClass,讓您執行需要比預設容器最佳化運算平台更靈活的 Pod:

  • Balanced:提供比容器最佳化運算平台更高的 CPU 和記憶體容量上限。
  • Scale-Out:停用多執行緒並行 (SMT),並針對向外擴充進行最佳化。

這些 ComputeClass 僅適用於 Autopilot 叢集。與預設的容器最佳化運算平台類似,Autopilot 會根據執行的 Pod 管理節點大小和資源分配。

自訂運算類別,提供額外彈性

如果 Autopilot 叢集中的「平衡」或「擴充」運算級別無法滿足工作負載需求,您可以自行設定運算級別。您可以使用節點屬性集,將 ComputeClass Kubernetes 自訂資源部署至叢集,GKE 會使用這些屬性在叢集中設定新節點。舉例來說,您可以使用這些自訂 ComputeClass,在任何 GKE Autopilot 或 Standard 叢集中,將工作負載部署在與 Balanced 或 Scale-Out ComputeClass 相同的硬體上。詳情請參閱「關於 GKE Standard 中的 Autopilot 模式工作負載」。

定價

使用 Balanced 或 Scale-Out ComputeClass 的 Pod 會根據下列 SKU 計費:

詳情請參閱「GKE 定價」。

平衡式和水平擴展技術詳細資料

本節說明 Balanced 和 Scale-Out 類別的機器類型和用途。如果您未在 Pod 中要求 ComputeClass,Autopilot 會預設將 Pod 放在容器最佳化運算平台上。容器最佳化運算平台會使用 Compute Engine 一般用途機器家族的任何機器系列,但偏好可調整大小的機型。由於基礎機器系列並非固定,因此每個 CPU 的效能會因 GKE 將 Pod 排程到哪個機器系列而異。

此外,排定附加永久儲存空間的 Pod 時,取決於磁碟類型相容性:

  • 舊版永久磁碟:附加舊版永久磁碟 (例如 pd-standard) 的 Pod 只能在支援的機器系列上執行,例如 E2。
  • Hyperdisk:附加新一代儲存空間 (例如 hyperdisk-balanced) 的 Pod 會在較新的機器系列 (例如 C3) 上執行。
  • 待處理狀態:如果您明確設定要在較新的機器系列上執行 Pod (例如使用節點選取器要求 C3 節點,或設定自訂 ComputeClass),但附加舊版永久磁碟,Pod 會無限期處於 Pending 狀態。這是因為 GKE 找不到同時符合機型和磁碟相容性限制的節點。明確選取機器系列時,您有責任確保 PersistentVolume 和磁碟相容。

下表提供 Balanced 和 Scale-Out ComputeClasses 的技術總覽。

平衡和向外擴充 ComputeClass
Balanced

提供的 CPU 容量和記憶體容量,都比容器最佳化運算平台的最大值更高。提供其他 CPU 平台,並可為 Pod 設定最低 CPU 平台,例如 Intel Ice Lake 以上版本。

  • 可用 CPU:AMD EPYC Milan、Intel Ice Lake、Intel Cascade Lake
  • 可用架構:amd64
  • 機器系列: N2 (Intel CPU) 或 N2D 機器系列 (AMD CPU)。

針對下列應用程式使用 Balanced 類別:

  • 網路伺服器
  • 中大型資料庫
  • 快取
  • 串流與媒體放送
  • Hyperdisk Throughput 和 Extreme 儲存空間
Scale-Out

提供每個核心的單一執行緒運算和水平資源調度。

  • 可用 CPU:Ampere Altra Arm 或 AMD EPYC Milan
  • 可用架構:arm64 或 amd64
  • 機器系列: T2A (Arm) 或 T2D (x86)。
  • 其他功能:
    • SMT 已停用,因此一個 vCPU 等於一個實體核心。
    • 最高時脈速度 3.5 GHz。

針對下列應用程式使用 Scale-Out 類別:

  • 網路伺服器
  • 容器化微服務
  • 資料記錄處理
  • 大規模 Java 應用程式
  • Hyperdisk Throughput 儲存空間

工作負載中的 ComputeClass 選取項目

如要為 GKE 工作負載使用 ComputeClass,請在工作負載資訊清單中選取 ComputeClass,方法是使用 cloud.google.com/compute-class 標籤的節點選取器。

下列 Deployment 資訊清單範例會選取 ComputeClass:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      nodeSelector:
        # Replace with the name of a compute class
        cloud.google.com/compute-class: COMPUTE_CLASS 
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "1Gi"

將 COMPUTE_CLASS 替換為 ComputeClass 名稱,例如 Balanced 或 Scale-Out。每個工作負載最多只能選取一個 ComputeClass。

部署工作負載時,GKE 會執行下列操作:

  • 自動佈建以指定設定為基礎的節點,以執行 Pod。
  • 自動將節點標籤和汙點新增至新節點,防止其他 Pod 在這些節點上排程。每個 ComputeClass 都有專屬的汙點。如果您也選取 CPU 架構,GKE 會新增專屬於該架構的獨立汙點。
  • 自動為已部署的 Pod 新增與套用 taint 相對應的容許條件,讓 GKE 將這些 Pod 放置在新節點上。

舉例來說,如果您為 Pod 要求 Scale-Out ComputeClass:

  1. Autopilot 會為這些節點新增 Scale-Out 專屬的汙點。
  2. Autopilot 會為 Scale-Out Pod 新增該汙染的容許條件。

未要求 Scale-Out 的 Pod 不會獲得容許條件。因此,GKE 不會在 Scale-Out 節點上排定這些 Pod。

如果您未在工作負載規格中明確要求 ComputeClass,Autopilot 會在節點上排定 Pod,這些節點使用預設的容器最佳化運算平台。大多數一般用途工作負載都能在這個平台上順利執行。

如果您使用 ComputeClasses 或要求特定機器系列,請確保工作負載不會使用不相容的儲存空間。舉例來說,請勿在不支援的機器系列上使用較早的永久磁碟磁碟區類型,例如標準永久磁碟 (pd-standard) 或 SSD 永久磁碟 (pd-ssd) 磁碟區。如果 GKE 找不到或無法佈建符合所有限制的節點,使用不相容的儲存空間可能會導致 Pod 處於 Pending 狀態。如果 Pod 已排定,但儲存空間無法附加或掛接,Pod 會維持 ContainerCreating 狀態。如要進一步瞭解如何排解儲存空間相容性問題,請參閱「工作負載排定在舊版機器系列上,或因儲存空間不相容而處於 Pending 狀態」。

如何要求 CPU 架構

在某些情況下,您的工作負載可能專為特定架構 (例如 Arm) 建構。向外擴充 ComputeClass 支援多種 CPU 架構。您可以在節點選取器或節點親和性規則中指定標籤,藉此在 ComputeClass 要求中一併要求特定架構,如下列範例所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      nodeSelector:
        cloud.google.com/compute-class: COMPUTE_CLASS
        kubernetes.io/arch: ARCHITECTURE
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi

將 ARCHITECTURE 替換為所需的 CPU 架構,例如 arm64 或 amd64。您最多只能在工作負載中選取一個架構。選取的 ComputeClass 必須支援您指定的架構。

如果未明確要求架構,Autopilot 會使用 ComputeClass 的預設架構。

Autopilot 上的 Arm 架構

Autopilot 支援要求使用 Arm CPU 架構的節點。與類似的 x86 節點相比,Arm 節點的成本效益更高,同時還能提升效能。如需要求 Arm 節點的操作說明,請參閱「在 Arm 架構上部署 Autopilot 工作負載」。

請確認部署作業中使用的圖片正確無誤。如果 Pod 使用 Arm 映像檔,但您未要求 Arm 節點,Autopilot 會在 x86 節點上排定 Pod,導致 Pod 損毀。同樣地,如果您不慎使用 x86 映像檔,但為 Pod 要求 Arm 節點,Pod 就會當機。

預設、最低和最高資源要求

為 Autopilot 工作負載選擇 ComputeClass 時,請務必指定符合該 ComputeClass 資源要求上下限的資源要求。如要瞭解預設要求,以及每個 ComputeClass 的最低和最高要求,請參閱「GKE Autopilot 中的資源要求和限制」。

後續步驟