更新 AWS 集群参数

本页面介绍如何更新 GKE on AWS 集群的设置。 您可以按照以下说明更新集群中的任何可更新设置,包括 Kubernetes 版本。由于升级版本是最常见的集群更新操作之一,因此单独的升级集群页面会介绍如何升级集群版本。

更新集群的原因

您可能出于以下任一原因更新集群:

  • 更新集群的说明。
  • 更新集群的注解。
  • 更新集群的管理员用户列表。
  • 更新集群的日志记录配置。
  • 轮替加密密钥
  • 更新集群控制层面的安全群组。

您还可以更新集群中未列在此处的其他字段。如需查看您可以更新的字段的完整列表,请参阅 gcloud container aws clusters updateprojects.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 会执行“滚动更新”,其中包括以下步骤:

  1. 选择一个要更新的控制层面实例。GKE on AWS 会先更新健康状况不佳的实例(如果有),然后再更新健康状况良好的实例。
  2. 为实例创建新的启动模板。
  3. 更新自动扩缩组的启动模板。
  4. 删除实例。 AWS 会重新创建实例,实例会使用新配置启动。
  5. 对新实例执行健康检查。
  6. 如果健康检查成功,选择另一个实例并对其执行相同的步骤。重复此循环,直到所有实例都重启或重新创建。如果健康检查失败,则 GKE on AWS 会将集群置于 DEGRADED 状态并停止更新。如需了解详情,请参阅以下部分。
  7. 删除原始启动模板。

更新失败时

更新后,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 更新大多数字段。某些字段只能通过上述某一种机制进行更新。 如果您要使用控制台更新集群,则必须先选择并配置用于登录集群的身份验证方法。如需了解详情,请参阅连接到集群并进行身份验证

控制台

  1. 在 Google Cloud 控制台中,进入 Google Kubernetes Engine 集群概览页面。

    转到 GKE 集群

  2. 选择集群所在的 Google Cloud 项目。

  3. 在集群列表中,选择集群名称,然后在侧边栏中选择查看详细信息

  4. 详细信息标签页上,选择要更改的字段上的 修改

    例如,如需向其他用户授予集群管理权限,请选择管理员用户旁边的 修改,然后输入用户的电子邮件地址。

  5. 完成更改后,选择完成

gcloud

使用 gcloud CLI 更新集群时,必须始终包含 CLUSTER_NAMEGOOGLE_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 安全群组 ID
  • SECURITY_GROUP_IDS:要添加到集群控制层面实例的 AWS 安全群组 ID

API

使用 GKE Multi-Cloud API 更新集群时,必须始终在 HTTP 请求中包含 CLUSTER_NAMEGOOGLE_CLOUD_LOCATION 字段。这些字段会告知 GKE on AWS 要更新哪个集群。还必须在该请求中包含 API 端点。您需要创建一个包含要更新的字段的 JSON 文件。仅在 JSON 文件和 UPDATE_MASK 中包含要更新的字段。

以下示例展示了如何通过 API 更新集群。如需了解详情(包括可更新的字段列表),请参阅 projects.locations.awsClusters.patch 方法文档。

  1. 创建一个名为 cluster_update.json 且包含要更新的字段的 JSON 文件。

    {
        "controlPlane": {
           "version": "CLUSTER_VERSION",
        },
        "description": "CLUSTER_DESCRIPTION",
        "authorization": {
            "adminUsers": [
                {
                "username": USERNAME1,
                "username": USERNAME2,
                "username": USERNAME3
                }
            ]
        }
    }
    

    请替换以下内容:

    • CLUSTER_VERSION:新的受支持的集群版本。 请注意,在升级集群时,您必须依次升级到所有次要版本
    • CLUSTER_DESCRIPTION:新集群说明
    • USERNAME1USERNAME2USERNAME3:您要向其授予此集群管理员权限的用户的电子邮件地址。这些字段中的名称将替换集群上任何之前的管理员用户列表。
  2. 使用以下命令,通过 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

替换以下内容:

更新集群卷信息

您可以使用 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]

后续步骤