このページでは、Arm アーキテクチャに基づくノードをリクエストするために Google Kubernetes Engine(GKE)Autopilot デプロイメントを構成する方法について説明します。
Autopilot の Arm アーキテクチャについて
Autopilot クラスタは、特定のハードウェア要件があるワークロード用のコンピューティング クラスを提供します。こうしたコンピューティング クラスの中には、amd64
や arm64
など複数の CPU アーキテクチャをサポートするものがあります。
Arm ノードのユースケース
Arm アーキテクチャを使用したノードは、同様の x86 ノードよりも費用対効果の高いパフォーマンスを提供します。次のような状況では、Autopilot ワークロードに Arm を選択する必要があります。
- 環境では、ビルドとテストに Arm アーキテクチャが使用されている。
- Arm CPU 上で動作する Android デバイス向けのアプリケーションを開発している。
- マルチアーキテクチャ イメージを使用しており、ワークロードの実行中に費用を最適化する必要がある。
Autopilot で Arm ノードをリクエストする方法
Pod 用に Arm ノードをリクエストするには、Arm アーキテクチャを使用したノードをリクエストし、Arm ノードをサポートするコンピューティング クラスをリクエストする必要があります。次のセクションでは、Pod 仕様のノードセレクタまたはノード アフィニティ ルールを使用して、コンピューティング クラスと Arm アーキテクチャをリクエストする方法について説明します。
Arm アーキテクチャをサポートするコンピューティング クラスのリストについては、Autopilot のコンピューティング クラスをご覧ください。
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
- GKE バージョン 1.24.1-gke.1400 以降を実行している GKE Autopilot クラスタがあることを確認します。バージョンを設定するには、create コマンドまたは upgrade コマンドで
--cluster-version
フラグを使用します。 T2A
Compute Engine マシンタイプ用の割り当てがあることを確認します。- Arm アーキテクチャ用に構築されたコンテナ イメージを含む Pod があることを確認します。
コンピューティング クラスと Arm アーキテクチャをリクエストする
Autopilot に、Arm アーキテクチャをサポートするコンピューティング クラスに Pod を配置するように指示するには、nodeSelector またはノード アフィニティルールで次のラベルの両方を指定します。
cloud.google.com/compute-class: COMPUTE_CLASS
kubernetes.io/arch: arm64
COMPUTE_CLASS
は、Arm アーキテクチャをサポートするコンピューティング クラスの名前(Scale-Out
など)に置き換えます。
ワークロードをデプロイすると、Autopilot は次の処理を行います。
- Arm ノードを自動的にプロビジョニングして Pod を実行します。
- 新しいノードを自動的に taint し、非 Arm Pod がそれらのノードでスケジュールされないようにします。
- Arm Pod に toleration を自動的に追加して、新しいノードでのスケジューリングを可能にします。
Spot Pod 用に Arm アーキテクチャをリクエストすることもできます。
Arm アーキテクチャのリクエストの例
次の例の仕様は、ノードセレクタまたはノード アフィニティ ルールを使用して Autopilot で Arm アーキテクチャをリクエストする方法を示しています。
nodeSelector
次のマニフェストの例は、nodeSelector で 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: Scale-Out
kubernetes.io/arch: arm64
containers:
- name: nginx-arm
image: nginx
resources:
requests:
cpu: 2000m
memory: 2Gi
nodeAffinity
ノード アフィニティを使用して Arm ノードをリクエストできます。使用するノード アフィニティのタイプを指定することもできます。
requiredDuringSchedulingIgnoredDuringExecution
: 指定されたコンピューティング クラスとアーキテクチャを使用する必要があります。preferredDuringSchedulingIgnoredDuringExecution
: 指定されたコンピューティング クラスとアーキテクチャをベスト エフォート ベースで使用します。たとえば、既存の x86 ノードが割り当て可能な場合、GKE は新しい Arm ノードをプロビジョニングするのではなく、Pod を x86 ノードに配置します。マルチアーキテクチャ イメージ マニフェストを使用しない限り、Pod はクラッシュします。特定のアーキテクチャを明示的にリクエストすることを強くおすすめします。
次のマニフェストの例では、Scale-Out
クラスと 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:
- Scale-Out
- key: kubernetes.io/arch
operator: In
values:
- arm64
推奨事項
- パイプラインの一部としてマルチアーキテクチャ イメージをビルドして使用する。マルチアーキテクチャ イメージを使用すると、Pod が x86 ノードに配置されている場合でも Pod が確実に実行されます。
- ワークロードのマニフェストでアーキテクチャおよびコンピューティング クラスを明示的にリクエストします。そうしないと、Autopilot は、選択したコンピューティング クラスのデフォルト アーキテクチャを使用します(Arm ではない可能性があります)。
対象
次の Google Cloud リージョンでは、Arm アーキテクチャに Autopilot ワークロードをデプロイできます。
- us-central1
- europe-west4
- asia-southeast1
トラブルシューティング
一般的なエラーとトラブルシューティング情報については、Arm ワークロードのトラブルシューティングをご覧ください。
次のステップ
- Autopilot クラスタ アーキテクチャの詳細を確認する。
- Pod のライフサイクルを理解する。
- 利用可能な Autopilot コンピューティング クラスを理解する。
- 各プラットフォームのデフォルト、最小、最大の各リソース リクエストについて読む。