升级 global 集群

由一个 global 集群 和一个或多个 业务集群 组成。在任何业务集群之前,必须先升级 global 集群。

本文将引导您完成 global 集群的升级操作步骤。

如果 global 集群配置了 global DR(Disaster Recovery) 解决方案,请严格按照 global DR 操作步骤 执行。否则,请按照 标准操作步骤 执行。

标准操作步骤

WARNING

如果您是从 3.16.x 或 3.18.x 升级,并且已安装 Application Services,请先参考 Application Services 升级指南,完成在升级 global 集群之前必须执行的其他步骤。

上传镜像

将 core package 复制到 global 集群的任意控制平面节点上。解压该 package,并 cd 进入解压后的目录。

  • 如果 global 集群使用的是内置镜像仓库,请执行:

    bash upgrade.sh --only-sync-image=true
  • 如果 global 集群使用的是外部镜像仓库,还需要提供镜像仓库地址:

    bash upgrade.sh --only-sync-image=true --registry <registry-address> --username <username> --password <password>

如果您计划在 global 集群升级期间同时升级 OperatorCluster Plugin,可以提前将它们的镜像推送到 global 集群的镜像仓库中。 有关批量上传说明,请参阅 仅推送目录中所有 package 的镜像

INFO

镜像上传通常需要大约 2 小时,具体取决于网络和磁盘性能。

如果您的平台配置了 global disaster recovery(DR),请记住,备用 global 集群也需要上传镜像。请务必据此安排维护窗口。

WARNING

使用 violet 向备用集群上传 package 时,必须指定参数 --dest-repo <备用集群的 VIP 地址>
否则,package 将会上传到主集群的镜像仓库中,从而导致备用集群无法安装或升级扩展。

另外,请注意,必须提供备用集群镜像仓库的认证信息,或者提供 --no-auth 参数。

有关 violet push 子命令的详细信息,请参阅 Upload Packages

触发升级

镜像上传完成后,运行以下命令以启动升级过程:

bash upgrade.sh --skip-sync-image

请等待脚本执行完成后再继续。

如果您已经提前将 Operator 和 Cluster Plugin 的镜像推送到 global 集群的镜像仓库中,则可以继续按照 仅为目录中所有 package 创建 CR 执行。运行此命令后,请等待大约 10–15 分钟,直到功能组件出现升级通知。随后,您就可以在后续升级步骤中一并升级 Operator 和 Cluster Plugin。

WARNING

升级 global 集群 时,在 仅为目录中所有 package 创建 CR 这一步中,不要使用 --clusters 参数在业务集群上创建 CR。

否则,后续业务集群升级过程中可能会出现升级失败

升级 global 集群

WARNING

如果您是从 3.163.18 升级,并且平台已安装 Data Services,则在升级集群时还必须同时升级相关扩展。

更多信息请参阅 Upgrade Data Services

  1. 登录 global 集群的 Web Console,并切换到 Administrator 视图。
  2. 导航到 Clusters > Clusters
  3. 单击 global 集群以打开其详情视图。
  4. 进入 Functional Components 选项卡。
  5. 单击 Upgrade 按钮。

在对话框中查看可用的组件更新,并确认继续。

INFO
  • 升级 Kubernetes 版本是可选的。不过,由于无论是否升级都可能发生服务中断,因此我们建议一并升级 Kubernetes,以避免多次维护窗口。

安装 Product Docs Plugin

INFO

Alauda Container Platform Product Docs 插件可让您在平台内访问产品文档。平台中的所有帮助链接都会指向该文档。如果未安装此插件,点击平台中的帮助链接将返回 404 访问错误。

4.0 开始,内置产品文档已拆分为 Alauda Container Platform Product Docs 插件。如果您是从 3.x 升级,则需要按照以下步骤安装此插件:

  1. 导航到 Administrator

  2. 在左侧边栏中,单击 Marketplace > Cluster Plugins,并选择 global 集群。

  3. 找到 Alauda Container Platform Product Docs 插件,并单击 Install

(条件性)安装 Service Mesh Essentials

如果已安装 Service Mesh v1,请在升级业务集群之前参考 Alauda Service Mesh Essentials Cluster Plugin 文档。

升级后

global DR 操作步骤

验证数据一致性

请按照常规的 global DR 检查操作步骤,确保备用 global 集群中的数据与主 global 集群一致。

如果检测到不一致,请不要在下一步卸载 etcd sync 插件,并在继续之前联系技术支持。如果在备用 global 集群缺少主集群所持有的数据时卸载该插件,可能会导致 owner references 解析错误,并且业务集群的 Machine 对象——包括 immutable-OS 集群(在这种情况下会销毁其底层虚拟机)——可能会被删除。

两个集群上运行以下命令,确保没有 Machine 节点处于非运行状态:

kubectl get machines.platform.tkestack.io

如果存在此类节点,请联系技术支持进行处理后再继续。

卸载 etcd sync 插件

从 3.16 升级
从 3.18 升级
从 4.0 升级

登录 主 global 集群 的任意控制平面节点,然后运行:

helm3 del etcd-sync -n default 2> /dev/null
helm3 del etcd-sync -n cpaas-system 2> /dev/null

kubectl delete configmaps,secret -n kube-system   etcd-master-mirror-cert etcd-slave-mirror-cert etcd-sync-env   etcd-sync-ignore-text &> /dev/null

kubectl delete deploy -n kube-system etcd-mirror-etcd-mirror &> /dev/  null

kubectl get pod -n kube-system | grep etcd-mirror  # Ensure no   etcd-mirror pods remain

上传镜像

备用集群主集群上都执行 上传镜像 步骤。

详情请参阅 标准操作步骤中的上传镜像

升级备用集群

INFO

执行升级时需要访问备用集群的 Web Console。

在继续之前,请确认备用集群的 ProductBase 资源已在 spec.alternativeURLs 下正确配置集群 VIP。

如果没有,请按如下方式更新配置:

apiVersion: product.alauda.io/v1alpha2
kind: ProductBase
metadata:
  name: base
spec:
  alternativeURLs:
    - https://<standby-cluster-vip>

备用集群上,按照 标准操作步骤 中的步骤完成升级。

升级主集群

在备用集群升级完成后,在主集群上继续执行 标准操作步骤

重新安装 etcd sync 插件

在重新安装之前,请确认端口 2379 已从两个 global 集群 VIP 正确转发到其控制平面节点。

要重新安装:

  1. 通过 IP 或 VIP 访问备用 global 集群的 Web Console。
  2. 切换到 Administrator 视图。
  3. 转到 Marketplace > Cluster Plugins
  4. 选择 global 集群。
  5. 找到 Alauda Container Platform etcd Synchronizer,单击 Install,并提供所需参数。

要验证安装:

kubectl get po -n cpaas-system -l app=etcd-sync  # Ensure pod is 1/1 Running

kubectl logs -n cpaas-system $(kubectl get po -n cpaas-system -l app=etcd-sync --no-headers | awk '{print $1}' | head -1) | grep -i "Start Sync update"
# Wait until the logs contain "Start Sync update"

# Recreate the pod to trigger synchronization of resources with ownerReferences
kubectl delete po -n cpaas-system $(kubectl get po -n cpaas-system -l app=etcd-sync --no-headers | awk '{print $1}' | head -1)

检查同步状态

运行以下命令以验证同步状态:

curl "$(kubectl get svc -n cpaas-system etcd-sync-monitor -ojsonpath='{.spec.clusterIP}')/check"

输出说明:

  • "LOCAL ETCD missed keys:" – 这些键存在于主集群中,但在备用集群中缺失。通常在重启 Pod 后即可恢复。
  • "LOCAL ETCD surplus keys:" – 这些键存在于备用集群中,但在主集群中不存在。在删除之前,请与您的运维团队一起检查这些键。