Global 集群灾难恢复
本页面是运行在 Immutable Infrastructure 上的 global 集群的灾难恢复入口。部署时的灾难恢复配置属于 global 集群安装操作步骤的一部分。
从 ACP 4.5 开始, etcd Synchronizer 更名为 Global Cluster Disaster Recovery。在更名之前发布的插件包上传后,平台中仍会显示 etcd Synchronizer。
部署操作步骤
创建主集群和备用 global 集群时,请参阅安装指南中的可选灾难恢复部署。
该部署操作步骤是安装时 DR 配置的权威来源,包括:
- 每一侧均从各自的引导节点安装:每个 provider 上总共需要两个引导节点。
- 主集群和备用集群使用相同的 Kubernetes API server 加密 provider 配置。
KubeadmControlPlaneetcd server 证书 SAN 列表包含主集群和备用集群控制平面 VIP,以及 Platform Access Address。此列表与平台的console.certSAN 列表分开。- Huawei DCS 部署从
DCSCluster.spec.encryptionProviderConfigRef引用共享的加密 provider Secret。该 Secret 必须存在于每个最终的global集群中,而不能只存在于安装该 Secret 的引导集群中。 - VMware vSphere 部署通过
KubeadmControlPlane.spec.kubeadmConfigSpec.files写入相同的/etc/kubernetes/encryption-provider.conf文件。 - Huawei Cloud Stack 部署通过
KubeadmControlPlane.spec.kubeadmConfigSpec.files写入相同的/etc/kubernetes/encryption-provider.conf文件。 - 裸金属部署从
BaremetalCluster.spec.encryptionProviderConfigRef引用共享的加密 provider Secret,并在两侧使用相同的 Kubernetes ServiceAccount 签名密钥。 - Huawei DCS、VMware vSphere 和 Huawei Cloud Stack 在导入 installer 之前创建
dcs-import-extra-resourcesConfigMap,以便安装过程导入所引用的凭证 Secret,以及适用情况下的 provider 专属基础设施资源。为兼容历史 installer,名称保留dcs前缀。 - 裸金属部署在导入 installer 之前创建
dcs-import-extra-resourcesConfigMap,以便安装过程保留交接所需的持久化裸金属和 elemental 所有者资源。它不会导入 Global plan Secret 或 kubeadm 引导数据 Secret;只有在所有目标 GlobalMachineInventory对象都存在后,全新交接才会创建初始 Global plan Secret。 - 两次安装均成功后,备用集群安装
global-etcd-sync,其连接值指向当前活动的主集群。
网络要求
使用 DNS 名称的稳定 Platform Access Address 是灾难恢复的前提条件。正常运行期间,该域名仅解析到主 global 集群 VIP。备用 global 集群使用该域名访问主 global 集群上的平台服务。
在安装任一集群之前,完成以下两项网络准备:
- 配置每个集群的负载均衡器,将其 VIP 上所需的 TCP 端口转发到该 VIP 后面的控制平面节点。仅当用户通过 HTTP 访问平台时,才配置端口
80。 - 在主集群网络与备用集群网络之间双向放行所需的 TCP 端口。将规则应用于防火墙、安全组、路由器 ACL 以及其他站点间网络控制措施。
网络策略必须是双向的,因为故障转移后集群角色会反转。故障转移前,有效的服务流量通常从备用集群流向主集群。故障转移后,原主集群成为新的备用集群,必须通过相同的端口访问新的主集群。此要求并不意味着 etcd 复制是双向的: etcd Synchronizer 仅在当前备用集群上运行,并将同步数据写入其本地 etcd。
可观测性部署位置
灾难恢复仅复制 global 集群的 etcd 数据,不会复制 cpaas-system 等命名空间。因此,监控和日志数据永远不会复制到备用集群。请在安装任一集群之前规划可观测性部署位置。
- 每个
global集群都会收集、存储和查询自身的指标与日志。主集群和备用集群不会使用彼此的监控或日志存储,因此故障转移后,备用集群可以立即监控自身。 - 不得将业务集群的监控和日志数据写入任一
global集群。请在专用业务集群中汇总业务集群的指标和日志,并在该集群中运行 VictoriaMetrics Center 和日志存储,然后将每个业务集群的采集智能体指向该集群。 - 如果某个网络区域无法访问该汇总集群,请为该区域配置自己的汇总集群,而不要改用
global集群。 - 存储在
global集群中的业务集群可观测性数据,在该集群角色变更时将无法访问,因为这些数据不会被复制,另一个global集群也无法提供这些数据。
有关同步和排除的范围,请参阅 Global Cluster Disaster Recovery。
运维范围
安装主集群和备用集群后,请将 DR 作为独立的生命周期流程进行运维。保持安装清单与安装指南一致,然后使用经批准的运维手册执行以下任务:
- 验证 Global Cluster Disaster Recovery(以前称为 etcd Synchronizer)的运行状况和复制堆积量。
- 验证备用集群能够解密在主集群上创建的 Kubernetes Secrets。
- 在计划故障转移之前,验证主集群和备用集群的控制平面 VIP 以及平台访问路径。
- 在计划故障转移或故障恢复之前,验证两个集群网络之间所需的端口均已双向放行。切换后,原备用集群将成为新的主集群,原主集群将成为新的备用集群,因此服务流量方向会反转。
- 按照经批准的运维操作步骤执行故障转移和故障恢复。
- 故障转移后协调特定于提供商的资源。
灾难恢复切换和支持 DR 的 global 集群升级都会卸载 Global Cluster Disaster Recovery(以前称为 etcd Synchronizer)。卸载前,请确认备用 global 集群数据与主集群一致。在 Immutable Infrastructure 上,业务集群节点由 Cluster API Machine 对象提供支持,因此,不一致同步后若错误解析 owner-reference,可能会删除这些 Machine 对象并销毁底层虚拟机。如果一致性检查报告存在缺失或多余的键,请勿卸载插件;请先解决不一致问题或联系技术支持。有关详细的切换和升级操作步骤,请参阅 Global Cluster Disaster Recovery 和 Upgrade the global cluster。
故障转移
以下序列与提供商无关:它由平台域和 etcd-sync 生命周期驱动,而不是由任何提供商 API 驱动。提供商特定的同步源和故障转移后检查请参阅 Provider Notes;对于 Bare Metal,请参阅 Bare Metal DR Model 部分。
- 隔离主集群,使其无法写入业务资源。
- 等待监控器显示不存在差异,然后从旧备用集群卸载
etcd-sync。移除其ModuleInfo才会卸载插件;仅将 Deployments 扩缩容到零并不足够(请参阅下面的警告)。对于 Bare Metal,接着在旧备用集群(该集群将成为活动集群)的 Bare Metal 提供商ModuleInfo中设置elemental.systemAgent.sharedAuthReadOnly: false,并等待elemental-operatorDeployment 不再包含--system-agent-shared-auth-read-only参数(使用kubectl -n cpaas-system get deploy elemental-operator -o yaml | grep -- --system-agent-shared-auth-read-only检查)。在此之前,新的工作节点无法获取其计划。 - 将平台域切换到备用集群的控制平面入口。
- 验证备用集群 API 和平台端点。
- 确认业务主机通过平台域重新连接,并能够更新计划反馈。
- 在 Bare Metal 上,先在新备用集群的提供商
ModuleInfo中设置elemental.systemAgent.sharedAuthReadOnly: true,并使用相同的命令确认elemental-operatorDeployment 包含--system-agent-shared-auth-read-only参数。然后,在新备用集群(已隔离的原主集群)上安装etcd-sync插件,并使用反向的活动/备用值;对于 Bare Metal,还要使用相同的baremetal-dr-rulesConfigMap。请注意,活动集群令牌现在必须来自新的活动集群,并且推送插件包时使用的是平台域当前指向的集群的 Registry 凭证。
启动时,etcd-sync 会解析平台域,并检查该域所指向的集群是否未安装 etcd-sync。这可以防止镜像同时在两端运行。如果步骤 2 仅将 Deployments 扩缩容到零,ModuleInfo 仍然存在,新备用集群将拒绝启动,并显示:
尽管提示信息如此表述,这表示安全检查按预期运行,而不是缺陷。删除新活动集群上的 ModuleInfo 后,新备用集群即可正常启动。
请保持已隔离的集群与环境隔离,直到单独规划故障恢复。切勿让两个提供商同时针对同一业务清单运行。
切换后,在新活动集群上验证每个业务 Cluster 和 Machine 对象均完好无损——在 Immutable Infrastructure 上,这些对象支持真实机器,因此切换过程中丢失的资源会导致节点被删除。
裸金属 DR 模型
本节介绍适用于 ACP 4.4.0 及更高版本的 Bare Metal DR 操作步骤。此步骤适用于全新安装的主集群/备用集群;使用可选灾难恢复部署创建两个集群。
Bare Metal 会将物理主机及其计划 Secret 保存在 MachineInventory 对象中。因此,DR 会将 Global 主机与业务主机分开处理。
端点和身份
Global 行仅适用于 DR 以及下文所述切换后的 Global 注册。业务行使用标准 Bare Metal 注册路径;有关业务集群路径各阶段的网络要求(包括 DNS、NTP、Registry 和集群内部流量),请参阅网络连接。
在两端的 Bare Metal 提供商上设置 elemental.systemAgent.splitAuthEnabled: true。活动 Global 使用 sharedAuthReadOnly: false;备用集群接收数据时使用 sharedAuthReadOnly: true。在安装期间,在两端的引导 AppRelease 中设置这些值;之后还要按照在 global 集群上安装 Cluster API 提供商所述,在每个最终 global 集群的提供商 ModuleInfo 中再次设置这些值。保留标准的 ServiceAccount、Secret、Role 和 RoleBinding 名称。切勿授予对整个命名空间的 Secret 访问权限。
切换后,每个 Global 注册都必须使用本地 API 服务器:
业务注册使用平台域。切换后不要重复使用引导用的 Global ISO;请在活动 Global 上创建新的 Global 注册和 SeedImage。只有当业务 ISO 的注册 URL 使用平台域时,才可以重复使用该 ISO。
同步规则
etcd-sync 在备用集群上运行,并读取主集群。支持 DR 的 v4.4 chart 已提供标准 Bare Metal 前缀和 Global 资源排除规则,并支持通过带标签的 ConfigMap 添加额外规则。自定义规则源必须存在于两个 Global 集群上,以便角色切换后仍可使用。
创建 baremetal-dr-rules,并将权重设为 100:
内置 chart 规则已涵盖 Bare Metal 资源前缀、Global 清单/注册筛选、SeedImage、Global 本地 system-agent bundle、监控器以及本地 Registry 凭证。不要在此 ConfigMap 中重复添加这些条目。开始同步前,已安装的 chart 必须包含这些内置规则。
将计划占位符替换为实际值:
- 从
MachineInventory.status.plan.secretRef.name读取计划名称。 - 为两端的每个 Global 计划 Secret 添加一行。
- 每当添加或替换 Global 计划 Secret 时,都要更新两端的 ConfigMap。
首次同步前,要求规则源具有注解 etcd-sync.cpaas.io/status: accepted,并确认 etcd-sync-rule-snapshot 包含该源:
被拒绝的源不会生效。允许镜像写入之前,先修复该问题。
插件 chart 管理标准的 CAPI、Bare Metal、Elemental、Global 资源、system-agent、SeedImage、Registry 和监控器规则。此 ConfigMap 仅添加运行时的 Global 计划 Secret 键;渲染 chart 时无法预先知道这些键。
dcs-import-extra-resources 是安装时的切换输入。它必须包含持久的提供商资源;对于 DCS 和 Bare Metal,还必须包含被引用的加密 Secret,但它不是 etcd 同步规则源。
启动并验证
- 仅在当前备用集群上安装
global-etcd-sync。 - 将
active_cluster_vip设置为主集群 VIP。 - 将
active_cluster_token_secret_ref设置为备用集群本地 Secret,其中包含主集群令牌。 - 等待 AppRelease 和两个 Deployment 均进入 Ready 状态。
- 运行监控器检查,并要求遗漏键和多余键均为零。
- 将规则快照和监控结果纳入验收门槛;仅凭 AppRelease 状态不足以完成验收。
验收
故障切换后,验证以下事项:
- 业务
Cluster和Machine对象仍处于健康状态。 - 每个
BaremetalMachine仍引用预期的MachineInventory。 - 业务计划到达
Applied,且其反馈已更新。 - 工作节点扩容会创建计划并更新共享 Role。
- 工作节点缩容会完成清理计划并释放清单。
- URL 使用平台域的业务 ISO 可以注册新主机。
- Global 主机仍使用本地 VIP、本地令牌和本地计划 Secret。
故障排查
供应商说明
按照可选灾难恢复部署中的 DCS 步骤操作。DCS 安装必须在两端保留相同的加密 provider Secret 和 DCSCluster.spec.encryptionProviderConfigRef。对于 DCS,不要将加密 provider 文件添加到 KubeadmControlPlane.spec.kubeadmConfigSpec.files。在两端创建 DCS dcs-import-extra-resources ConfigMap,以便安装程序导入 DCSCluster.spec.credentialSecretRef.name 引用的 Secret 和 DCSCluster.spec.encryptionProviderConfigRef.name 引用的 Secret。DCS provider 资源由内置流程迁移,但该流程不会复制任一 Secret。
每个最终的 global 集群中都必须存在加密 provider Secret。如果它仅保留在引导集群中,安装仍会完成,且配对状态看起来正常,但引导集群消失后,后续每次控制平面计算机创建都会失败——新的 Machine 会停留在 Provisioning 中,而 provider 会记录 get encryption provider config secret ... not found。在停用任一引导集群之前,验证两端都存在该 Secret。
对于计划内切换,运行故障切换序列。baremetal-dr-rules ConfigMap 和注册检查仅适用于 Bare Metal;其他每个步骤均按原样适用于 DCS。切换后,在新的活动集群上验证业务 Cluster、Machine 和 DCSMachine 对象均完好无损,且没有虚拟机被删除:在故障切换期间,安装指南命名约定中的 global- 名称前缀用于标识由 global 配对两端拥有的资源,因此两端的每个 DCS 资源都必须带有该前缀。另外,确认当前活动端存在 DCS 凭证 Secret 和加密 provider Secret。
另请参阅
有关传统操作系统 global 集群的灾难恢复,请参阅 Global Cluster Disaster Recovery。
有关在 Immutable Infrastructure 上安装和升级 global 集群的信息,请参阅: