升级集群

本文档介绍如何升级 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 集群 运行命令,请确保您拥有以下资源:

  • 下载安装 gdcloud CLI。

  • 安装 kubectl CLI

  • 找到 Kubernetes 集群名称,或向平台管理员组的成员询问集群名称。

  • 使用 Kubernetes 集群名称替换这些说明中的 CLUSTER_NAME

  • 登录并生成 管理 API 服务器的 kubeconfig 文件。

  • 使用管理 API 服务器的 kubeconfig 路径替换这些说明中的 MANAGEMENT_API_SERVER

升级 Kubernetes 集群

使用 UserClusterUpgradeRequest API 升级现有 Kubernetes 集群。

如需使用 API 升级 Kubernetes 集群,请按以下步骤操作:

  1. 通过输出 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
    
  2. 记下您要将集群升级到的 Kubernetes 版本(来自上一个输出)。您在下一步的升级请求中指定的 targetVersion 必须是这些可用版本之一。

  3. 通过创建 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 分钟。

  4. 通过监控 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 VersionTarget Version。如果 Current VersionTarget 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 条件的状态为 TrueCurrent VersionTarget Version 匹配时,升级即完成且成功。

    如果 Succeeded 条件的状态为 False,则升级失败。如果您遇到与 Kubernetes 集群升级相关的错误,请与基础架构运维团队联系以获取进一步帮助。

升级后验证集群子组件

Kubernetes 集群成功升级后,我们建议您确认集群的所有子组件都处于正常状态。

检查集群中是否存在子组件故障:

  1. 验证是否没有任何子组件显示 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)"'
    

    如果输出返回任何子组件,请与基础架构运维团队联系以获取进一步帮助。

  2. 验证是否没有任何子组件显示 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 状态,请与基础架构运维团队联系以获取进一步帮助。

后续步骤