専用ホストでクラスタを作成する

このページでは、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 を作成するには、次の操作を行います。

gcloud

次のサンプルでは、専用ホストを使用してクラスタを作成します。

後述のコマンドデータを使用する前に、次のように置き換えます。

    • 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_1CONTROL_PLANE_SUBNET_2CONTROL_PLANE_SUBNET_3: クラスタの 3 つのコントロール プレーン インスタンスのサブネット ID
    • TENANCY_TYPE: コントロール プレーンのテナンシーの設定。DEFAULTDEDICATED、または 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 create CLUSTER_NAME \
  --location GOOGLE_CLOUD_LOCATION \
  --aws-region AWS_REGION \
  --role-arn API_ROLE_ARN \
  --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
  --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
  --iam-instance-profile CONTROL_PLANE_PROFILE \
  --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
  --instance-placement TENANCY_TYPE
  --cluster-version CLUSTER_VERSION \
  --fleet-project FLEET_PROJECT \
  --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
  --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
  --vpc-id VPC_ID \
  --tags="control-plane=CLUSTER_NAME"

Windows(PowerShell)

gcloud alpha container aws clusters create CLUSTER_NAME `
  --location GOOGLE_CLOUD_LOCATION `
  --aws-region AWS_REGION `
  --role-arn API_ROLE_ARN `
  --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN `
  --database-encryption-kms-key-arn DB_KMS_KEY_ARN `
  --iam-instance-profile CONTROL_PLANE_PROFILE `
  --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 `
  --instance-placement TENANCY_TYPE
  --cluster-version CLUSTER_VERSION `
  --fleet-project FLEET_PROJECT `
  --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS `
  --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS `
  --vpc-id VPC_ID `
  --tags="control-plane=CLUSTER_NAME"

Windows(cmd.exe)

gcloud alpha container aws clusters create CLUSTER_NAME ^
  --location GOOGLE_CLOUD_LOCATION ^
  --aws-region AWS_REGION ^
  --role-arn API_ROLE_ARN ^
  --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN ^
  --database-encryption-kms-key-arn DB_KMS_KEY_ARN ^
  --iam-instance-profile CONTROL_PLANE_PROFILE ^
  --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 ^
  --instance-placement TENANCY_TYPE
  --cluster-version CLUSTER_VERSION ^
  --fleet-project FLEET_PROJECT ^
  --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS ^
  --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS ^
  --vpc-id VPC_ID ^
  --tags="control-plane=CLUSTER_NAME"

REST

次のサンプルでは、専用ホストを使用してクラスタを作成します。

リクエストのデータを使用する前に、次のように置き換えます。

  • 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_1CONTROL_PLANE_SUBNET_2CONTROL_PLANE_SUBNET_3: クラスタの 3 つのコントロール プレーン インスタンスのサブネット ID
    • TENANCY_TYPE: コントロール プレーンのテナンシーの設定。DEFAULTDEDICATED、または HOST のいずれかです。
    • CLUSTER_VERSION: サポートされているクラスタ バージョン
    • FLEET_PROJECT: クラスタを登録する フリート ホスト プロジェクト。このクラスタを別のプロジェクトから管理する場合は、プロジェクト間での登録をご覧ください。
    • POD_ADDRESS_CIDR_BLOCKS: クラスタの Pod の CIDR アドレス範囲
    • SERVICE_ADDRESS_CIDR_BLOCKS: クラスタの Service の CIDR アドレス範囲
    • VPC_ID: このクラスタの AWS VPC の ID

HTTP メソッドと URL:

POST ENDPOINT/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"
    }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

成功を示すステータス コード(2xx)と空のレスポンスが返されます。

その他のオプションについては、メソッド: projects.locations.awsClusters.create のリファレンス ドキュメントをご覧ください。

ノードプールを作成する

gcloud

次のサンプルでは、専用ホストを使用してノードプールを作成します。ノードプールを作成すると、プール内のすべてのインスタンスに同じインスタンス タイプとテナンシー設定が適用されます。

後述のコマンドデータを使用する前に、次のように置き換えます。

    • 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: コントロール プレーンのテナンシーの設定。DEFAULTDEDICATED、または HOST のいずれかです。
    • INSTANCE_TYPE: このノードプールに必要な AWS マシン インスタンス タイプ
    • NODEPOOL_SUBNET: ノードプールが実行されるサブネットの ID。このサブネットが VPC プライマリ CIDR ブロックの外部にある場合は、追加の手順が必要です。詳細については、セキュリティ グループをご覧ください。
    • CLUSTER_VERSION: サポートされているクラスタ バージョン

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud alpha container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --iam-instance-profile NODEPOOL_PROFILE \
    --root-volume-size ROOT_VOLUME_SIZE \
    --instance-placement TENANCY_TYPE
    --instance-type INSTANCE_TYPE \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --node-version CLUSTER_VERSION \
    --max-pods-per-node 110 \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Windows(PowerShell)

gcloud alpha container aws node-pools create NODE_POOL_NAME `
    --cluster CLUSTER_NAME `
    --location GOOGLE_CLOUD_LOCATION `
    --min-nodes MIN_NODES `
    --max-nodes MAX_NODES `
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN `
    --iam-instance-profile NODEPOOL_PROFILE `
    --root-volume-size ROOT_VOLUME_SIZE `
    --instance-placement TENANCY_TYPE
    --instance-type INSTANCE_TYPE `
    --subnet-id NODEPOOL_SUBNET `
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME `
    --node-version CLUSTER_VERSION `
    --max-pods-per-node 110 `
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Windows(cmd.exe)

gcloud alpha container aws node-pools create NODE_POOL_NAME ^
    --cluster CLUSTER_NAME ^
    --location GOOGLE_CLOUD_LOCATION ^
    --min-nodes MIN_NODES ^
    --max-nodes MAX_NODES ^
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN ^
    --iam-instance-profile NODEPOOL_PROFILE ^
    --root-volume-size ROOT_VOLUME_SIZE ^
    --instance-placement TENANCY_TYPE
    --instance-type INSTANCE_TYPE ^
    --subnet-id NODEPOOL_SUBNET ^
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME ^
    --node-version CLUSTER_VERSION ^
    --max-pods-per-node 110 ^
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

REST

次のサンプルでは、専用ホストを使用してノードプールを作成します。ノードプールを作成すると、プール内のすべてのインスタンスに同じインスタンス タイプとテナンシー設定が適用されます。

リクエストのデータを使用する前に、次のように置き換えます。

  • 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: コントロール プレーンのテナンシーの設定。DEFAULTDEDICATED、または HOST のいずれかです。
    • INSTANCE_TYPE: このノードプールに必要な AWS マシン インスタンス タイプ
    • NODEPOOL_SUBNET: ノードプールが実行されるサブネットの ID。このサブネットが VPC プライマリ CIDR ブロックの外部にある場合は、追加の手順が必要です。詳細については、セキュリティ グループをご覧ください。
    • CLUSTER_VERSION: サポートされているクラスタ バージョン

HTTP メソッドと URL:

POST ENDPOINT/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"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

成功を示すステータス コード(2xx)と空のレスポンスが返されます。

その他のオプションについては、メソッド: projects.locations.awsClusters.awsNodePools.create のリファレンス ドキュメントをご覧ください。

クリーンアップ

専用ホストを使用するクラスタを削除するには、次の操作を行います。

  1. ノードプールを削除する
  2. クラスタを削除する
  3. ノードプールとクラスタを削除したら、専用ホストを解放できます。

次のステップ