本主题介绍如何自定义 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 替换为 AWS KMS 密钥的 Amazon 资源名称,以加密您的控制层面 etcd 数据卷。
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 自定义资源定义的规范。