GKE on AWS でノードプールを作成するには、次のリソースを用意する必要があります。
- ノードプールを作成する既存の AWS クラスタの名前
- ノードプール VM の IAM インスタンス プロファイル
- ノードプール VM が実行されるサブネット
ノードに SSH でアクセスする場合は、EC2 認証鍵ペアを作成できます。
標準のノードプールを作成する
これらのリソースが使用可能になったら、次のコマンドを使用してノードプールを作成できます。
gcloud container aws node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--instance-type INSTANCE_TYPE \
--root-volume-size ROOT_VOLUME_SIZE \
--iam-instance-profile NODEPOOL_PROFILE \
--node-version NODE_VERSION \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--max-pods-per-node MAX_PODS_PER_NODE \
--location GOOGLE_CLOUD_LOCATION \
--subnet-id NODEPOOL_SUBNET \
--ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "Name=CLUSTER_NAME-NODE_POOL_NAME"
次のように置き換えます。
NODE_POOL_NAME
: ノードプールに付ける名前CLUSTER_NAME
: ノードプールを接続するクラスタの名前INSTANCE_TYPE
: このノードプールに必要な AWS マシン インスタンス タイプ。例:m5.large
ROOT_VOLUME_SIZE
: 各ノードのルート ボリュームに必要なサイズ(GB)NODEPOOL_PROFILE
: ノードプール VM の IAM インスタンス プロファイル。IAM インスタンス プロファイルを更新する方法について詳しくは、AWS IAM インスタンス プロファイルを更新するをご覧ください。NODE_VERSION
: ノードプールの各ノードにインストールする Kubernetes のバージョン。例: 1.29.3-gke.600MIN_NODES
: ノードプールに配置できるノードの最小数MAX_NODES
: ノードプールに配置できるノードの最大数MAX_PODS_PER_NODE
: プール内の任意の 1 つのノードで作成できる Pod の最大数GOOGLE_CLOUD_LOCATION
: このノードプールを管理する Google Cloud のロケーションの名前NODEPOOL_SUBNET
: ノードプールが実行されるサブネットの ID。- クラスタの Pod / Service IP 範囲とノードプール サブネット ネットワークとの間に重複がないようにしてください。クラスタの Pod と Service の IP 範囲の選択について詳しくは、クラスタの CIDR 範囲を選択するをご覧ください。
- このサブネットが VPC プライマリ CIDR ブロックの外部にある場合は、追加の手順が必要です。詳細については、セキュリティ グループをご覧ください。
SSH_KEY_PAIR_NAME
: SSH アクセス用に作成された AWS SSH 鍵ペアの名前(省略可)CONFIG_KMS_KEY_ARN
: ユーザーデータを暗号化する AWS KMS 鍵の Amazon Resource Name(ARN)
存在する場合、--tags
パラメータに指定したタグがノードプール内のすべてのノードに適用されます。この例では、プール内のすべてのノードに、ノードが属するクラスタとノードプールの名前でタグを付けます。
Spot インスタンスのノードプール
GKE on AWS では、プレビュー機能として AWS Spot インスタンス ノードプールがサポートされています。Spot インスタンス ノードプールは、AWS で使用可能な低コストの Amazon EC2 Spot インスタンスのプールです。
Spot インスタンスを使用すると、柔軟性を備え、ステートレスでフォールト トレラントなアプリケーションの費用を削減できます。ただし、柔軟性に欠けるワークロードやステートフルなワークロード、フォールト トレラントでないワークロードやインスタンス ノード間で密結合されたワークロードには適していません。EC2 が容量を元に戻す必要がある場合、Amazon EC2 によって Spot インスタンスが中断される可能性があります。そのため、Spot マーケットの変動によって影響を受ける可能性があります。ワークロードで保証された容量が必要であり、利用できない期間を許容できない場合は、Spot インスタンス ノードプールではなく、標準ノードプールを選択します。
GKE on AWS で使用されている割り当て方式では、中断のリスクを最小限に抑えるため、最も高いキャパシティで空き容量のある Spot インスタンス プールを選択することに重点を置いています。この方法は、画像やメディアのレンダリングやディープ ラーニングなど、中断のコストが高いワークロードに特にメリットがあります。具体的には、capacityOptimized
割り振り戦略が実装されています(Spot インスタンスの割り振り戦略を参照)。
Spot ノードプールを作成する
Spot インスタンスのノードプールを作成するには、次のコマンドを実行します。
gcloud container aws node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--spot-instance-types INSTANCE_TYPE_LIST \
--root-volume-size ROOT_VOLUME_SIZE \
--iam-instance-profile NODEPOOL_PROFILE \
--node-version NODE_VERSION \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--max-pods-per-node MAX_PODS_PER_NODE \
--location GOOGLE_CLOUD_LOCATION \
--subnet-id NODEPOOL_SUBNET \
--ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "Name=CLUSTER_NAME-NODE_POOL_NAME"
次のように置き換えます。
- NODE_POOL_NAME: このノードプールに割り当てる名前。
- CLUSTER_NAME: このノードプールを接続するクラスタの名前。
- INSTANCE_TYPE_LIST: AWS EC2 インスタンス タイプのカンマ区切りリスト。ノードプールは、これらのインスタンス タイプで Spot インスタンスをプロビジョニングします。インスタンス タイプは、同じ CPU アーキテクチャ、同じ数の CPU、同じ量のメモリを備えている必要があります。例: c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium。CPU とメモリの構成が同じインスタンス タイプは、Amazon EC2 インスタンス セレクタ ツールで確認できます。
ROOT_VOLUME_SIZE
: 各ノードのルート ボリュームに必要なサイズ(GB)NODEPOOL_PROFILE
: ノードプール VM の IAM インスタンス プロファイルNODE_VERSION
: ノードプールの各ノードにインストールする Kubernetes のバージョン。例: 1.29.3-gke.600MIN_NODES
: ノードプールに配置できるノードの最小数MAX_NODES
: ノードプールに配置できるノードの最大数MAX_PODS_PER_NODE
: プール内の任意の 1 つのノードで作成できる Pod の最大数GOOGLE_CLOUD_LOCATION
: このノードプールを管理する Google Cloud のロケーションの名前NODEPOOL_SUBNET
: ノードプールが実行されるサブネットの ID。- クラスタの Pod / Service IP 範囲とノードプール サブネット ネットワークとの間に重複がないようにしてください。クラスタの Pod と Service の IP 範囲の選択について詳しくは、クラスタの CIDR 範囲を選択するをご覧ください。
- このサブネットが VPC プライマリ CIDR ブロックの外部にある場合は、追加の手順が必要です。詳細については、セキュリティ グループをご覧ください。
SSH_KEY_PAIR_NAME
: SSH アクセス用に作成された AWS SSH 鍵ペアの名前(省略可)CONFIG_KMS_KEY_ARN
: ユーザーデータを暗号化する AWS KMS 鍵の Amazon Resource Name(ARN)
INSTANCE_TYPE_LIST フィールドにインスタンス タイプの数を指定することをおすすめします。ノードプールが 1 つのインスタンス タイプのみで構成されており、そのインスタンス タイプが目的のアベイラビリティ ゾーンで利用できない場合、ノードプールが新しいノードをプロビジョニングできないため、このベスト プラクティスは重要です。これはアプリケーションの可用性に影響する可能性があり、サービスが中断する可能性があります。
spot-instance-types
フィールドは instance-type
フィールドと相互に排他的です。両方を指定することはできません。どちらか一方のフィールドを指定する必要があります。