このページでは、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
を実行して最新のバージョンを取得する。
- Arm ノードの要件と制限事項を確認します。
- C4A または Tau T2A Compute Engine マシンタイプの割り当てがあることを確認します。
- Arm アーキテクチャ用に構築されたコンテナ イメージを含む Pod があることを確認します。
Autopilot で Arm ノードをリクエストする方法
Arm ノードで Pod を実行するように Autopilot に指示するには、nodeSelector または ノード アフィニティ ルールで次のいずれかのラベルを指定します。
kubernetes.io/arch: arm64
。GKE はデフォルトで Pod をT2A
マシンタイプに配置します。T2A
マシンを使用できない場合、GKE は Pod をC4A
マシンタイプに配置します。cloud.google.com/machine-family: ARM_MACHINE_SERIES
:ARM_MACHINE_SERIES
をC4A
やT2A
などの Arm マシンシリーズに置き換えます。GKE は、指定されたシリーズに Pod を配置します。
デフォルトでは、いずれかのラベルを使用すると、そのノードに可用性容量がある場合に、GKE は他の Pod を同じノードに配置します。Pod ごとに専用のノードをリクエストするには、マニフェストに cloud.google.com/compute-class:
Performance
ラベルを追加します。詳細については、マシンシリーズを選択して Autopilot Pod のパフォーマンスを最適化するをご覧ください。
または、arm64
ラベルで Scale-Out
ラベルを使用して T2A
をリクエストすることもできます。Spot Pod 用に Arm アーキテクチャをリクエストすることもできます。
ワークロードをデプロイすると、Autopilot は次の処理を行います。
- Arm ノードを自動的にプロビジョニングして Pod を実行します。
- 新しいノードを自動的に taint し、非 Arm Pod がそれらのノードでスケジュールされないようにします。
- Toleration を自動的に Arm Pod に追加して、新しいノードでのスケジューリングを可能にします。
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: Performance
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 はクラッシュします。特定のアーキテクチャを明示的にリクエストすることを強くおすすめします。
次のマニフェストの例では、Performance
クラスと 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:
- Performance
- key: kubernetes.io/arch
operator: In
values:
- arm64
推奨事項
- パイプラインの一部としてマルチアーキテクチャ イメージをビルドして使用する。マルチアーキテクチャ イメージを使用すると、Pod が x86 ノードに配置されている場合でも Pod が確実に実行されます。
- ワークロードのマニフェストでアーキテクチャおよびコンピューティング クラスを明示的にリクエストします。そうしないと、Autopilot は、選択したコンピューティング クラスのデフォルト アーキテクチャを使用します(Arm ではない可能性があります)。
対象
Arm アーキテクチャをサポートする Google Cloud のロケーションに、Arm アーキテクチャに Autopilot ワークロードをデプロイできます。詳細については、使用可能なリージョンとゾーンをご覧ください。
トラブルシューティング
一般的なエラーとトラブルシューティング情報については、Arm ワークロードのトラブルシューティングをご覧ください。
次のステップ
- Autopilot クラスタ アーキテクチャの詳細を確認する。
- Pod のライフサイクルを理解する。
- 利用可能な Autopilot コンピューティング クラスを理解する。
- 各プラットフォームのデフォルトのリソース リクエスト、最小リソース、最大リソースについて読む。