本页面介绍如何创建使用 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_1、CONTROL_PLANE_SUBNET_2、CONTROL_PLANE_SUBNET_3 替换为集群的三个控制平面实例的子网 ID
- TENANCY_TYPE:控制平面租用的设置。 可以是
DEFAULT
、DEDICATED
或HOST
。 - 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_1、CONTROL_PLANE_SUBNET_2、CONTROL_PLANE_SUBNET_3 替换为集群的三个控制平面实例的子网 ID
- TENANCY_TYPE:控制平面租用的设置。 可以是
DEFAULT
、DEDICATED
或HOST
。 - 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:控制平面租用的设置。 可以是
DEFAULT
、DEDICATED
或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 资源名称 (ARN)
- NODEPOOL_PROFILE:适用于节点池虚拟机的 IAM 实例配置文件
- ROOT_VOLUME_SIZE:每个节点的根卷的所需大小(以 GB 为单位)
- TENANCY_TYPE:控制平面租用的设置。 可以是
DEFAULT
、DEDICATED
或HOST
。 - 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 方法参考文档。
清理
如需删除使用专用主机的集群,请执行以下步骤:
后续步骤
- 阅读 AWSInstancePlacement API 参考文档。