本页面介绍如何更新 GKE on AWS 集群的设置。 您可以按照以下说明更新集群中的任何可更新设置,包括 Kubernetes 版本。由于升级版本是最常见的集群更新操作之一,因此单独的升级集群页面会介绍如何升级集群版本。
更新集群的原因
您可能出于以下任一原因更新集群:
- 更新集群的说明。
- 更新集群的注解。
- 更新集群的管理员用户列表。
- 更新集群的日志记录配置。
- 轮替加密密钥。
- 更新集群控制层面的安全群组。
您还可以更新集群中未列在此处的其他字段。如需查看您可以更新的字段的完整列表,请参阅 gcloud container aws clusters update
和 projects.locations.awsClusters.patch
文档。
前提条件
如需更新集群的任何字段,您必须拥有
gkemulticloud.googleapis.com/awsClusters.update
Identity and Access Management 权限。如需更新集群的安全组,集群的控制层面角色必须具有
ec2:ModifyNetworkInterfaceAttribute
权限。如需了解详情,请参阅创建控制平面角色。此外,如需更新集群的标记,集群的 API 角色必须具有以下 AWS 权限:
autoscaling:CreateOrUpdateTags
autoscaling:DeleteTags
ec2:CreateTags
ec2:DescribeLaunchTemplates
ec2:DescribeSecurityGroupRules
ec2:DeleteTags
elasticloadbalancing:AddTags
elasticloadbalancing:RemoveTags
请参阅创建 AWS IAM 角色,了解如何创建集群的 API 角色并为其添加权限。
更新过程
GKE on AWS 更新集群的过程因更新类型而异。对于某些更改,GKE on AWS 可以更新集群,而无需重启或重新创建任何资源,例如更新集群的说明。GKE on AWS 会立即进行这些更改。
其他更改需要重启控制平面节点,例如更新 Kubernetes 版本。对于此类更新,GKE on AWS 会执行“滚动更新”,其中包括以下步骤:
- 选择一个要更新的控制层面实例。GKE on AWS 会先更新健康状况不佳的实例(如果有),然后再更新健康状况良好的实例。
- 为实例创建新的启动模板。
- 更新自动扩缩组的启动模板。
- 删除实例。 AWS 会重新创建实例,实例会使用新配置启动。
- 对新实例执行健康检查。
- 如果健康检查成功,选择另一个实例并对其执行相同的步骤。重复此循环,直到所有实例都重启或重新创建。如果健康检查失败,则 GKE on AWS 会将集群置于
DEGRADED
状态并停止更新。如需了解详情,请参阅以下部分。 - 删除原始启动模板。
更新失败时
更新后,GKE on AWS 会对集群执行健康检查。如果健康检查失败,则集群会被标记为 DEGRADED
。您可以使用以下 Google Cloud CLI 命令显示集群的状态:
gcloud container aws clusters describe CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION
替换以下内容:
CLUSTER_NAME
:您的集群的名称GOOGLE_CLOUD_LOCATION
:管理您的集群的 Google Cloud 区域
更新集群
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 GKE Multi-Cloud API 一次更新多个集群字段。
选择更新方法
您可以通过控制台、gcloud CLI 或 GKE Multi-Cloud API 更新大多数字段。某些字段只能通过上述某一种机制进行更新。 如果您要使用控制台更新集群,则必须先选择并配置用于登录集群的身份验证方法。如需了解详情,请参阅连接到集群并进行身份验证。
控制台
在 Google Cloud 控制台中,进入 Google Kubernetes Engine 集群概览页面。
选择集群所在的 Google Cloud 项目。
在集群列表中,选择集群名称,然后在侧边栏中选择查看详细信息。
在详细信息标签页上,选择要更改的字段上的
修改。例如,如需向其他用户授予集群管理权限,请选择管理员用户旁边的
修改,然后输入用户的电子邮件地址。完成更改后,选择完成。
gcloud
使用 gcloud CLI 更新集群时,必须始终包含 CLUSTER_NAME
和 GOOGLE_CLOUD_LOCATION
字段,它们会告知 GKE on AWS 要更新哪个集群。在以下命令中,仅包含要更新的字段;请先移除其他字段,然后再运行该命令。
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--cluster-version=CLUSTER_VERSION \
--admin-users=USERNAME_LIST \
--root-volume-iops=ROOT_VOLUME_IOPS \
--root-volume-size=ROOT_VOLUME_SIZE \
--root-volume-type=ROOT_VOLUME_TYPE \
--security-group-ids=SECURITY_GROUP_IDS
请替换以下内容:
CLUSTER_NAME
:您的集群的名称GOOGLE_CLOUD_LOCATION
(必需):管理集群的受支持的 Google Cloud 区域,例如us-west1
CLUSTER_VERSION
:新的受支持的集群版本USERNAME_LIST
:以英文逗号分隔的用户名列表,例如“kai@example.com,hao@example.com,kalani@example.com”。这些是您要向其授予此集群管理员权限的用户的电子邮件地址。此设置中的名称将替换集群上任何之前的管理员用户列表。ROOT_VOLUME_IOPS
:根卷的每秒 I/O 操作数上限ROOT_VOLUME_SIZE
:根卷的大小,以 Gb 为单位ROOT_VOLUME_TYPE
:根卷的 AWS EBS 卷类型SECURITY_GROUP_IDS
:要添加到集群控制层面实例的 AWS 安全群组 IDSECURITY_GROUP_IDS
:要添加到集群控制层面实例的 AWS 安全群组 ID
API
使用 GKE Multi-Cloud API 更新集群时,必须始终在 HTTP 请求中包含 CLUSTER_NAME
和 GOOGLE_CLOUD_LOCATION
字段。这些字段会告知 GKE on AWS 要更新哪个集群。还必须在该请求中包含 API 端点。您需要创建一个包含要更新的字段的 JSON 文件。仅在 JSON 文件和 UPDATE_MASK
中包含要更新的字段。
以下示例展示了如何通过 API 更新集群。如需了解详情(包括可更新的字段列表),请参阅 projects.locations.awsClusters.patch
方法文档。
创建一个名为
cluster_update.json
且包含要更新的字段的 JSON 文件。{ "controlPlane": { "version": "CLUSTER_VERSION", }, "description": "CLUSTER_DESCRIPTION", "authorization": { "adminUsers": [ { "username": USERNAME1, "username": USERNAME2, "username": USERNAME3 } ] } }
请替换以下内容:
CLUSTER_VERSION
:新的受支持的集群版本。 请注意,在升级集群时,您必须依次升级到所有次要版本CLUSTER_DESCRIPTION
:新集群说明USERNAME1
、USERNAME2
、USERNAME3
:您要向其授予此集群管理员权限的用户的电子邮件地址。这些字段中的名称将替换集群上任何之前的管理员用户列表。
使用以下命令,通过 GKE Multi-Cloud API 更新这些设置。
curl -d @cluster_update.json -X PATCH \ ENDPOINT/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/awsClusters/CLUSTER_NAME?update_mask=UPDATE_MASK
请替换以下内容:
ENDPOINT
(必需):您的 Google Cloud 服务端点PROJECT_ID
(必需):您的 Google Cloud 项目GOOGLE_CLOUD_LOCATION
(必需):管理集群的受支持的 Google Cloud 区域,例如us-west1
CLUSTER_NAME
(必需):您的集群名称UPDATE_MASK
(必需):包含以下一个或多个标志的英文逗号分隔列表,指示要更新的字段。在此示例中,指定以下内容。- controlPlane.version
- 说明
- authorization.admin_users
更新集群的安全群组
如需更新集群的安全组,集群的控制层面角色必须具有 ec2:ModifyNetworkInterfaceAttribute
权限。如需了解详情,请参阅创建控制层面角色。
您可以使用 gcloud container aws clusters update
命令向集群控制层面添加其他安全群组。
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--security-group-ids=SECURITY_GROUP_IDS
替换以下内容:
CLUSTER_NAME
:您的集群的名称GOOGLE_CLOUD_LOCATION
:管理集群的受支持的 Google Cloud 区域,例如us-west1
SECURITY_GROUP_IDS
:要添加到集群控制层面实例的 AWS 安全群组 ID
移除集群安全群组
您可以使用 Google Cloud CLI 从集群中移除所有非默认安全群组。如需更新集群,请运行以下命令:
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--clear-security-group-ids
替换以下内容:
CLUSTER_NAME
:您的集群的名称GOOGLE_CLOUD_LOCATION
:管理集群的受支持的 Google Cloud 区域,例如us-west1
更新集群卷信息
您可以使用 Google Cloud CLI 更新集群的控制层面卷。如需更新卷 KMS 密钥,请参阅密钥轮替。
如需更新卷大小、类型或 IOPS,请运行以下命令:
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--root-volume-iops=ROOT_VOLUME_IOPS
--root-volume-size=ROOT_VOLUME_SIZE
--root-volume-type=ROOT_VOLUME_TYPE
替换以下内容:
CLUSTER_NAME
:您的集群的名称GOOGLE_CLOUD_LOCATION
:管理集群的受支持的 Google Cloud 区域,例如us-west1
ROOT_VOLUME_IOPS
:根卷的每秒 IO 操作数ROOT_VOLUME_SIZE
:根卷的大小,以 Gb 为单位ROOT_VOLUME_TYPE
:根卷的 AWS EBS 卷类型。
更新 Logging 配置
您可以使用 Google Cloud CLI 更新集群的 Cloud Logging 配置设置。如需更新 Logging 配置,请运行以下命令:
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--logging=LOGGING_CONFIG \
替换以下内容:
CLUSTER_NAME
:您的集群的名称GOOGLE_CLOUD_LOCATION
:管理集群的受支持的 Google Cloud 区域,例如us-west1
LOGGING_CONFIG
:[SYSTEM] 或 [SYSTEM,WORKLOAD]
后续步骤
- 如需更新卷 KMS 密钥,请参阅密钥轮替
- 如需详细了解可更新的字段,请参阅
gcloud container aws clusters update
参考文档。 - 请参阅
projects.locations.awsClusters.patch
REST API 文档。