升级 global 集群

由一个 global 集群和一个或多个业务集群组成。必须先升级 global 集群,然后才能升级任何业务集群。

本文将介绍 global 集群的升级操作步骤。

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

标准操作步骤

WARNING

如果您要从 3.16.x 或 3.18.x 升级,且已安装 Application Services,请参阅 Application Services 升级指南,了解升级 global 集群前必须执行的其他操作。

上传镜像

将核心软件包复制到 global 集群的任意控制平面节点。解压软件包,并将 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 集群期间同时升级 Operator 和集群插件,可以提前将它们的镜像推送到 global 集群的镜像仓库。 批量上传说明请参阅仅推送目录中所有软件包的镜像。

INFO

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

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

WARNING

使用 violet 将软件包上传到备用集群时,必须指定参数 --dest-repo <VIP addr of standby cluster>。
否则,软件包将被上传到主集群的镜像仓库,导致备用集群无法安装或升级扩展。

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

有关 violet push 子命令的详细信息,请参阅上架软件包。

触发升级

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

bash upgrade.sh --skip-sync-image

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

如果已将 Operator 和集群插件镜像预先推送到 global 集群的镜像仓库,则可以按照仅从目录中的所有软件包创建 CR操作。运行此命令后,请等待约 10–15 分钟,直到出现功能组件的升级通知。随后,您便可以在后续升级步骤中同时升级 Operator 和集群插件。

WARNING

升级global 集群时,在仅从目录中的所有软件包创建 CR步骤中,不要使用 --clusters 参数在业务集群上创建 CR。

否则,可能会导致后续业务集群升级失败。

升级 global 集群

WARNING

如果您要从 3.16 或 3.18 升级,且平台已安装 Data Services,则升级集群时还必须升级相关扩展。

有关详细信息,请参阅升级 Data Services。

  1. 登录 global 集群的 Web Console,并切换到管理员视图。
  2. 导航至集群 > 集群。
  3. 点击 global 集群,打开其详情视图。
  4. 转到功能组件选项卡。
  5. 点击升级按钮。

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

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

安装 Product Docs 插件

INFO

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

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

  1. 导航至管理员。

  2. 在左侧边栏中,点击 Marketplace > 集群插件,然后选择 global 集群。

  3. 找到 Alauda Container Platform Product Docs 插件,然后点击安装。

(条件)安装 Service Mesh Essentials

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

升级后

global DR 操作步骤

验证数据一致性

按照常规 global DR 检查流程,确保备用 global 集群中的数据与主 global 集群一致。

如果检测到数据不一致,请勿在下一步卸载 etcd sync 插件,并在继续操作前联系技术支持。如果备用 global 集群缺少主集群中已有的数据,在这种情况下卸载插件可能会导致 owner 引用解析错误,并可能删除业务集群节点 Machine 对象——包括不可变操作系统集群,在这种情况下,删除对象会导致其底层虚拟机被销毁。

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

kubectl get machines.platform.tkestack.io

如果存在此类节点,请联系技术支持,在继续操作前解决问题。

卸载 etcd sync 插件

Upgrading from 3.16
Upgrading from 3.18
Upgrading from 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 插件

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

重新安装步骤:

  1. 通过 IP 或 VIP 访问备用 global 集群的 Web Console。
  2. 切换到管理员视图。
  3. 前往 Marketplace > 集群插件。
  4. 选择 global 集群。
  5. 找到 Alauda Container Platform Global Cluster Disaster Recovery(对于重命名前发布的软件包,该插件显示为 Alauda Container Platform etcd Synchronizer),点击安装并提供所需参数。

验证安装:

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:" – 备用集群中存在这些键,但主集群中没有。删除前,请与运维团队一起审查这些键。