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 では、このドキュメントのコマンドを実行できない場合があります。

要件

  • autopilot-arm ComputeClass を使用するには、クラスタで GKE バージョン 1.35.3-gke.1389000 以降が実行されていることを確認します。
  • スマート デフォルト( kubernetes.io/arch: arm64 ラベルのみを指定)などの機能、autopilot-arm-spot ComputeClass、または autopilot-arm ComputeClass を使用する Autopilot ComputeClass を使用する GKE Standard クラスタを使用するには、クラスタでバージョン 1.36.0-gke.3302001 以降を実行する必要があります。
  • C4AN4A、またはTau T2A Compute Engine マシンタイプ用の割り当てがあることを確認します。
  • Arm アーキテクチャ用に構築されたコンテナ イメージを含む Pod があることを確認します。

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

Arm ノードで Pod を実行するように Autopilot に指示するには、 nodeSelector または ノード アフィニティ ルールを使用して、次のいずれかのセレクタを指定します(GKE のタイプとバージョンによって異なります)。

  • Autopilot クラスタ(スマート デフォルト)の場合: アーキテクチャ タイプのみを指定します。

    • kubernetes.io/arch: arm64

    ワークロードが Autopilot クラスタで実行されている場合、汎用 Arm プラットフォームが選択されます。

  • Autopilot クラスタまたは Autopilot ComputeClass を使用する Standard クラスタ(ComputeClass のみ)の場合: ComputeClass を指定します。

    • cloud.google.com/compute-class: autopilot-arm (または autopilot-arm-spot

    このクラスを選択すると、コンテナ最適化 Arm プラットフォーム(またはその Spot VM バリアント)でワークロードがスケジュールされ、アドミッション時に必要な kubernetes.io/arch: arm64 セレクタが Pod に自動的に追加されます。

  • 明示的な選択(古い GKE バージョン): バージョン 1.35.3-gke.1389000 以降 1.36.0-gke.3302001 より前の Autopilot クラスタでは、汎用 Arm プラットフォームを選択するために、次のセレクタの両方を指定します。この組み合わせは、下位互換性のために新しい GKE バージョンでもサポートされています。

    • cloud.google.com/compute-class: autopilot-arm
    • kubernetes.io/arch: arm64
  • 特定のハードウェア要件があるワークロードの場合: 次のいずれかを指定します。

    • Standard クラスタの kubernetes.io/arch: arm64。GKE はデフォルトで、Pod を C4A マシンタイプに配置します。
    • 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 のパフォーマンスを最適化する をご覧ください。

また、Scale-Out ラベルと arm64 ラベルを使用して 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:
        kubernetes.io/arch: arm64
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi

または、コンテナ最適化 Arm プラットフォームをリクエストすることもできます 。ComputeClass を明示的に指定します:autopilot-arm(Spot VM の場合は autopilot-arm-spot

...
    spec:
      nodeSelector:
        cloud.google.com/compute-class: autopilot-arm
...

Autopilot コンテナ最適化ノードではなく特定のハードウェアをリクエストするには、ComputeClass を置き換えるか、セレクタに cloud.google.com/machine-family: C4A を追加します。

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: kubernetes.io/arch
                operator: In
                values:
                - arm64

Autopilot コンテナ最適化ノードではなく特定のハードウェアをリクエストするには、kubernetes.io/arch を特定のマシンファミリー アフィニティ ルールに置き換えるか、PerformanceScale-Out などのクラスをリクエストします。

推奨事項

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

対象

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

トラブルシューティング

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

次のステップ