このページでは、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 以降が実行されていることを確認します。- C4A、N4A、または Tau T2A Compute Engine マシンタイプの割り当てがあることを確認します。
- Arm アーキテクチャ用に構築されたコンテナ イメージを含む Pod があることを確認します。
Autopilot で Arm ノードをリクエストする方法
Arm ノードで Pod を実行するように Autopilot に指示するには、要件に応じて次のいずれかの方法を使用します。これらは、nodeSelector またはノード アフィニティ ルールを使用して指定します。
- 汎用ワークロードの場合: 次の両方を指定して、コンテナ最適化 Arm プラットフォームをリクエストします。
cloud.google.com/compute-class: autopilot-armkubernetes.io/arch: arm64
特定のハードウェア要件があるワークロードの場合: 次のいずれかを指定します。
kubernetes.io/arch: arm64。GKE は、バージョン 1.31.3-gke.1056000 以降を実行しているクラスタの Pod をデフォルトでC4Aマシンタイプに配置します。クラスタで以前のバージョンが実行されている場合、GKE は Pod をT2Aマシンタイプに配置します。cloud.google.com/machine-family: ARM_MACHINE_SERIES。ARM_MACHINE_SERIESを Arm マシンシリーズ(C4A、N4A、T2Aなど)に置き換えます。GKE は、指定されたシリーズに Pod を配置します。
デフォルトでは、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:
cloud.google.com/compute-class: autopilot-arm
kubernetes.io/arch: arm64
containers:
- name: nginx-arm
image: nginx
resources:
requests:
cpu: 2000m
memory: 2Gi
Autopilot コンテナ最適化ノードではなく特定のハードウェアをリクエストするには、nodeSelector で autopilot-arm を Performance または Scale-Out に置き換えます。
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: cloud.google.com/compute-class
operator: In
values:
- autopilot-arm
- key: kubernetes.io/arch
operator: In
values:
- arm64
Autopilot コンテナ最適化ノードではなく特定のハードウェアをリクエストするには、nodeAffinity ルールで autopilot-arm を Performance または Scale-Out に置き換えます。
推奨事項
- パイプラインの一部としてマルチアーキテクチャ イメージをビルドして使用する。マルチアーキテクチャ イメージを使用すると、Pod が x86 ノードに配置されている場合でも Pod が確実に実行されます。
- ワークロードのマニフェストでアーキテクチャおよびコンピューティング クラスを明示的にリクエストします。そうしないと、Autopilot は、選択したコンピューティング クラスのデフォルト アーキテクチャを使用します(Arm ではない可能性があります)。
対象
次のリージョンでは、Arm アーキテクチャに Autopilot ワークロードをデプロイできます。us-east1、us-west1、europe-west1、europe-west4、us-central1。
トラブルシューティング
一般的なエラーとトラブルシューティング情報については、Arm ワークロードのトラブルシューティングをご覧ください。
次のステップ
- Autopilot クラスタ アーキテクチャの詳細を確認する。
- Pod のライフサイクルを理解する。
- 利用可能な Autopilot コンピューティング クラスを理解する。
- 各プラットフォームのデフォルトのリソース リクエスト、最小リソース、最大リソースについて読む。