デプロイする Arm ワークロードを準備する


このページでは、GKE Standard クラスタ内の Arm ノードでスケジュールするワークロードを準備する方法について説明します。Autopilot を使用した Arm ワークロードのスケジューリングの詳細については、Arm アーキテクチャに Autopilot ワークロードをデプロイするをご覧ください。

Arm ノードにワークロードを正常にスケジュールするには、次の対象が必要です。

概要

デフォルトでは、すべての Arm ノードに taintkubernetes.io/arch=arm64:NoSchedule)を配置することで GKE は x86 ベースのノード(Intel プロセッサまたは AMD プロセッサを搭載した Compute Engine マシンシリーズ)にのみワークロードをスケジュールします。この taint は、x86 互換ワークロードが誤って Arm ノードにスケジュールされるのを防止します。ワークロードを Arm ノードにデプロイする場合は、このページで説明するフィールドを使用して、ワークロードを目的のタイプのノードに送信するようにスケジューラに指示します。

次のいずれかのフィールドを使用します。

ノードセレクタまたはノード アフィニティ ルールを使用する場合は、ワークロードのコンテナ イメージをノードのアーキテクチャで実行できることを宣言した場合にのみ、GKE によって Arm 互換のワークロードがスケジュールされます。

以下の各セクションで説明するように、Arm 互換のワークロードをノードセレクタまたはノード アフィニティ ルールでスケジュールする場合、GKE は自動的にワークロード構成に toleration を追加し、Pod が Arm ノード上で実行できるようにします。

ワークロードに追加されたこの toleration は、すべての Arm ノードに追加された taint(kubernetes.io/arch=arm64:NoSchedule)と一致し、ワークロードを Arm ノードでスケジュールできる状態になります。

任意のノードで実行できるマルチアーキテクチャ イメージが存在するなどの状況では、この toleration をワークロード構成に手動で追加することをおすすめします。手順については、toleration を使用して、任意のアーキテクチャへのマルチアーキテクチャ ワークロードをスケジュールするをご覧ください。

ノードセレクタを使用して Arm ワークロードをスケジュールする

次のノードセレクタを仕様に追加します。

nodeSelector:
    kubernetes.io/arch: arm64

ノードセレクタは、このワークロードを arm64 ラベルが付いているノードにのみスケジュールするように指定します。このラベルは、GKE クラスタのすべての Arm ノードに付いています。

このノードセレクタがワークロード構成に含まれている場合、GKE は taint に一致する toleration を追加して、Arm ノードでワークロードをスケジューリングできるようにします。

ノード アフィニティ ルールを使用して Arm ワークロードをスケジュールする

ノード アフィニティを使用してワークロードをスケジュールすることもできます。

単一のアーキテクチャへのワークロードをスケジュールする

仕様に次のノード アフィニティを追加します。

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/arch
            operator: In
            values:
            - arm64

ノード アフィニティ ルールでは、GKE クラスタ上のすべての Arm ノードが所有する arm64 ラベルを持つノードにのみワークロードをスケジューリングするように指定します。

このノード アフィニティ ルールがワークロード構成に含まれている場合、GKE は taint に一致する toleration を追加して、Arm ノードでワークロードをスケジューリングできるようにします。

x86 アーキテクチャと Arm アーキテクチャへのワークロードをスケジュールする

x86(Intel プロセッサおよび AMD プロセッサ)と Arm アーキテクチャの両方でワークロードをスケジュールする場合は、さまざまな方法で指定できます。

toleration を使用して、任意のアーキテクチャへのマルチアーキテクチャ ワークロードをスケジュールする

Standard クラスタで使用可能なアーキテクチャ タイプにスケジュールするマルチ アーキテクチャ イメージがある場合、必要な操作はワークロード仕様に toleration を追加することのみです。すべてのアーキテクチャ タイプにワークロードをスケジュールできるため、このページで説明するノードセレクタやノード アフィニティ ルールは必要ありません。

toleration を追加します。

  tolerations:
    - key: kubernetes.io/arch
      operator: Equal
      value: arm64
      effect: NoSchedule

この toleration を使用して、GKE は任意のアーキテクチャ タイプのノードにワークロードをスケジュールできます。

たとえば、次のノードプールが含まれるクラスタがあるとします。

  • my-t2a-node-pool。t2a-standard-16 VM(arm64)を使用。
  • my-c2-node-pool。c2-standard-8 VM(amd64)を使用。
  • my-t2d-node-pool。t2-standard-48 VM(amd64)を使用。

マルチ アーキテクチャ イメージとワークロード構成で arm64 toleration を使用するワークロードをこのクラスタにデプロイすると、GKE はすべてのノードプールでワークロードをスケジュールできます。

ノード アフィニティ ルールを使用して、任意のアーキテクチャへのマルチ アーキテクチャ ワークロードをスケジュールする

x86 や Arm など、複数のアーキテクチャ タイプにわたるノードでワークロードをスケジュールする場合は、ノード アフィニティ ルールを使用することもできます。ノード アフィニティ ルールを使用すると、ワークロードをスケジュールするアーキテクチャ タイプを正確に指定できます。この方法は、Autopilot クラスタでワークロードをスケジュールする場合に推奨されます。詳細については、Arm アーキテクチャに Autopilot ワークロードをデプロイするをご覧ください。

x86 ベースのワークロードでは、ワークロードのスケジュールにこれらのノードセレクタ、ノード アフィニティ ルール、toleration は必要ありません。x86 ベースのノードにのみスケジュールするイメージがある場合、これらのフィールドを使用する必要はありません。

ワークロードを任意のアーキテクチャ タイプにスケジュールするには、ノード アフィニティ フィールドの values セクションに arm64amd64 の両方を記入します。amd64 には、x86 プロセッサを使用するノードが含まれます。

次の例では、Arm プロセッサまたは x86 プロセッサを備えたノードでこのワークロードをスケジュールできることを指定しています。

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/arch
            operator: In
            values:
            - arm64
            - amd64

各アーキテクチャ タイプのラベルは次のとおりです。

たとえば、次のノードプールと特定のノード アフィニティ ルールを持つクラスタがあるとします。

  • my-t2a-node-pool。t2a-standard-16 VM(arm64)を使用。
  • my-c2-node-pool。c2-standard-8 VM(amd64)を使用。
  • my-t2d-node-pool。t2-standard-48 VM(amd64)を使用。

このクラスタに、マルチ アーキテクチャ イメージと values リストに arm64 が含まれるノード アフィニティを使用するワークロードをデプロイする場合は、GKE がワークロード構成に toleration を追加し、すべてのノードプールでワークロードをスケジュールします。

ワークロードをデプロイする

Arm 互換ワークロードをスケジュールする場所を指定する作業が完了したため、ワークロードをデプロイできます。

ワークロードを GKE クラスタにデプロイする手順は、アーキテクチャ タイプ全体で同じです。前提条件の手順を完了していれば、他のワークロードをデプロイする場合と同じように Arm 互換ワークロードをデプロイできます。ワークロードのデプロイ例については、次のページをご覧ください。

トラブルシューティング

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

次のステップ