關於 GKE ComputeClass


您可以定義節點屬性和自動調度資源設定集,Google Kubernetes Engine (GKE) 會使用這些設定建立節點,以透過 ComputeClasses 執行 Pod。本頁說明 ComputeClass 的運作方式、用途和優點,以及可用的 ComputeClass 類型。

這項資訊適用於下列對象:

  • 雲端架構師和平台工程師,希望減少與叢集基礎架構管理相關的額外負擔。
  • 應用程式作業人員和 SRE,希望專注於運算工作負載,不必考慮基礎架構。

關於 ComputeClass 和叢集自動調度資源

ComputeClass 是一組節點屬性和自動調度資源設定,以 Kubernetes API 物件的形式存在於 GKE 叢集中。您可以在部署的任何 Kubernetes 工作負載中選取 ComputeClass。GKE 叢集自動資源調度功能會使用 ComputeClass 中的屬性,為工作負載建立節點。

平台工程師可以使用 ComputeClass 為各種工作負載設定基礎架構,確保每個新節點都能根據應用程式的特定需求進行最佳化。ComputeClass 可提升 GKE 自動調度資源的速度和彈性,並提供宣告式方法,讓您在叢集中設定基礎架構選項。詳情請參閱「使用 ComputeClass 的優點」一節。

只有 ComputeClass 才能提供特定 GKE 功能,例如:

  • 備援運算優先順序:在 ComputeClass 中定義多組基礎架構設定,並根據偏好設定設定優先順序。在擴縮期間,如果無法使用最偏好的設定,GKE 會改用下一個設定。
  • 主動遷移至優先順序較高的節點:設定完成後,GKE 會自動將備援優先順序清單中優先順序較低的節點,換成優先順序較高的節點。因此,即使建立工作負載時沒有該硬體,Pod 最終仍會在 ComputeClass 中最偏好的節點上執行。
  • GKE Standard 中的 Autopilot:在 GKE Autopilot 模式中執行工作負載,即可使用 Autopilot 功能,例如容器最佳化運算平台和以 Pod 為準的計費方式,即使在 Standard 叢集中也適用。GKE 會管理這些節點和工作負載,讓您在任何叢集中都能享有 Autopilot 模式的優點。

ComputeClasses 的優點

ComputeClass 可為平台管理員和營運人員提供下列優點:

  • 提升資源取得能力:ComputeClass 可擴充 GKE 叢集自動調度資源的功能。ComputeClass 功能 (例如備援優先順序和節點合併參數) 可降低 Pod 停滯在 Pending 狀態的風險,並增加可用於擴充節點的選項範圍。
  • 宣告式平台層級設定:平台工程師可透過 ComputeClass,以宣告方式說明各種工作負載類型的節點設定。GKE 自動調度功能會管理節點和節點集區的建立和設定。您可以將 ComputeClasses 整合至 CI/CD 管道,確保平台佈建的基礎架構一致。
  • 減少管理負擔:ComputeClass 可簡化大規模管理基礎架構和工作負載的複雜度。平台工程師會宣告基礎架構類別,應用程式運算子則會在工作負載中選取相關類別。GKE 會管理擴縮、節點硬體設定,並套用 taint、容許條件和標籤。

關於 ComputeClass 自訂資源

ComputeClass 是 Kubernetes 自訂資源。您可以在資訊清單檔案中定義 ComputeClass 的規格,並在叢集中建立該規格,方式與定義及建立 Kubernetes 工作負載資源 (例如 Deployment 和 Service) 類似。

下列資訊清單定義名為 n4 的 ComputeClass:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: n4
spec:
  nodePoolAutoCreation:
    enabled: true
  priorities:
  - machineFamily: n4
  - machineFamily: n2
  whenUnsatisfiable: DoNotScaleUp

當 Pod 選取這個 ComputeClass 時,GKE 會在建立新節點時執行下列操作:

  1. GKE 會建立使用 N4 機型系列的節點。
  2. 如果 N4 機器系列無法使用,GKE 會改為建立使用 N2 機器系列的節點。
  3. 如果 N2 機型系列無法使用,GKE 會等待資源可用,再排程 Pod。

您可以使用 ComputeClass 控制節點的各種設定,包括加速器、節點系統設定、節點位置,以及硬體資源無法使用時 GKE 的備援行為。如要進一步瞭解 ComputeClass 的所有可用設定,請參閱 ComputeClass CustomResourceDefinition

在工作負載中選取 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: "4Gi"

COMPUTE_CLASS 換成叢集中現有的 ComputeClass 名稱。舉例來說,您可以從「關於 ComputeClass 自訂資源」一節指定 n4 ComputeClass,也可以指定autopilot ComputeClass 內建資源

工作負載規格中的節點設定

在 GKE Standard 中,您可以透過 GKE Autopilot 叢集和節點自動佈建功能,在 Pod 中使用節點選取器,建立具有特定屬性的節點,例如機器系列、Spot VM 或 GPU 和 TPU。您可以集中定義這些需求,不必為每個工作負載新增個別選取器。

關於預設套用 ComputeClass

您可以設定 GKE,將 ComputeClass 預設套用至未選取特定 ComputeClass 的 Pod。您可以為特定命名空間或整個叢集定義預設 ComputeClass。如要進一步瞭解如何使用預設類別設定叢集或命名空間,請參閱「依預設將 ComputeClass 套用至 Pod」。

下表說明將 ComputeClass 設為命名空間或叢集預設值的效果:

預設 ComputeClass 的影響
命名空間層級預設值
  • GKE 只會將 ComputeClass 套用至特定命名空間中的 Pod。
  • GKE 會修改 Pod,為命名空間層級的預設類別新增節點選取器。
  • GKE 只會擴大具有節點標籤和節點汙染的節點,適用於該 ComputeClass,與任何其他運算類別類似。
  • GKE 會將節點標籤和節點 taint 新增至 GKE 為命名空間層級預設類別建立的節點。
叢集層級預設值
  • GKE 會將 ComputeClass 套用至任何命名空間中的 Pod。
  • GKE 只會將 ComputeClass 套用至沒有現有 ComputeClass 選取器的 Pod。
  • GKE 不會修改 Pod 規格,為叢集層級預設類別新增節點選取器。
  • 如果節點符合下列任一條件,GKE 就會擴充節點: 條件:
    • 節點沒有其他運算級別的標籤和汙點。
    • 節點具有 cloud.google.com/compute-class: default 節點標籤。
  • GKE 會將 cloud.google.com/compute-class: default 節點標籤新增至 GKE 為叢集層級預設類別建立的節點。GKE 不會為這些節點新增任何節點汙點。
  • 如果您更新 Autopilot 叢集,將自訂運算級別設為叢集層級的預設值,GKE 預設不會在 Autopilot 容器最佳化運算平台上執行 Pod。在 GKE 1.33.1-gke.1107000 以上版本中,您可以將 cloud.google.com/compute-class: autopilot 節點選取器新增至特定 Pod,為這些 Pod 使用 Autopilot 運算平台。

如果 GKE 將命名空間層級的預設 ComputeClass 套用至 Pod,該 Pod 就不會啟用叢集層級的預設 ComputeClass,因為 GKE 會將命名空間層級預設類別的節點選取器新增至 Pod。

叢集層級預設 ComputeClass

啟用叢集層級的預設 ComputeClass 時,名為 defaultComputeClass 物件會定義叢集的節點自動調度規則。如果叢集已有名為 default 的 ComputeClass,GKE 會使用該 ComputeClass 設定叢集。如果叢集沒有名為 default 的自訂 ComputeClass,GKE 的行為會如同套用下列 ComputeClass 規則:

spec:
  whenUnsatisfiable: ScaleUpAnyway
  nodePoolAutoCreation:
    enabled: true

根據預設,GKE 不會套用任何備援行為,也不會變更自動調整節點的設定。如要預設將特定屬性套用至自動調整節點,您必須部署名為 default 的自訂 ComputeClass。

設定預設叢集層級運算類別時,請考量下列事項:

  • 為避免 Pod 停滯在 Pending 狀態,請將 spec.whenUnsatisfiable 欄位設為 ScaleUpAnyway。即使 Pod 要求使用不在叢集層級預設類別優先順序規則中的 Compute Engine 機器系列,GKE 也能根據這個值建立節點。如要強制這些 Pod 使用預設 ComputeClass 中的機器系列,請將這個欄位設為 DoNotScaleUp
  • 如要限制對 default ComputeClass 的變更,請使用 RBAC ClusterRole,限制對名為 defaultComputeClass 資源執行 updatepatchdeletecreate 作業。
  • 如要變更叢集自動調度資源的預設節點合併參數,請使用 ComputeClass 規格中的 spec.autoscalingPolicy 欄位。您在叢集層級預設 ComputeClass 中為這個欄位指定的參數,會套用至叢集中的所有節點。詳情請參閱「設定節點整併的自動調度參數」。

後續步驟