升级集群

本文档介绍了如何升级 Google Distributed Cloud (GDC) 隔离式 Kubernetes 集群的 Kubernetes 版本。您必须为集群规划例行升级,以确保集群纳入最新的 Kubernetes 功能和修复。

本文档面向平台管理员群体中的 IT 管理员、安全工程师和网络管理员等受众群体,他们负责管理组织内的 Kubernetes 资源。如需了解详情,请参阅 GDC 气隙文档的受众群体

准备工作

  • 下载安装 gdcloud CLI。

  • 安装 kubectl CLI。如需了解详情,请参阅安装组件

  • 为目标可用区中的管理 API 服务器生成 kubeconfig 文件。如需了解详情,请参阅可用区级 Kubernetes 集群资源

  • 如需获得列出可用升级版本所需的权限,请让您的组织 IAM 管理员为您授予 User Cluster Admin (user-cluster-admin) 角色。

    如果您管理的是标准集群,但无法从平台管理员群组获取用户集群管理员角色,则必须请求他们向您提供可用的 Kubernetes 升级版本列表。

  • 如需获得配置集群升级所需的权限,请让组织 IAM 管理员为您授予标准集群管理员 (standard-cluster-admin) 角色。

升级 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)"'
    

    对于具有 3 个控制平面节点和 3 个工作器节点的 Kubernetes 集群,升级时间大约为 20 分钟。如果 20 分钟后,您仍然看到子组件处于 Reconciling 状态,请与您的基础设施运营团队联系,以获取进一步的帮助。

后续步骤