Arm アーキテクチャに Autopilot ワークロードをデプロイする


このページでは、Arm アーキテクチャに基づくノードをリクエストするために Google Kubernetes Engine(GKE)Autopilot デプロイメントを構成する方法について説明します。

Autopilot の Arm アーキテクチャについて

Autopilot クラスタは、特定のハードウェア要件があるワークロード用のコンピューティング クラスを提供します。こうしたコンピューティング クラスの中には、amd64arm64 など複数の CPU アーキテクチャをサポートするものがあります。

Arm ノードのユースケース

Arm アーキテクチャを使用したノードは、同様の x86 ノードよりも費用対効果の高いパフォーマンスを提供します。次のような状況では、Autopilot ワークロードに Arm を選択する必要があります。

  • 環境では、ビルドとテストに Arm アーキテクチャが使用されている。
  • Arm CPU 上で動作する Android デバイス向けのアプリケーションを開発している。
  • マルチアーキテクチャ イメージを使用しており、ワークロードの実行中に費用を最適化する必要がある。

Autopilot で Arm ノードをリクエストする方法

Pod 用に Arm ノードをリクエストするには、Arm アーキテクチャを使用したノードをリクエストし、Arm ノードをサポートするコンピューティング クラスをリクエストする必要があります。次のセクションでは、Pod 仕様のノードセレクタまたはノード アフィニティ ルールを使用して、コンピューティング クラスと Arm アーキテクチャをリクエストする方法について説明します。

Arm アーキテクチャをサポートするコンピューティング クラスのリストについては、Autopilot のコンピューティング クラスをご覧ください。

始める前に

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得します。
  • GKE バージョン 1.24.1-gke.1400 以降を実行している GKE Autopilot クラスタがあることを確認します。バージョンを設定するには、create コマンドまたは upgrade コマンドで --cluster-version フラグを使用します。
  • T2A Compute Engine マシンタイプ用の割り当てがあることを確認します。
  • Arm アーキテクチャ用に構築されたコンテナ イメージを含む Pod があることを確認します。

コンピューティング クラスと Arm アーキテクチャをリクエストする

Autopilot に、Arm アーキテクチャをサポートするコンピューティング クラスに Pod を配置するように指示するには、nodeSelectorまたはノード アフィニティルールで次のラベルの両方を指定します。

cloud.google.com/compute-class: COMPUTE_CLASS
kubernetes.io/arch: arm64

COMPUTE_CLASS は、Arm アーキテクチャをサポートするコンピューティング クラスの名前(Scale-Out など)に置き換えます。

ワークロードをデプロイすると、Autopilot は次の処理を行います。

  1. Arm ノードを自動的にプロビジョニングして Pod を実行します。
  2. 新しいノードを自動的に taint し、非 Arm Pod がそれらのノードでスケジュールされないようにします。
  3. Arm Pod に toleration を自動的に追加して、新しいノードでのスケジューリングを可能にします。

Spot Pod 用に Arm アーキテクチャをリクエストすることもできます。

Arm アーキテクチャのリクエストの例

次の例の仕様は、ノードセレクタまたはノード アフィニティ ルールを使用して Autopilot で Arm アーキテクチャをリクエストする方法を示しています。

nodeSelector

次のマニフェストの例は、nodeSelector で Arm ノードをリクエストする方法を示しています。

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: Scale-Out
        kubernetes.io/arch: arm64
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi

nodeAffinity

ノード アフィニティを使用して Arm ノードをリクエストできます。使用するノード アフィニティのタイプを指定することもできます。

  • requiredDuringSchedulingIgnoredDuringExecution: 指定されたコンピューティング クラスとアーキテクチャを使用する必要があります。
  • preferredDuringSchedulingIgnoredDuringExecution: 指定されたコンピューティング クラスとアーキテクチャをベスト エフォート ベースで使用します。たとえば、既存の x86 ノードが割り当て可能な場合、GKE は新しい Arm ノードをプロビジョニングするのではなく、Pod を x86 ノードに配置します。マルチアーキテクチャ イメージ マニフェストを使用しない限り、Pod はクラッシュします。特定のアーキテクチャを明示的にリクエストすることを強くおすすめします。

次のマニフェストの例では、Scale-Out クラスと Arm ノードが必要です。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      terminationGracePeriodSeconds: 25
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi
            ephemeral-storage: 1Gi
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: cloud.google.com/compute-class
                operator: In
                values:
                - Scale-Out
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

推奨事項

  • パイプラインの一部としてマルチアーキテクチャ イメージをビルドして使用する。マルチアーキテクチャ イメージを使用すると、Pod が x86 ノードに配置されている場合でも Pod が確実に実行されます。
  • ワークロードのマニフェストでアーキテクチャおよびコンピューティング クラスを明示的にリクエストします。そうしないと、Autopilot は、選択したコンピューティング クラスのデフォルト アーキテクチャを使用します(Arm ではない可能性があります)。

対象

次の Google Cloud リージョンでは、Arm アーキテクチャに Autopilot ワークロードをデプロイできます。

  • us-central1
  • europe-west4
  • asia-southeast1

トラブルシューティング

一般的なエラーとトラブルシューティング情報については、Arm ワークロードのトラブルシューティングをご覧ください。

次のステップ