本文档介绍如何升级 Google Distributed Cloud (GDC) 气隙 Kubernetes 集群的 Kubernetes 版本。您必须为集群规划例行升级,以确保集群包含最新的 Kubernetes 功能和修复。
本文档面向平台管理员组中的 IT 管理员、安全工程师和网络管理员等受众群体,他们负责管理组织内的 Kubernetes 资源。如需了解 详情,请参阅 GDC 气隙文档的受众群体。
准备工作
如需完成本文档中的任务,您必须请求必要的权限并准备环境。
请求 IAM 角色
您必须拥有特定角色才能获得升级 Kubernetes 集群所需的权限。您必须请求具有项目和组织范围的角色。
组织角色
如需列出 Kubernetes 集群的可用升级版本,请让组织 IAM 管理员向您授予 User Cluster Admin (user-cluster-admin) 角色。此角色不绑定到命名空间。
如果您管理的是标准集群,并且无法从平台管理员组获取 User Cluster Admin 角色,则必须请求他们向您提供可用 Kubernetes 升级版本的列表。
项目角色
如需创建、删除、修改或查看集群升级,请让项目 IAM 管理员向您授予 Standard Cluster Admin (standard-cluster-admin) 角色。此角色绑定到您的项目命名空间。
准备环境
如需使用 API 对 Kubernetes 集群 运行命令,请确保您拥有以下资源:
找到 Kubernetes 集群名称,或向平台管理员组的成员询问集群名称。
使用 Kubernetes 集群名称替换这些说明中的
CLUSTER_NAME。登录并生成 管理 API 服务器的 kubeconfig 文件。
使用管理 API 服务器的 kubeconfig 路径替换这些说明中的
MANAGEMENT_API_SERVER。
升级 Kubernetes 集群
使用
UserClusterUpgradeRequest
API 升级现有 Kubernetes 集群。
如需使用 API 升级 Kubernetes 集群,请按以下步骤操作:
通过输出
UserClusterMetadata对象的kubernetesVersion值,列出可用的 Kubernetes 升级版本:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get userclustermetadata -o=custom-columns='TARGET_VERSION:.spec.kubernetesVersion'将
MANAGEMENT_API_SERVER替换为管理 API 服务器的 kubeconfig 文件的路径。该命令会返回可用 Kubernetes 版本的列表:
TARGET_VERSION 1.30.1000-gke.85记下您要将集群升级到的 Kubernetes 版本(来自上一个输出)。您在下一步的升级请求中指定的
targetVersion必须是这些可用版本之一。通过创建
UserClusterUpgradeRequest资源来请求集群升级:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: cluster.gdc.goog/v1 kind: UserClusterUpgradeRequest metadata: name: CLUSTER_NAME namespace: CLUSTER_NAMESPACE spec: clusterRef: name: CLUSTER_NAME targetVersion: TARGET_VERSION EOF替换以下内容:
MANAGEMENT_API_SERVER:管理 API 服务器的 kubeconfig 文件的路径。CLUSTER_NAME:要升级的 Kubernetes 集群的名称,例如user-vm-2。CLUSTER_NAMESPACE:Kubernetes 集群的命名空间。对于共享集群,请使用platform命名空间。 对于标准集群,请使用集群的项目命名空间。TARGET_VERSION:在上一步中确定的升级目标版本,例如1.30.1000-gke.85。
Kubernetes 集群的平均升级时间约为 20 分钟。
通过监控
UserClusterUpgradeRequest资源来验证集群升级:kubectl --kubeconfig MANAGEMENT_API_SERVER \ describe userclusterupgraderequest CLUSTER_NAME \ -n CLUSTER_NAMESPACE替换以下内容:
MANAGEMENT_API_SERVER:管理 API 服务器的 kubeconfig 文件的路径。CLUSTER_NAME:要升级的 Kubernetes 集群的名称,例如user-vm-2。CLUSTER_NAMESPACE:Kubernetes 集群的命名空间。对于共享集群,请使用platform命名空间。 对于标准集群,请使用集群的项目命名空间。
检查输出的
Spec部分。它包含Current Version和Target Version。如果Current Version和Target Version不同,则升级仍在进行中。Spec: ... Current Version: 1.29.500-gke.60 Target Version: 1.30.1000-gke.85 Status: Conditions: - Message: Upgrade is in progress Reason: UpgradeInProgress Status: "False" Type: Succeeded当
Succeeded条件的状态为True且Current Version与Target Version匹配时,升级即完成且成功。如果
Succeeded条件的状态为False,则升级失败。如果您遇到与 Kubernetes 集群升级相关的错误,请与基础架构运维团队联系以获取进一步帮助。
升级后验证集群子组件
Kubernetes 集群成功升级后,我们建议您确认集群的所有子组件都处于正常状态。
检查集群中是否存在子组件故障:
验证是否没有任何子组件显示
ReconciliationError消息:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get subcomponent -n CLUSTER_NAME -o json | jq -r \ '.items[] | select(.status.conditions[]?.reason == "ReconciliationError") | select(.status.featureDisabled != true) | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'如果输出返回任何子组件,请与基础架构运维团队联系以获取进一步帮助。
验证是否没有任何子组件显示
Reconciling消息:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get subcomponent -n CLUSTER_NAME -o json | jq -r \ '.items[] | select(.status.conditions[]?.reason == "Reconciling") | select(.status.featureDisabled != true) | select( "\(.status)" | contains("PreinstallPending") | not) | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'对于具有三个控制平面节点和三个工作器节点的 Kubernetes 集群,升级时间约为 20 分钟。如果您在 20 分钟后仍看到子组件处于
Reconciling状态,请与基础架构运维团队联系以获取进一步帮助。