创建具有专用主机的集群

本页面介绍如何创建使用 AWS 专用实例专用主机的集群和节点池。专用主机和实例预留仅供您单独使用,而不与其他 AWS 客户共享。专用主机和实例的设置称为租用

准备工作

如需将专用实例或主机与 GKE on AWS 搭配使用,您必须创建新的集群版本 1.22.8-gke.200 或更高版本。您无法升级现有集群以及添加专用主机。

集群要求

在创建集群之前,请务必满足前提条件。具体而言,您必须提供以下资源:

  • 集群将在其中运行的 AWS VPC。
  • 最多三个 AWS 子网用于三个控制平面副本。每个子网必须位于不同的 AWS 可用区中。
  • GKE on AWS 在管理集群时担任的 AWS IAM 角色。这需要一组特定的 IAM 权限
  • KMS 对称 CMK 密钥,用于静态加密集群数据 (etcd) 和配置。
  • 每个控制层面副本的 AWS IAM 实例配置文件。这需要一组特定的 IAM 权限
  • EC2 SSH 密钥对(可选),如果您需要对运行每个控制平面副本的 EC2 实例的 SSH 访问权限。

您负责创建和管理这些资源,这些资源可在所有 Anthos 集群之间共享。其他所有底层集群范围的 AWS 资源都由 GKE on AWS 管理。

以下说明使用 GKE Multi-Cloud API 创建集群和节点池。如需使用 GKE Multi-Cloud API,您应该熟悉 Google Cloud API

专用主机和专用实例

创建集群或节点池时,您可以从以下选项之一中进行选择:

  • 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 方法来创建支持专用主机的集群。如需创建集群,请执行以下步骤:

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 资源名称 (ARN)
    • DB_KMS_KEY_ARN:用于加密集群的 Secret 的 AWS KMS 密钥的 Amazon 资源名称 (ARN)
    • CONTROL_PLANE_PROFILE:与集群关联的 IAM 实例的配置文件
    • CONTROL_PLANE_SUBNET_1CONTROL_PLANE_SUBNET_2CONTROL_PLANE_SUBNET_3 替换为集群的三个控制平面实例的子网 ID
    • TENANCY_TYPE:控制平面租用的设置。 可以是 DEFAULTDEDICATEDHOST
    • CLUSTER_VERSION受支持的集群版本
    • FLEET_PROJECT:将在其中注册集群的舰队宿主项目。如果您要从其他项目管理此集群,请参阅跨项目注册
    • POD_ADDRESS_CIDR_BLOCKS:集群的 pod 的 CIDR 地址范围
    • SERVICE_ADDRESS_CIDR_BLOCKS:集群的服务的 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 资源名称 (ARN)
    • DB_KMS_KEY_ARN:用于加密集群的 Secret 的 AWS KMS 密钥的 Amazon 资源名称 (ARN)
    • CONTROL_PLANE_PROFILE:与集群关联的 IAM 实例的配置文件
    • CONTROL_PLANE_SUBNET_1CONTROL_PLANE_SUBNET_2CONTROL_PLANE_SUBNET_3 替换为集群的三个控制平面实例的子网 ID
    • TENANCY_TYPE:控制平面租用的设置。 可以是 DEFAULTDEDICATEDHOST
    • CLUSTER_VERSION受支持的集群版本
    • FLEET_PROJECT:将在其中注册集群的舰队宿主项目。如果您要从其他项目管理此集群,请参阅跨项目注册
    • POD_ADDRESS_CIDR_BLOCKS:集群的 pod 的 CIDR 地址范围
    • SERVICE_ADDRESS_CIDR_BLOCKS:集群的服务的 CIDR 地址范围
    • VPC_ID:此集群的 AWS VPC 的 ID

HTTP 方法和网址:

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 资源名称 (ARN)
    • NODEPOOL_PROFILE:适用于节点池虚拟机的 IAM 实例配置文件
    • ROOT_VOLUME_SIZE:每个节点的根卷的所需大小(以 GB 为单位)
    • TENANCY_TYPE:控制平面租用的设置。 可以是 DEFAULTDEDICATEDHOST
    • 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 资源名称 (ARN)
    • NODEPOOL_PROFILE:适用于节点池虚拟机的 IAM 实例配置文件
    • ROOT_VOLUME_SIZE:每个节点的根卷的所需大小(以 GB 为单位)
    • TENANCY_TYPE:控制平面租用的设置。 可以是 DEFAULTDEDICATEDHOST
    • INSTANCE_TYPE:此节点池所需的 AWS 机器实例类型
    • NODEPOOL_SUBNET:节点池将在其中运行的子网的 ID。如果此子网位于 VPC 主要 CIDR 块之外,则需要执行一些额外的步骤。如需了解详情,请参阅安全群组
    • CLUSTER_VERSION受支持的集群版本

HTTP 方法和网址:

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. 删除节点池和集群后,您可以释放专用主机

后续步骤