このページでは、AWS 専用インスタンスまたは専用ホストを使用するクラスタとノードプールを作成する方法について説明します。専用ホストと専用インスタンスはユーザー専用に予約されたもので、他の AWS ユーザーとは共有されません。専用ホストと専用インスタンスの設定はテナンシーと呼ばれます。
始める前に
GKE on AWS で専用インスタンスまたは専用ホストを使用するには、新しいクラスタ バージョン 1.22.8-gke.200 以降を作成する必要があります。既存のクラスタをアップグレードして専用ホストを追加することはできません。
クラスタ要件
クラスタを作成する前に、前提条件をすべて満たす必要があります。特に、次のリソースを用意する必要があります。
- クラスタが動作する AWS VPC。
- 3 つのコントロール プレーン レプリカ用に最大 3 つの AWS サブネット。それぞれ異なる AWS アベイラビリティ ゾーンに作成する必要があります。
- GKE on AWS がクラスタの管理で前提としている AWS IAM ロール。これには特定の IAM 権限が必要です。
- クラスタデータ(etcd)と構成の保存時の暗号化に使用される KMS 対称 CMK 鍵。
- 各コントロール プレーン レプリカの AWS IAM インスタンス プロファイル。これには特定の IAM 権限が必要です。
- 各コントロール プレーン レプリカを実行する EC2 インスタンスへの SSH アクセスが必要な場合は、EC2 SSH 認証鍵ペア(省略可)。
これらのリソースは、お客様の責任で作成して管理する必要があります。また、リソースはすべての Anthos クラスタ間で共有できます。その他の基盤となるクラスタ スコープ AWS リソースは、GKE on AWS によって管理されます。
この手順では、GKE Multi-Cloud API を使用してクラスタとノードプールを作成します。GKE Multi-Cloud API を使用するには、Google Cloud APIs に精通している必要があります。
専用ホストと専用インスタンス
クラスタまたはノードプールを作成するときに、次のいずれかを選択します。
DEFAULT
: VPC のデフォルトのテナンシーでインスタンスを起動するDEDICATED
: 専用インスタンスでインスタンスを起動するHOST
: 専用ホストでインスタンスを起動する
クラスタまたはノードプールを作成する前に、適切なオプションを決定します。
詳細については、AWS のドキュメントの起動構成を使用したインスタンス テナンシーの構成、専用インスタンス、専用ホストをご覧ください。
クラスタでテナンシーの設定を混在させる
テナンシーの設定は、コントロール プレーンやノードプールごとに個別に構成できます。たとえば、共有ホストにコントロール プレーン、専用ホストにノードプール、共有ホストに別のノードプールを持つクラスタを作成できます。
専用ホストを割り当てる
専用ホストを使用してクラスタを作成する前に、クラスタに必要なすべてのインスタンスにホストを割り当てる必要があります。ホストには次の属性が必要です。
- クラスタ リソースに必要なインスタンス ファミリーと同じものを使用している
- クラスタの作成を計画したゾーンに割り当てられている
- 自動プレースメントを有効にする
- 専用ホストを起動するための十分な割り当てがある
専用ホストの割り当てについて詳しくは、専用ホストのスタートガイドをご覧ください。
制限事項
このセクションでは、GKE on AWS での専用ホストのサポートに関する制限について説明します。
ノードプール
ノードプールのテナンシー設定を更新することはできません。別のテナンシーが設定されているインスタンスにワークロードを移動するには、必要なテナンシーで新しいノードプールを作成して、既存のノードプールを削除します。
サポートされているインスタンス ファミリー
GKE on AWS は、次のインスタンス ファミリーの専用ホストをサポートします。
- t3
- m5
- m5d
- c5
- c5d
- r5
- r5d
- i3en
他のインスタンス ファミリーはサポートされていません。
ノードタイプ
Linux ノードプールのみサポートされています。
クラスタを作成する
GKE Multi-Cloud API を使用して、メソッド: projects.locations.awsClusters.create で専用ホストをサポートするクラスタを作成します。Deployment を作成するには、次の操作を行います。
後述のコマンドデータを使用する前に、次のように置き換えます。
- CLUSTER_NAME: 選択したクラスタ名
- GOOGLE_CLOUD_LOCATION: クラスタを管理するサポート対象の Google Cloud リージョン(例:
us-west1
) - AWS_REGION: クラスタが作成される AWS リージョン
- API_ROLE_ARN: GKE Multi-Cloud API ロールの ARN
- CONFIG_KMS_KEY_ARN: ユーザーデータの暗号化に使用される AWS KMS 鍵の Amazon Resource Name(ARN)
- DB_KMS_KEY_ARN: クラスタのシークレットの暗号化に使用される AWS KMS 鍵の Amazon Resource Name(ARN)
- CONTROL_PLANE_PROFILE: クラスタに関連付けられた IAM インスタンスのプロファイル
- CONTROL_PLANE_SUBNET_1、CONTROL_PLANE_SUBNET_2、CONTROL_PLANE_SUBNET_3: クラスタの 3 つのコントロール プレーン インスタンスのサブネット ID
- TENANCY_TYPE: コントロール プレーンのテナンシーの設定。
DEFAULT
、DEDICATED
、またはHOST
のいずれかです。 - CLUSTER_VERSION: サポートされているクラスタ バージョン
- FLEET_PROJECT: クラスタを登録する フリート ホスト プロジェクト。このクラスタを別のプロジェクトから管理する場合は、プロジェクト間での登録をご覧ください。
- POD_ADDRESS_CIDR_BLOCKS: クラスタの Pod の CIDR アドレス範囲
- SERVICE_ADDRESS_CIDR_BLOCKS: クラスタの Service の CIDR アドレス範囲
- VPC_ID: このクラスタの AWS VPC の ID
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud alpha container aws clusters createCLUSTER_NAME \
--locationGOOGLE_CLOUD_LOCATION \
--aws-regionAWS_REGION \
--role-arnAPI_ROLE_ARN \
--config-encryption-kms-key-arnCONFIG_KMS_KEY_ARN \
--database-encryption-kms-key-arnDB_KMS_KEY_ARN \
--iam-instance-profileCONTROL_PLANE_PROFILE \
--subnet-idsCONTROL_PLANE_SUBNET_1 ,CONTROL_PLANE_SUBNET_2 ,CONTROL_PLANE_SUBNET_3 \
--instance-placementTENANCY_TYPE
--cluster-versionCLUSTER_VERSION \
--fleet-projectFLEET_PROJECT \
--pod-address-cidr-blocksPOD_ADDRESS_CIDR_BLOCKS \
--service-address-cidr-blocksSERVICE_ADDRESS_CIDR_BLOCKS \
--vpc-idVPC_ID \
--tags="control-plane=CLUSTER_NAME "
Windows(PowerShell)
gcloud alpha container aws clusters createCLUSTER_NAME `
--locationGOOGLE_CLOUD_LOCATION `
--aws-regionAWS_REGION `
--role-arnAPI_ROLE_ARN `
--config-encryption-kms-key-arnCONFIG_KMS_KEY_ARN `
--database-encryption-kms-key-arnDB_KMS_KEY_ARN `
--iam-instance-profileCONTROL_PLANE_PROFILE `
--subnet-idsCONTROL_PLANE_SUBNET_1 ,CONTROL_PLANE_SUBNET_2 ,CONTROL_PLANE_SUBNET_3 `
--instance-placementTENANCY_TYPE
--cluster-versionCLUSTER_VERSION `
--fleet-projectFLEET_PROJECT `
--pod-address-cidr-blocksPOD_ADDRESS_CIDR_BLOCKS `
--service-address-cidr-blocksSERVICE_ADDRESS_CIDR_BLOCKS `
--vpc-idVPC_ID `
--tags="control-plane=CLUSTER_NAME "
Windows(cmd.exe)
gcloud alpha container aws clusters createCLUSTER_NAME ^
--locationGOOGLE_CLOUD_LOCATION ^
--aws-regionAWS_REGION ^
--role-arnAPI_ROLE_ARN ^
--config-encryption-kms-key-arnCONFIG_KMS_KEY_ARN ^
--database-encryption-kms-key-arnDB_KMS_KEY_ARN ^
--iam-instance-profileCONTROL_PLANE_PROFILE ^
--subnet-idsCONTROL_PLANE_SUBNET_1 ,CONTROL_PLANE_SUBNET_2 ,CONTROL_PLANE_SUBNET_3 ^
--instance-placementTENANCY_TYPE
--cluster-versionCLUSTER_VERSION ^
--fleet-projectFLEET_PROJECT ^
--pod-address-cidr-blocksPOD_ADDRESS_CIDR_BLOCKS ^
--service-address-cidr-blocksSERVICE_ADDRESS_CIDR_BLOCKS ^
--vpc-idVPC_ID ^
--tags="control-plane=CLUSTER_NAME "
リクエストのデータを使用する前に、次のように置き換えます。
- ENDPOINT: Google Cloud サービスのエンドポイント
- PROJECT_ID: Google Cloud プロジェクト
- USERNAME: クラスタ管理者としてオペレーションを実行できるユーザー
- CLUSTER_NAME: 選択したクラスタ名
- GOOGLE_CLOUD_LOCATION: クラスタを管理するサポート対象の Google Cloud リージョン(例:
us-west1
) - AWS_REGION: クラスタが作成される AWS リージョン
- API_ROLE_ARN: GKE Multi-Cloud API ロールの ARN
- CONFIG_KMS_KEY_ARN: ユーザーデータの暗号化に使用される AWS KMS 鍵の Amazon Resource Name(ARN)
- DB_KMS_KEY_ARN: クラスタのシークレットの暗号化に使用される AWS KMS 鍵の Amazon Resource Name(ARN)
- CONTROL_PLANE_PROFILE: クラスタに関連付けられた IAM インスタンスのプロファイル
- CONTROL_PLANE_SUBNET_1、CONTROL_PLANE_SUBNET_2、CONTROL_PLANE_SUBNET_3: クラスタの 3 つのコントロール プレーン インスタンスのサブネット ID
- TENANCY_TYPE: コントロール プレーンのテナンシーの設定。
DEFAULT
、DEDICATED
、またはHOST
のいずれかです。 - CLUSTER_VERSION: サポートされているクラスタ バージョン
- FLEET_PROJECT: クラスタを登録する フリート ホスト プロジェクト。このクラスタを別のプロジェクトから管理する場合は、プロジェクト間での登録をご覧ください。
- POD_ADDRESS_CIDR_BLOCKS: クラスタの Pod の CIDR アドレス範囲
- SERVICE_ADDRESS_CIDR_BLOCKS: クラスタの Service の CIDR アドレス範囲
- VPC_ID: このクラスタの AWS VPC の ID
HTTP メソッドと URL:
POSTENDPOINT /projects/PROJECT_ID /locations/GOOGLE_CLOUD_LOCATION /awsClusters
リクエストの本文(JSON):
{ "name": "CLUSTER_NAME ", "authorization": { "adminUsers": [ { "username": "USERNAME " } ] }, "awsRegion": "AWS_REGION ", "controlPlane": { "awsServicesAuthentication": { "roleArn": "API_ROLE_ARN " }, "configEncryption": { "kmsKeyArn": "CONFIG_KMS_KEY_ARN " }, "databaseEncryption": { "kmsKeyArn": "DB_KMS_KEY_ARN " }, "iamInstanceProfile": "CONTROL_PLANE_PROFILE ", "mainVolume": {}, "rootVolume": {}, "sshConfig": {}, "subnetIds": [ "CONTROL_PLANE_SUBNET_1 ", "CONTROL_PLANE_SUBNET_2 ", "CONTROL_PLANE_SUBNET_3 " ], "tags": { "google:gkemulticloud:cluster": "CLUSTER_NAME " }, "instancePlacement": { "tenancy": "TENANCY_TYPE " }, "version": "CLUSTER_VERSION " }, "fleet": { "project": "FLEET_PROJECT " }, "networking": { "podAddressCidrBlocks": [ "POD_ADDRESS_CIDR_BLOCKS " ], "serviceAddressCidrBlocks": [ "SERVICE_ADDRESS_CIDR_BLOCKS " ], "vpcId": "VPC_ID " } }
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"ENDPOINT /projects/PROJECT_ID /locations/GOOGLE_CLOUD_LOCATION /awsClusters"
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "ENDPOINT /projects/PROJECT_ID /locations/GOOGLE_CLOUD_LOCATION /awsClusters" | Select-Object -Expand Content
成功を示すステータス コード(2xx)と空のレスポンスが返されます。
その他のオプションについては、メソッド: projects.locations.awsClusters.create のリファレンス ドキュメントをご覧ください。
ノードプールを作成する
後述のコマンドデータを使用する前に、次のように置き換えます。
- GOOGLE_CLOUD_LOCATION: サポートされている Google Cloud リージョン
- CLUSTER_NAME: クラスタの名前
- NODE_POOL_NAME: クラスタを管理するノードプールの名前(例:
us-west1
) - MIN_NODES: ノードプールに含めることができるノードの最小数
- MAX_NODES: ノードプールに含めることができるノードの最大数
- CONFIG_KMS_KEY_ARN: ユーザーデータを暗号化する AWS KMS 鍵の Amazon Resource Name(ARN)
- NODEPOOL_PROFILE: ノードプール VM の IAM インスタンス プロファイル
- ROOT_VOLUME_SIZE: 各ノードのルート ボリュームに必要なサイズ(GB)
- TENANCY_TYPE: コントロール プレーンのテナンシーの設定。
DEFAULT
、DEDICATED
、またはHOST
のいずれかです。 - INSTANCE_TYPE: このノードプールに必要な AWS マシン インスタンス タイプ
- NODEPOOL_SUBNET: ノードプールが実行されるサブネットの ID。このサブネットが VPC プライマリ CIDR ブロックの外部にある場合は、追加の手順が必要です。詳細については、セキュリティ グループをご覧ください。
- CLUSTER_VERSION: サポートされているクラスタ バージョン
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud alpha container aws node-pools createNODE_POOL_NAME \
--clusterCLUSTER_NAME \
--locationGOOGLE_CLOUD_LOCATION \
--min-nodesMIN_NODES \
--max-nodesMAX_NODES \
--config-encryption-kms-key-arnCONFIG_KMS_KEY_ARN \
--iam-instance-profileNODEPOOL_PROFILE \
--root-volume-sizeROOT_VOLUME_SIZE \
--instance-placementTENANCY_TYPE
--instance-typeINSTANCE_TYPE \
--subnet-idNODEPOOL_SUBNET \
--ssh-ec2-key-pairSSH_KEY_PAIR_NAME \
--node-versionCLUSTER_VERSION \
--max-pods-per-node 110 \
--tags "Name=CLUSTER_NAME -NODE_POOL_NAME "
Windows(PowerShell)
gcloud alpha container aws node-pools createNODE_POOL_NAME `
--clusterCLUSTER_NAME `
--locationGOOGLE_CLOUD_LOCATION `
--min-nodesMIN_NODES `
--max-nodesMAX_NODES `
--config-encryption-kms-key-arnCONFIG_KMS_KEY_ARN `
--iam-instance-profileNODEPOOL_PROFILE `
--root-volume-sizeROOT_VOLUME_SIZE `
--instance-placementTENANCY_TYPE
--instance-typeINSTANCE_TYPE `
--subnet-idNODEPOOL_SUBNET `
--ssh-ec2-key-pairSSH_KEY_PAIR_NAME `
--node-versionCLUSTER_VERSION `
--max-pods-per-node 110 `
--tags "Name=CLUSTER_NAME -NODE_POOL_NAME "
Windows(cmd.exe)
gcloud alpha container aws node-pools createNODE_POOL_NAME ^
--clusterCLUSTER_NAME ^
--locationGOOGLE_CLOUD_LOCATION ^
--min-nodesMIN_NODES ^
--max-nodesMAX_NODES ^
--config-encryption-kms-key-arnCONFIG_KMS_KEY_ARN ^
--iam-instance-profileNODEPOOL_PROFILE ^
--root-volume-sizeROOT_VOLUME_SIZE ^
--instance-placementTENANCY_TYPE
--instance-typeINSTANCE_TYPE ^
--subnet-idNODEPOOL_SUBNET ^
--ssh-ec2-key-pairSSH_KEY_PAIR_NAME ^
--node-versionCLUSTER_VERSION ^
--max-pods-per-node 110 ^
--tags "Name=CLUSTER_NAME -NODE_POOL_NAME "
リクエストのデータを使用する前に、次のように置き換えます。
- ENDPOINT: Google Cloud サービスのエンドポイント
- PROJECT_ID: Google Cloud プロジェクト
- USERNAME: クラスタ管理者としてオペレーションを実行できるユーザー
- GOOGLE_CLOUD_LOCATION: サポートされている Google Cloud リージョン
- CLUSTER_NAME: クラスタの名前
- NODE_POOL_NAME: クラスタを管理するノードプールの名前(例:
us-west1
) - MIN_NODES: ノードプールに含めることができるノードの最小数
- MAX_NODES: ノードプールに含めることができるノードの最大数
- CONFIG_KMS_KEY_ARN: ユーザーデータを暗号化する AWS KMS 鍵の Amazon Resource Name(ARN)
- NODEPOOL_PROFILE: ノードプール VM の IAM インスタンス プロファイル
- ROOT_VOLUME_SIZE: 各ノードのルート ボリュームに必要なサイズ(GB)
- TENANCY_TYPE: コントロール プレーンのテナンシーの設定。
DEFAULT
、DEDICATED
、またはHOST
のいずれかです。 - INSTANCE_TYPE: このノードプールに必要な AWS マシン インスタンス タイプ
- NODEPOOL_SUBNET: ノードプールが実行されるサブネットの ID。このサブネットが VPC プライマリ CIDR ブロックの外部にある場合は、追加の手順が必要です。詳細については、セキュリティ グループをご覧ください。
- CLUSTER_VERSION: サポートされているクラスタ バージョン
HTTP メソッドと URL:
POSTENDPOINT /projects/PROJECT_ID /locations/GOOGLE_CLOUD_LOCATION /CLUSTER_NAME /awsNodePools
リクエストの本文(JSON):
{ "name": "NODE_POOL_NAME ", "autoscaling": { "minNodeCount":MIN_NODES , "maxNodeCount":MAX_NODES }, "config": { "configEncryption": { "kmsKeyArn": "CONFIG_KMS_KEY_ARN " }, "iamInstanceProfile": "NODEPOOL_PROFILE ", "rootVolume": { "sizeGib":ROOT_VOLUME_SIZE }, "instancePlacement": { "tenancy": "TENANCY_TYPE " }, "instanceType" : "INSTANCE_TYPE " "tags": { "google:gkemulticloud:cluster": "NODE_POOL_NAME " } }, "maxPodsConstraint": { "maxPodsPerNode": "110" }, "subnetId": "NODEPOOL_SUBNET ", "version": "CLUSTER_VERSION " }
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"ENDPOINT /projects/PROJECT_ID /locations/GOOGLE_CLOUD_LOCATION /CLUSTER_NAME /awsNodePools"
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "ENDPOINT /projects/PROJECT_ID /locations/GOOGLE_CLOUD_LOCATION /CLUSTER_NAME /awsNodePools" | Select-Object -Expand Content
成功を示すステータス コード(2xx)と空のレスポンスが返されます。
その他のオプションについては、メソッド: projects.locations.awsClusters.awsNodePools.create のリファレンス ドキュメントをご覧ください。
クリーンアップ
専用ホストを使用するクラスタを削除するには、次の操作を行います。
- ノードプールを削除する
- クラスタを削除する
- ノードプールとクラスタを削除したら、専用ホストを解放できます。
次のステップ
- AWSInstancePlacement API リファレンス ドキュメントを確認する。