このページでは、Arm アーキテクチャに基づくノードをリクエストするために Google Kubernetes Engine(GKE)Autopilot デプロイメントを構成する方法について説明します。
Autopilot の Arm アーキテクチャについて
Autopilot クラスタは、特定のハードウェア要件があるワークロード用のコンピューティング クラスを提供します。こうしたコンピューティング クラスの中には、amd64 や arm64 など複数の 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 ノードの要件と制限事項を確認します。
要件
autopilot-armComputeClass を使用するには、クラスタで GKE バージョン 1.35.3-gke.1389000 以降が実行されていることを確認します。- Autopilot ComputeClass を使用する GKE Standard クラスタで、スマート デフォルト(
kubernetes.io/arch: arm64ラベルのみを指定)、autopilot-arm-spotComputeClass、autopilot-armComputeClass などの機能を使用するには、クラスタでバージョン 1.36.0-gke.3302001 以降を実行する必要があります。 - C4A、N4A、または 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-armkubernetes.io/arch: arm64
特定のハードウェア要件があるワークロードの場合: 次のいずれかを指定します。
- Standard クラスタの
kubernetes.io/arch: arm64。GKE はデフォルトで、Pod をC4Aマシンタイプに配置します。 cloud.google.com/machine-family: ARM_MACHINE_SERIES。ARM_MACHINE_SERIESを Arm マシンシリーズ(C4A、N4A、T2Aなど)に置き換えます。GKE は、指定されたシリーズに Pod を配置します。
- Standard クラスタの
デフォルトでは、Performance 以外のラベルを使用すると、そのノードに使用可能な容量がある場合に、GKE は他の Pod を同じノードに配置します。Pod ごとに専用のノードをリクエストするには、アーキテクチャまたはマシン ファミリーのラベルとともに、マニフェストに cloud.google.com/compute-class: Performance ラベルを追加します。詳細については、マシンシリーズを選択して Autopilot Pod のパフォーマンスを最適化するをご覧ください。
また、arm64 ラベルと Scale-Out ラベルを使用して T2A をリクエストすることもできます。Spot Pod 用に Arm アーキテクチャをリクエストすることもできます。
ワークロードをデプロイすると、Autopilot は次の処理を行います。
- Arm ノードを自動的にプロビジョニングして Pod を実行します。
- 新しいノードを自動的に taint し、非 Arm Pod がそれらのノードでスケジュールされないようにします。
- 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
または、autopilot-arm(Spot VM の場合は autopilot-arm-spot)ComputeClass を明示的に指定して、コンテナ最適化 Arm プラットフォームをリクエストすることもできます。
...
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 を特定のマシン ファミリー アフィニティ ルールまたは Performance や Scale-Out などのリクエスト クラスに置き換えます。
推奨事項
- パイプラインの一部としてマルチアーキテクチャ イメージをビルドして使用する。マルチアーキテクチャ イメージを使用すると、Pod が x86 ノードに配置されている場合でも Pod が確実に実行されます。
- ワークロードのマニフェストでアーキテクチャおよびコンピューティング クラスを明示的にリクエストします。そうしないと、Autopilot は、選択したコンピューティング クラスのデフォルト アーキテクチャを使用します(Arm ではない可能性があります)。
対象
次のリージョンでは、Arm アーキテクチャに Autopilot ワークロードをデプロイできます。us-east1、us-west1、europe-west1、europe-west2、europe-west4、asia-southeast1、us-central1。
トラブルシューティング
一般的なエラーとトラブルシューティング情報については、Arm ワークロードのトラブルシューティングをご覧ください。
次のステップ
- Autopilot クラスタ アーキテクチャの詳細を確認する。
- Pod のライフサイクルを理解する。
- 利用可能な Autopilot コンピューティング クラスを理解する。
- 各プラットフォームのデフォルトのリソース リクエスト、最小リソース、最大リソースについて読む。