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

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

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

  • kubernetes.io/arch: arm64。GKE はデフォルトで Pod を T2A マシンタイプに配置します。T2A マシンを使用できない場合、GKE は Pod を C4A マシンタイプに配置します。
  • cloud.google.com/machine-family: ARM_MACHINE_SERIES: ARM_MACHINE_SERIESC4AT2A などの Arm マシンシリーズに置き換えます。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. Toleration を自動的に Arm Pod に追加して、新しいノードでのスケジューリングを可能にします。

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 ではない可能性があります)。

対象

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

トラブルシューティング

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

次のステップ