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

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

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

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

Arm ノードのユースケース

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

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

始める前に

作業を始める前に、次のタスクが完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API を有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、gcloud components update コマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
  • Arm ノードの要件と制限事項を確認します。
  • autopilot-arm ComputeClass を使用するには、クラスタで GKE バージョン 1.35.3-gke.1389000 以降が実行されていることを確認します。
  • C4AN4A、または Tau T2A Compute Engine マシンタイプの割り当てがあることを確認します。
  • Arm アーキテクチャ用に構築されたコンテナ イメージを含む Pod があることを確認します。

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

Arm ノードで Pod を実行するように Autopilot に指示するには、要件に応じて次のいずれかの方法を使用します。これらは、nodeSelector またはノード アフィニティ ルールを使用して指定します。

  • 汎用ワークロードの場合: 次の両方を指定して、コンテナ最適化 Arm プラットフォームをリクエストします。
    • cloud.google.com/compute-class: autopilot-arm
    • kubernetes.io/arch: arm64
  • 特定のハードウェア要件があるワークロードの場合: 次のいずれかを指定します。

    • kubernetes.io/arch: arm64。GKE は、バージョン 1.31.3-gke.1056000 以降を実行しているクラスタの Pod をデフォルトで C4A マシンタイプに配置します。クラスタで以前のバージョンが実行されている場合、GKE は Pod を T2A マシンタイプに配置します。

    • cloud.google.com/machine-family: ARM_MACHINE_SERIESARM_MACHINE_SERIES を Arm マシンシリーズ(C4AN4AT2A など)に置き換えます。GKE は、指定されたシリーズに Pod を配置します。

デフォルトでは、Performance 以外のラベルを使用すると、そのノードに使用可能な容量がある場合に、GKE は他の Pod を同じノードに配置します。Pod ごとに専用のノードをリクエストするには、アーキテクチャ ラベルまたはマシン ファミリー ラベルとともに、マニフェストに cloud.google.com/compute-class: Performance ラベルを追加します。詳細については、マシンシリーズを選択して Autopilot Pod のパフォーマンスを最適化するをご覧ください。

また、arm64 ラベルと Scale-Out ラベルを使用して T2A をリクエストすることもできます。Spot Pod 用に Arm アーキテクチャをリクエストすることもできます。

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

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

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

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

nodeSelector

次のマニフェストの例は、Autopilot コンテナ最適化 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: autopilot-arm
        kubernetes.io/arch: arm64
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi

Autopilot コンテナ最適化ノードではなく特定のハードウェアをリクエストするには、nodeSelectorautopilot-armPerformance または Scale-Out に置き換えます。

nodeAffinity

ノード アフィニティを使用して Arm ノードをリクエストできます。

次のマニフェストの例は、Autopilot コンテナ最適化 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:
                - autopilot-arm
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

Autopilot コンテナ最適化ノードではなく特定のハードウェアをリクエストするには、nodeAffinity ルールで autopilot-armPerformance または Scale-Out に置き換えます。

推奨事項

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

対象

次のリージョンでは、Arm アーキテクチャに Autopilot ワークロードをデプロイできます。us-east1us-west1europe-west1europe-west4us-central1

トラブルシューティング

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

次のステップ