このページでは、GKE Standard クラスタ内の Arm ノードでスケジュールするワークロードを準備する方法について説明します。Autopilot を使用した Arm ワークロードのスケジューリングの詳細については、Arm アーキテクチャに Autopilot ワークロードをデプロイするをご覧ください。
Arm ノードにワークロードを正常にスケジュールするには、次の対象が必要です。
- Arm 互換のコンテナ イメージ。これを確認する方法に関するガイダンスについては、ワークロードは Arm 対応の準備ができているかをご覧ください。
- Arm 互換ワークロードをスケジュール設定できる Arm ノード。必要なリソースを作成するには、Arm ノードを使用してクラスタとノードプールを作成するをご覧ください。
- 使用可能な Arm 仮想マシン(VM)がある Google Cloud リージョンまたはゾーンのクラスタ。マシンタイプとプラットフォームのフィルタリング可能な表については、使用可能なリージョンとゾーンをご覧ください。
概要
デフォルトでは、すべての Arm ノードに taint(kubernetes.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
セクションに arm64
と amd64
の両方を記入します。amd64
には、x86 プロセッサを使用するノードが含まれます。
次の例では、Arm プロセッサまたは x86 プロセッサを備えたノードでこのワークロードをスケジュールできることを指定しています。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
- amd64
各アーキテクチャ タイプのラベルは次のとおりです。
arm64
: Arm プロセッサを使用するノード(Tau T2A など)の場合。amd64
: AMD プロセッサを使用するノード(Tau T2D など)または Intel プロセッサを使用するノード(C2 など)の場合。
たとえば、次のノードプールと特定のノード アフィニティ ルールを持つクラスタがあるとします。
- 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 ワークロードのトラブルシューティングをご覧ください。