ノードプールを作成

GKE on AWS でノードプールを作成するには、次のリソースを用意する必要があります。

ノードに 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.600
  • MIN_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.600
  • MIN_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 フィールドと相互に排他的です。両方を指定することはできません。どちらか一方のフィールドを指定する必要があります。