このページでは、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 以降が実行されていることを確認します。- スマート デフォルト(
kubernetes.io/arch: arm64ラベルのみを指定)などの機能、autopilot-arm-spotComputeClass、またはautopilot-armComputeClass を使用する Autopilot ComputeClass を使用する GKE Standard クラスタを使用するには、クラスタでバージョン 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 のパフォーマンスを最適化する
をご覧ください。
また、Scale-Out ラベルと arm64 ラベルを使用して 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
または、コンテナ最適化 Arm プラットフォームをリクエストすることもできます
。ComputeClass を明示的に指定します:autopilot-arm(Spot VM の場合は autopilot-arm-spot
)
...
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 コンピューティング クラスを理解する。
- 各プラットフォームのデフォルトのリソース リクエスト、最小リソース、最大リソースについて読む。