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 ノードの要件と制限事項を確認します。
  • C4A または Tau T2A Compute Engine マシンタイプの割り当てがあることを確認します。
  • Arm アーキテクチャ用に構築されたコンテナ イメージを含む Pod があることを確認します。

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

Arm ノードで Pod を実行するように Autopilot に指示するには、nodeSelector または ノード アフィニティ ルールで次のいずれかのラベルを指定します。

  • 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 マシンシリーズ(C4AT2A など)に置き換えます。GKE は、指定されたシリーズに Pod を配置します。

デフォルトでは、いずれかのラベルを使用すると、そのノードに使用可能な容量がある場合に、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

次のマニフェストの例は、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: Performance
        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 はクラッシュします。特定のアーキテクチャを明示的にリクエストすることを強くおすすめします。

次のマニフェストの例では、Performance クラスと 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:
                - Performance
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

推奨事項

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

対象

Google Cloud Arm アーキテクチャをサポートするロケーションで、Arm アーキテクチャに Autopilot ワークロードをデプロイできます。詳細については、使用可能なリージョンとゾーンをご覧ください。

トラブルシューティング

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

次のステップ