升级 global 集群
本页涵盖 global 集群的传统操作系统路径。如果您的 global 集群运行在 Immutable Infrastructure(Huawei DCS 上的 Alauda OS、VMware vSphere 或 Huawei Cloud Stack)上,Kubernetes 步骤位于不可变基础设施文档中 — 请参见 在不可变基础设施上升级 global 集群。本页所述的 Core、Aligned 和 Agnostic 步骤仍适用于 immutable-OS 集群;不同之处仅在于 Kubernetes 的发布方式。
升级 global 集群也会升级 MySQL operator。如果您有 PXC 实例,在 operator 升级后它们将变为 unmanaged。升级前请参见 MySQL Operator 升级指南 了解迁移说明。
由一个 global 集群和一个或多个 业务集群组成。要将平台迁移到新的 ACP Distribution Version,请先将 global 层升级到目标 Distribution Version,然后再将业务集群升级到相同的 Distribution Version。
ACP 4.3 使用基于 CVO 的集群升级工作流。典型的 global 集群升级包括制品准备、preflight 检查、升级请求和状态观察。
在将 global 集群升级到 ACP 4.3 之前,请确认每个业务集群都运行在兼容的 Kubernetes 版本上。对于 ACP 4.3,兼容版本为 1.34、1.33、1.32 和 1.31。此先决条件独立于更广泛的第三方集群管理范围。
无论环境是否使用 global DR,此 Compatible Versions 先决条件都适用。Global DR 会改变用于升级 global 层的操作步骤,但不会改变在将 global 层升级到目标 Distribution Version 之前,业务集群必须保持在兼容的 Kubernetes 版本范围内这一要求。
global 集群升级遵循本文档中经过验证的 upgrade.sh 方案。您可以通过 Web Console、更新 ClusterVersionShadow.spec.desiredUpdate,或使用带有 --cluster=global 的 ACP CLI 发起 global 集群升级。有关完整的 AC CLI 工作流和输出解读,请参见 升级集群。有关完整的命令和标志语法,请参见 AC CLI 管理员命令参考。
如果环境使用 global DR,请遵循 Global DR 操作步骤。否则,请遵循下面的标准工作流。
标准工作流
global 集群升级会按时间线分阶段执行。大部分工作都会在维护窗口之前完成,因此维护窗口本身可以保持很短且可预测:
第 1 阶段和第 2 阶段不会改变集群状态 — 请尽早执行它们,这样维护窗口内只会包含第 3 阶段。对于较小或实验室环境,也可以直接运行单个 bash upgrade.sh,它会同时执行同步和 CVO 部署,但生产环境窗口通常会将它们分开。
同步升级制品
时间: 维护窗口之前的任意时间。此步骤会将制品上传到 registry,不会改变集群状态。
在解压后的 core package 目录中,以仅同步模式运行 upgrade.sh:
--only-sync-image 会上传镜像和插件制品,但不会部署 cluster version operator。CVO 会在稍后维护窗口内部署 — 请参见 部署 cluster version operator。
upgrade.sh 会同步基于 CVO 的工作流所需的制品,包括:
upgrade.sh 覆盖 Core。Aligned 和 Agnostic plugins 不会由 upgrade.sh 推送;请在发起升级请求之前,使用在 升级前准备 中下载的软件包通过 violet 推送它们。
建议在 global 窗口中将每个 operator package 推送到每个 集群。如果 global 窗口已经过去,而您发现某个业务集群缺少 operator package,仍然可以在业务升级之前推送到该业务集群 — 请参见 升级业务集群。
registry 行为取决于环境配置方式:
当目标 registry 不是平台默认值时,请添加 registry 参数:
如果已知制品校验是冗余的,可添加 --skip-check-artifacts 以跳过它。
在镜像和插件同步完成之前,不要开启维护窗口。
运行 preflight 检查
时间: 维护窗口前 1–2 周,以便在窗口开启前有时间解决任何阻塞项。
以 preflight 模式运行 upgrade.sh:
Preflight 为只读模式 — 它会验证升级就绪状态,但不会改变集群状态。
Preflight 返回两部分:
默认检查集包括:
ResourcePatchUpgradeableClusterVersionUpgradeableVersionUpgradePathKubernetesVersionSupportedDockerRuntimeUnsupportedClusterRunningClusterModuleStableControlPlaneStaticPodsPresentCustomEtcdBackupCronJobsAbsentCRIUpgradePodsAbsentModuleInfoStablePlatformLicense
在需要时处理 preflight 阻塞项
时间: 维护窗口之前。请解决 preflight 发现的每个阻塞项,以免把维护窗口时间消耗在排障上。
如果 ResourcePatchUpgradeable 失败并返回 reason=UnexemptResourcePatches,请检查阻塞的 ResourcePatch 并添加所需的豁免注解:
默认的注解键为 config.cpaas.io/exempt-for-ver。
解决其他常见的 preflight 阻塞项
默认检查集还会验证更多条件。请列出所有不是 Passed 的检查,然后使用下表逐一解决:
如果临时排障需要禁用特定检查,请配置 cpaas-system/cvo-config:
部署 cluster version operator
时间: 维护窗口开始时。
以 skip-sync 模式运行 upgrade.sh。由于制品已在 同步升级制品 中上传,因此会跳过同步:
这会部署或更新 cluster version operator (CVO) 并完成其余准备工作。CVO 会在下一步发起升级后驱动 Core 和 Aligned plugin 的升级。
发起升级
在 cluster version operator 部署完成后,请通过以下任一入口发起升级。这三个入口等价;请选择最符合您的运维模式的入口。
当目标版本对集群可用后,使用此入口。请求流程分为两步:
- 在 Step 1 中,查看 RPCH 列表。
- 点击 Acknowledge 继续到 Step 2。
- 在 Step 2 中,查看 Current Version 和 Target Version。此阶段页面不会显示插件列表或警告图表。
- 目标版本由已准备好的升级制品决定,无法在 Web Console 中手动选择。
- 点击 Start Upgrade。
- 在对话框中确认该操作。
- 确认后,页面会显示升级请求已提交,操作进入进行中状态。
观察执行情况
使用以下命令检查整体状态:
重要的状态字段:
请首先关注这些条件:
有用的诊断信息:
上述命令跟踪的是集群级别(Core 和 Aligned)的升级。要观察单个插件或 operator module — 例如在升级 Agnostic plugin 时 — 请改为读取其 ModuleInfo:
当 status.phase 为 Running 且 status.version 等于目标版本时,表示该 module 已达到目标状态。
(条件)升级 Service Mesh Essentials
如果已安装 Service Mesh v1,请在升级业务集群之前参考 Alauda Service Mesh Essentials 集群插件 文档。
从 Marketplace 升级 Agnostic plugins
CVO 驱动 Core 和 Aligned plugins。Agnostic plugins 不在 CVO 的范围内,必须在集群达到目标 Distribution Version 后单独升级。每个 Agnostic plugin 是否需要升级,取决于其自身的 Kubernetes 兼容性 — 请参阅该 plugin 的 release notes 了解其与目标 Kubernetes 版本的兼容性。
对于 global 集群中正在使用的每个 Agnostic plugin:
- 在 Web Console 中切换到 Administrator 视图。
- 导航到 Marketplace > Cluster Plugins 以管理 Agnostic cluster plugins,或者进入 Agnostic operators 的 operator 工作流。
- 选择目标 plugin 或 operator 并触发升级。Marketplace 升级流程会读取之前通过
violet推送的 package。
如果您在升级前准备期间跳过了某个 Agnostic plugin 的推送,而 Marketplace 又没有提供目标版本,请先完成 violet push 步骤,然后重新尝试 Marketplace 升级。
升级后
- 升级 Alauda AI
- 升级 Alauda DevOps
-
在所有业务集群也都达到 ACP 4.3 之后,请按照 禁用 PKCE Plain Method 完成 PKCE hardening。
-
ACP 4.3 修复了一个 API 身份验证问题:某些 API 之前可以在未认证的情况下访问。在 global 集群达到 ACP 4.3 后,请将以下 L5 plugins 升级到与 ACP v4.3 兼容的版本。否则,它们的 UI 页面可能无法打开:
Alauda DevOps v3Alauda AI EssentialsAlauda HyperfluxAlauda Container Platform Data Services Essentials
-
升级这些 plugin 后,请验证列表中的每个 plugin UI 页面都能成功打开。
Global DR 操作步骤
当环境同时包含一个 primary global cluster 和一个 standby global cluster 时,请使用此操作步骤。下面这些 DR 特定步骤是在标准 CVO 工作流之外的附加步骤。
升级前验证 DR 环境
请按照常规的 global DR 检查操作步骤,确保 standby global cluster 中的数据与 primary global cluster 保持一致。有关 DR 拓扑和同步工作流的背景信息,请参见 Global Cluster Disaster Recovery。
如果检测到不一致,请不要在下一步卸载 etcd 同步插件,并在继续之前联系技术支持。如果在 standby global cluster 缺少 primary 所拥有的数据时卸载该插件,可能会导致 owner references 解析错误,并且业务集群的 node Machine 对象 — 包括 immutable-OS 集群,在这种情况下这会销毁其底层虚拟机 — 可能被删除。
在两个 global 集群上运行以下命令,确保没有 Machine 节点处于非运行状态:
如果存在此类节点,请先解决它们再继续。
从 standby global cluster 卸载 etcd 同步插件
- 通过其 IP 或 VIP 访问 standby global cluster 的 Web Console。
- 切换到 Administrator 视图。
- 导航到 Marketplace > Cluster Plugins 并选择
global集群。 - 找到 etcd Synchronizer 并将其卸载。
- 等待卸载完成后再继续。
在两个 global 集群上同步升级制品
在 standby global cluster 和 primary global cluster 上都完成标准工作流中的 同步升级制品。
在两个集群上使用相同的同步模式。
升级 standby global cluster
如果您将在 standby global cluster 上使用 Web Console,请确认 standby cluster 的 ProductBase 在 spec.alternativeURLs 中包含 standby VIP:
同步完成后,在 standby global cluster 上执行标准工作流中的剩余步骤:
- 运行 preflight 检查
- 部署 cluster version operator
- 发起升级
- 观察执行情况,直到 standby global cluster 达到目标版本
升级 primary global cluster
在 standby global cluster 达到目标版本后,在 primary global cluster 上执行标准工作流中的剩余步骤:
- 运行 preflight 检查
- 部署 cluster version operator
- 发起升级
- 观察执行情况,直到 primary global cluster 达到目标版本
重新安装 etcd 同步插件并验证同步状态
在重新安装插件之前,如果使用的是这种转发方式,请确认端口 2379 已从两个 global-cluster VIP 正确转发到它们的 control plane 节点。如果 standby global cluster 可以直接访问 active global cluster,则不需要通过 load balancer 进行端口转发。
要重新安装该插件:
-
在
cpaas-system中创建或更新etcd-sync-active-cluster-tokenSecret。首先,从 active global cluster 获取用于访问 active global cluster API server 的 bearer token。然后复制命令输出,并在创建 Secret 时使用它。该 Secret 会将 token 存储在数据键token下。请通过 Active Global Cluster Token Secret 使用此 Secret。传统的 plain-token 配置仅作为兼容性回退保留,不是推荐的运维路径。复制输出值,然后在 standby cluster 上运行此命令:
-
通过其 VIP 访问 standby global cluster 的 Web Console,并切换到 Administrator 视图。
-
导航到 Marketplace > Cluster Plugins 并选择
global集群。 -
找到 etcd Synchronizer,点击 Install,并配置所需参数。
配置该 plugin 时:
- 将 Active Global Cluster VIP 设置为 active global cluster 的 VIP。
- 当端口
2379未通过 load balancer 转发时,请正确设置 Active Global Cluster ETCD Endpoints。 - 将 Standby Cluster ETCD Endpoints 设置为 standby cluster etcd 地址。除非本地 etcd 服务通过不同的端点暴露,否则请使用默认值。
- 将 Active Global Cluster Token Secret 设置为
etcd-sync-active-cluster-token。 - 使用 Data Check Interval 的默认值。
- 除非您正在排障,否则请保持 Print detail logs 关闭。
在重新安装期间,系统会在 etcd-sync Deployment 启动之前先运行 etcd-sync-bootstrap Job。只有在该 Job 准备好 remote-etcd-ca、remote-etcd-issuer 和 remote-etcd-client 之后,发布才会继续。
验证 bootstrap Job 和运行时资源:
在继续之前,请等待 kubectl get lease -n cpaas-system etcd-sync-mirror -o jsonpath='{.spec.holderIdentity}' 返回非空值。
验证同步 Pod 已在 standby global cluster 上运行,并识别当前 leader:
如果具有 ownerReference 依赖的资源需要重新同步,请在 Start Sync update 出现后重建当前 leader Pod:
检查同步状态:
输出解读:
LOCAL ETCD missed keys:这些 key 存在于 primary global cluster 中,但在 standby 中缺失。重启当前etcd-syncleader Pod 后,通常可以解决该问题。LOCAL ETCD surplus keys:这些 key 存在于 standby global cluster 中,但在 primary 中不存在。在删除它们之前,请先与您的运维团队一起审查这些 key。