升级 global 集群
本文档介绍如何升级运行在不可变基础设施上的 global 集群。升级会使用由 Cluster API provider 管理的新 Alauda OS 镜像替换节点;不会执行原地节点升级。
何时使用此路径
在以下情况下选择此升级路径:
global集群最初安装在不可变基础设施上。请参见 安装 global 集群。- 你的基础设施属于本文档所述的提供方之一:Huawei DCS 或 Huawei Cloud Stack。VMware vSphere 和
global集群的裸金属支持正在规划中。
对于传统 OS 的 global 集群,请改用 标准升级路径。
两阶段升级概述
与业务集群类似,不可变基础设施上的 global 集群采用两阶段升级。
- 阶段 1 — Distribution Version:对齐和无关扩展升级到目标 Distribution Version。该操作步骤与业务集群共用;有关阶段 1 的机制,请参见 升级集群。
- 阶段 2 — Kubernetes 和 OS 镜像:使用包含目标 Kubernetes 版本的新 Alauda OS 镜像替换节点。本文档重点介绍
global集群的阶段 2。
在开始阶段 2 之前,请验证每个业务集群都位于目标 Distribution Version 的兼容版本矩阵范围内。超出范围的业务集群必须先升级。
通用前提条件
global集群已完成阶段 1(Distribution Version 升级)。- 已对
global集群执行并验证 etcd 备份。 - 平台的 registry 中已提供新的 Alauda OS 镜像以及匹配的
KubeadmControlPlane和MachineDeployment版本。 - 已制定考虑到控制平面滚动替换的维护窗口计划。
- 对于跨越多个 Kubernetes 次版本的跨版本升级,已预先准备中间版本的 Core 镜像和 OS 镜像。请参见 跨版本升级准备。
操作步骤
安装完成后,管理 global 集群的 Cluster API controllers 运行在 global 集群自身上。在本操作步骤中的 kubectl 命令请使用 global kubeconfig。
步骤 1 — 更新 global 集群清单
更新 global 集群的 Cluster API manifests,以引用新的 Alauda OS 镜像和 Kubernetes 版本。需要更新的清单字段因提供方而异。
对于 DCS,请创建新的不可变基础设施模板,不要编辑已经被运行中的 machine 引用的模板。
更新控制平面资源:
- 为目标镜像创建新的
DCSMachineTemplate,并将spec.template.spec.vmTemplateName设置为与目标 Kubernetes 版本匹配的 Alauda OS template。 - 将保留的节点本地数据(包括
/var/cpaas)保留在DCSIpHostnamePool.spec.pool[].persistentDisk中。不要把保留磁盘移回DCSMachineTemplate。 - 将
KubeadmControlPlane.spec.version设置为目标 Kubernetes 版本。 - 将
KubeadmControlPlane.spec.machineTemplate.infrastructureRef.name指向新的DCSMachineTemplate。 - 当集群使用由池管理的持久磁盘时,保持
KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0。
更新工作节点资源:
- 为目标
vmTemplateName创建新的工作DCSMachineTemplate。 - 将每个
MachineDeployment.spec.template.spec.version设置为目标 Kubernetes 版本。 - 将每个
MachineDeployment.spec.template.spec.infrastructureRef.name指向新的工作DCSMachineTemplate。 - 当工作池使用由池管理的持久磁盘时,保持每个
MachineDeployment.spec.strategy.rollingUpdate.maxSurge: 0。
由池管理的持久磁盘在 IP 池上声明,而不是在 machine template 上:
使用 IP 池状态确认,在滚动替换期间,保留磁盘会从旧 VM 分离并附加到替换 VM。
步骤 2 — 应用更新后的清单
将更新后的清单应用到 global 集群。
Cluster API provider 会开始使用新镜像替换控制平面和工作节点。当设置 maxSurge: 0 时,在替换节点能够复用相同的固定标识、IP 地址或保留磁盘之前,每个旧节点都会先被排空并删除。
步骤 3 — 监控滚动替换
持续观察滚动替换,直到所有控制平面和工作节点都已被替换。
当每个 Machine 都报告新的 Kubernetes 版本和 Phase: Running,并且 KubeadmControlPlane 针对新版本报告 Ready: True 时,升级即完成。
验证
滚动替换完成后,验证升级后的 global 集群是否健康。
所有节点都必须报告新的 Kubernetes 版本,ClusterVersionShadow 必须反映目标 Distribution Version,并且核心平台 Pod 必须处于 Running 状态。
回滚注意事项
阶段 2 升级部分完成后的回滚因提供方而异。一般而言:
如果升级尚未替换任何控制平面节点,请将清单回退到之前的镜像并重新应用。如果控制平面节点已经被替换,请先从升级开始前创建的 etcd 备份进行恢复,然后再回退清单。
对于使用由池管理的持久磁盘的 DCS 集群,请在回滚前确认磁盘状态:
首先,在删除或重新创建 machine 之前检查 DCSIpHostnamePool.status.persistentDiskStatus。不要删除列在 DCSIpHostnamePool.spec.pool[].persistentDisk 中的保留 DCS volume。
在回退到之前的 machine template 时保持 maxSurge: 0,这样替换就会一次只进行一个节点。如果控制平面已经被替换且集群状态不一致,请先从已验证的 etcd 备份恢复,然后再重新应用之前的清单。
后续步骤
- 将业务集群升级到相同的 Distribution Version:参见 升级集群。
- 查看随新镜像一起提供的 machine configuration 更改:参见 Machine Configuration。