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