本主题介绍如何自定义 GKE on AWS 用户集群的配置。
您可能出于以下原因需要创建自定义用户集群:
- 为预演环境或测试环境创建另一个集群。
- 添加具有不同机器类型的节点池。
- 在特定 AWS 可用性区域 (AZ) 中创建集群。
准备工作
在开始使用 GKE on AWS 之前,请确保您已执行以下任务:
- 完成前提条件。
- 安装管理服务。 
- 如果您想在不使用 - terraform output example_cluster的情况下创建集群,请为控制平面设置专用 AWS 子网。每个子网应属于同一 AWS 地区中的不同 AZ。路由表必须配置为允许专用子网之间的流量,并且每个子网都必须有权访问 NAT 网关。
- 拥有 AWS 虚拟私有云 (VPC) ID。VPC ID 类似于 - vpc-012345678abcde。您可以在 AWS 控制台上找到 VPC ID。
如需连接到 GKE on AWS 资源,请执行以下步骤。选择您是拥有现有 AWS VPC(或者与 VPC 的直接连接)还是在创建管理服务时创建了专用 VPC。
现有 VPC
如果您拥有与现有 VPC 的直接连接或 VPN 连接,请省略本主题的命令中的行 env HTTP_PROXY=http://localhost:8118。
专用 VPC
如果您在专用 VPC 中创建管理服务,则 GKE on AWS 会在公共子网中添加一个堡垒主机。
如需连接到您的管理服务,请执行以下步骤:
- 切换到您的 GKE on AWS 配置所在的目录。 您在安装管理服务时创建了此目录。 - cd anthos-aws 
- 要打开隧道,请运行 - bastion-tunnel.sh脚本。隧道会转发到- localhost:8118。- 如需打开堡垒主机的隧道,请运行以下命令: - ./bastion-tunnel.sh -N- 来自 SSH 隧道的消息会显示在此窗口中。准备好关闭连接后,请使用 Control+C 或关闭窗口来停止该进程。 
- 打开新终端并切换到您的 - anthos-aws目录。- cd anthos-aws 
- 检查您是否能够使用 - kubectl连接到集群。- env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info- 输出包括管理服务 API 服务器的网址。 
选择控制平面实例大小
GKE on AWS 不支持调整控制平面实例的大小。在创建用户集群之前,请选择控制层面的实例大小。控制平面大小取决于集群中的节点数量。下表包含针对各种集群大小建议的控制平面实例大小。
| 集群大小(节点数) | 控制平面实例类型 | 
|---|---|
| 1 – 10 | m5.large | 
| 11 – 100 | m5.xlarge | 
| 101 – 200 | m5.2xlarge | 
使用自定义配置创建新集群
您可以使用 terraform output example_cluster 为每个管理集群创建一个用户集群的配置。如果要创建更多集群,您需要应用自定义配置。
在此示例中,您可以通过 AWSCluster 和 AWSNodePool CRD 手动创建集群。
- 切换到您的 GKE on AWS 配置所在的目录。 您在安装管理服务时创建了此目录。 - cd anthos-aws 
- 在 - anthos-aws目录中,使用- anthos-gke将上下文切换到管理服务。- cd anthos-aws anthos-gke aws management get-credentials 
- 打开文本编辑器并将以下 - AWSCluster定义复制到名为- custom-cluster.yaml的文件中。- apiVersion: multicloud.cluster.gke.io/v1 kind: AWSCluster metadata: name: CLUSTER_NAME spec: region: AWS_REGION networking: vpcID: VPC_ID podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS ServiceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS controlPlane: version: CLUSTER_VERSION # Latest version is 1.25.5-gke.2100 instanceType: AWS_INSTANCE_TYPE keyName: SSH_KEY_NAME subnetIDs: - CONTROL_PLANE_SUBNET_IDS securityGroupIDs: - CONTROL_PLANE_SECURITY_GROUPS iamInstanceProfile: CONTROL_PLANE_IAM_ROLE rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: ROOT_VOLUME_TYPE # Optional iops: ROOT_VOLUME_IOPS # Optional kmsKeyARN: ROOT_VOLUME_KEY # Optional etcd: mainVolume: sizeGiB: ETCD_VOLUME_SIZE volumeType: ETCD_VOLUME_TYPE # Optional iops: ETCD_VOLUME_IOPS # Optional kmsKeyARN: ETCD_VOLUME_KEY # Optional databaseEncryption: kmsKeyARN: ARN_OF_KMS_KEY hub: # Optional membershipName: ANTHOS_CONNECT_NAME cloudOperations: # Optional projectID: YOUR_PROJECT location: GCP_REGION enableLogging: ENABLE_LOGGING enableMonitoring: ENABLE_MONITORING workloadIdentity: # Optional oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET- 请替换以下内容: - CLUSTER_NAME:您的集群的名称。
- AWS_REGION:您的集群在其中运行的 AWS 地区。 
- VPC_ID:您的集群在其中运行的 VPC 的 ID。 
- POD_ADDRESS_CIDR_BLOCKS:集群的 pod 使用的 IPv4 地址范围。目前仅支持单个范围。 此范围不得与从您的网络访问的任何子网重叠。您可以放心地在多个不同的 AWSCluster 对象中使用相同的范围。例如 - 10.2.0.0/16。
- SERVICE_ADDRESS_CIDR_BLOCKS:集群的服务使用的 IPv4 地址范围。目前仅支持单个范围。 此范围不得与从您的网络访问的任何子网重叠。 您可以放心地在多个不同的 AWSCluster 对象中使用相同的范围。例如 - 10.1.0.0/16。
- SERVICE_LOAD_BALANCER_SUBNETS:GKE on AWS 可在其中创建公共或专用负载平衡器的子网 ID。 
- CLUSTER_VERSION:GKE on AWS 支持的 Kubernetes 版本。最新版本为 1.25.5-gke.2100。 
- AWS_INSTANCE_TYPE:支持的 EC2 实例类型。 
- SSH_KEY_NAME:AWS EC2 密钥对。 
- CONTROL_PLANE_SUBNET_IDS:您的控制平面实例在其中运行的 AZ 中的子网 ID。 
- CONTROL_PLANE_SECURITY_GROUPS:在安装管理服务期间创建的 securityGroupID。您可以通过添加连接到控制平面所需的 securityGroupID 来自定义此项。 
- CONTROL_PLANE_IAM_PROFILE:分配给控制平面副本的 AWS EC2 实例配置文件的名称。 
- ROOT_VOLUME_SIZE:控制平面根卷的大小(以 GiB 为单位)。 
- 将 ROOT_VOLUME_TYPE 替换为 EBS 卷类型。例如 - gp3。
- 将 ROOT_VOLUME_IOPS 替换为卷的每秒预配 IO 操作数 (IOPS)。仅在 - volumeType为- GP3时有效。如需了解详情,请参阅通用 SSD 卷 (gp3)。
- 将 ROOT_VOLUME_KEY 替换为用于加密您的控制平面实例根卷的 AWS KMS 密钥的 Amazon 资源名称。 
- ETCD_VOLUME_SIZE:etcd 使用的卷的大小。 
- 将 ETCD_VOLUME_TYPE 替换为 EBS 卷类型。例如 - gp3。
- 将 ETCD_VOLUME_IOPS 替换为卷的每秒预配 IO 操作数 (IOPS)。仅在 - volumeType为- gp3时有效。如需了解详情,请参阅通用 SSD 卷 (gp3)。
- 将 ETCD_VOLUME_KEY 替换为用于加密您的控制平面 etcd 数据卷的 AWS KMS 密钥的 Amazon 资源名称。 
- ARN_OF_KMS_KEY:用于加密集群 Secret 的 AWS KMS 密钥。 
- ANTHOS_CONNECT_NAME:用于注册集群的 Connect 成员资格名称。成员资格名称必须是唯一的。例如 - projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME,其中- YOUR_PROJECT是您的 Google Cloud 项目,- CLUSTER_NAME是项目中的唯一名称。此字段是可选字段。
- YOUR_PROJECT:您的项目 ID。 
- GCP_REGION:您要在其中存储日志的 Google Cloud 区域。选择 AWS 区域附近的区域。 如需了解详情,请参阅全球位置 - 区域和可用区(例如 - us-central1)。
- ENABLE_LOGGING: - true或- false,表示是否在控制平面节点上启用 Cloud Logging。
- ENABLE_MONITORING: - true或- false,表示是否在控制平面节点上启用 Cloud Monitoring。
- WORKLOAD_IDENTITY_BUCKET:包含您的 Workload Identity 发现信息的 Cloud Storage 存储桶的名称。此字段是可选字段。 
 
- 为集群创建一个或多个 AWSNodePool。打开文本编辑器并将以下 AWSCluster 定义复制到名为 - custom-nodepools.yaml的文件中。- apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: NODE_POOL_NAME spec: clusterName: AWSCLUSTER_NAME version: CLUSTER_VERSION # latest version is 1.25.5-gke.2100 region: AWS_REGION subnetID: AWS_SUBNET_ID minNodeCount: MINIMUM_NODE_COUNT maxNodeCount: MAXIMUM_NODE_COUNT maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT instanceType: AWS_NODE_TYPE keyName: KMS_KEY_PAIR_NAME iamInstanceProfile: NODE_IAM_PROFILE proxySecretName: PROXY_SECRET_NAME rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: VOLUME_TYPE # Optional iops: IOPS # Optional kmsKeyARN: NODE_VOLUME_KEY # Optional- 请替换以下内容: - NODE_POOL_NAME:您的 AWSNodePool 的唯一名称。
- AWSCLUSTER_NAME:您的 AWSCluster 的名称。例如 staging-cluster。
- CLUSTER_VERSION:受支持的 GKE on AWS Kubernetes 版本。
- AWS_REGION:您的 AWSCluster 所在的 AWS 区域。
- AWS_SUBNET_ID:您的 AWSCluster 所在的区域中的 AWS 子网。
- MINIMUM_NODE_COUNT:节点池中的节点数下限。如需了解详情,请参阅扩缩用户集群。
- MAXIMUM_NODE_COUNT:节点池中的节点数上限。
- MAXIMUM_PODS_PER_NODE_COUNT:GKE on AWS 可以分配给一个节点的 Pod 数上限。
- AWS_NODE_TYPE:AWS EC2 实例类型。
- KMS_KEY_PAIR_NAME:分配给每个节点池工作器的 AWS KMS 密钥对。
- NODE_IAM_PROFILE:分配给池中节点的 AWS EC2 实例配置文件的名称。
- ROOT_VOLUME_SIZE:控制平面根卷的大小(以 GiB 为单位)。
- VOLUME_TYPE:节点的 AWS EBS 卷类型。例如 gp3。
- IOPS:卷的每秒预配 IO 操作数 (IOPS)。仅在 volumeType为gp3时有效。
- NODE_VOLUME_KEY:用于对卷进行加密的 AWS KMS 密钥的 ARN。如需了解详情,请参阅使用客户管理 CMK 来加密卷。
 
- 将清单应用到您的管理服务。 - env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f custom-cluster.yaml env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f custom-nodepools.yaml
创建 kubeconfig
在用户集群启动时,您可以为新用户集群创建 kubeconfig 上下文。您将使用该上下文向用户或管理集群进行身份验证。
- 使用 - anthos-gke aws clusters get-credentials为- ~/.kube/config中的用户集群生成- kubeconfig。- env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME- 将 CLUSTER_NAME 替换为您的集群的名称。例如 - cluster-0。
- 使用 - kubectl向新用户集群进行身份验证。- env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info- 如果您的集群已准备就绪,则输出内容会包含集群中 Kubernetes 组件的网址。 
查看集群的状态
如果您应用 AWSCluster 或 AWSNodePool,则管理服务会预配 AWS 资源。
- 在 - anthos-aws目录中,使用- anthos-gke将上下文切换到管理服务。- cd anthos-aws anthos-gke aws management get-credentials 
- 如需列出集群,请使用 - kubectl get AWSClusters。- env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSClusters- 输出包括每个集群的名称、状态、存在时间、版本和端点。 - 例如,以下输出仅包含一个名为 - cluster-0的- AWSCluster:- NAME STATE AGE VERSION ENDPOINT cluster-0 Provisioning 2m41s 1.25.5-gke.2100 gke-xyz.elb.us-east-1.amazonaws.com
查看集群事件
如需查看用户集群中的近期 Kubernetes 事件,请使用 kubectl get events。
- 在 - anthos-aws目录中,使用- anthos-gke将上下文切换到管理服务。- cd anthos-aws anthos-gke aws management get-credentials 
- 运行 - kubectl get events。- env HTTPS_PROXY=http://localhost:8118 \ kubectl get events
输出包括与您的管理服务相关的信息、警告和错误。
删除用户集群
如需删除用户集群,请执行以下步骤:
- 在 - anthos-aws目录中,使用- anthos-gke将上下文切换到管理服务。- cd anthos-aws anthos-gke aws management get-credentials 
- 使用 - kubectl delete删除包含用户集群的清单。- env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f CLUSTER_FILE- 将 CLUSTER_FILE 替换为包含 AWScluster 和 AWSNodePool 对象的清单的名称。例如 - cluster-0.yaml。
删除所有用户集群
要删除所有用户集群,请执行以下步骤:
- 在 - anthos-aws目录中,使用- anthos-gke将上下文切换到管理服务。- cd anthos-aws anthos-gke aws management get-credentials 
- 使用 - kubectl delete从管理服务中删除 AWSNodePool 和 AWSCluster。- env HTTPS_PROXY=http://localhost:8118 \ kubectl delete AWSNodePool --all env HTTPS_PROXY=http://localhost:8118 \ kubectl delete AWSCluster --all
如需了解详情,请参阅卸载 GKE on AWS。
后续步骤
- 使用 GKE Identity Service 配置您的身份提供方。 
- 在 GKE on AWS 上启动您的第一个工作负载。 
- 阅读 AWSCluster 和 AWSNodePool 自定义资源定义的规范。