跳到主要内容

跨集群灾备

通过共享存储位置把还原点持续同步到备用集群,并在需要时把应用恢复到那里。

源集群 A 目标集群 B
┌────────────────────┐ ┌────────────────────┐
│ Snapshot 策略 │ │ Import 策略 │
│ (开启导出) │ │ (持续扫描拉取) │
└─────────┬──────────┘ └─────────▲──────────┘
│ 写入 + HMAC 指纹签名 │ 读取 + 校验指纹
▼ │
┌─────────────────────────────────────────────────┴──┐
│ 共享存储桶(两边指向同一个 BSL) │
│ │
│ 还原点 + 来源签名(fingerprint.sharedSecret) │
└────────────────────────────────────────────────────┘

两侧必须使用同一个 sharedSecret,否则 B 认不出 A 写的还原点

RPO ≈ A 的备份间隔 + B 的导入轮询间隔

前置条件​

  • 两个集群都已安装 SupKube,且都配置了指向同一个存储桶的存储位置。
  • 源集群的策略打开了导出开关,数据路径为 Data Mover 或文件系统。
  • 两个集群使用相同的指纹共享密钥。

建立跨集群信任​

跨集群导入通过 HMAC 指纹签名确认还原点来自可信集群。所有参与集群必须使用同一个 fingerprint.sharedSecret。

SECRET=$(openssl rand -base64 32)

在每个集群上用同一个值执行:

helm upgrade --install supkube supkube/supkube --devel \
--namespace supkube --create-namespace \
--set eula.accept=true \
--set auth.dex.publicURL=https://supkube-a.example.com \
--set "fingerprint.sharedSecret=$SECRET"
注意

fingerprint.sharedSecret 留空时,Chart 会在首次安装生成一个随机值并在后续升级中保持不变。这只适用于单集群信任:各集群各自生成的值互不相同,永远无法互相信任。

注册第二个集群​

跨集群恢复需要在控制台里注册目标集群。进入「系统设置」的「集群管理」标签,点「添加集群」,按向导三步完成:

  1. 基本信息:名称需符合 DNS-1123 规范,this-cluster 与 _mcm 为保留名;类型选主集群或次集群。
  2. 连接配置:上传目标集群的 kubeconfig 文件,上限 256 KiB;可指定上下文,留空使用默认上下文。
  3. 验证:显示探测到的 Kubernetes 版本与节点数;若未检测到 Velero 会给出提示。

kubeconfig 存为 supkube 命名空间下的 Kubernetes Secret,不会写入日志,也不会在浏览器里回显。

注册两个及以上集群后,侧边栏出现模式切换器,可以进入「多集群管理器」查看聚合视图。

Import 策略​

Import 策略运行在目标集群上,持续扫描共享存储位置并把新还原点拉进本集群。

左侧菜单「策略制定」,点「创建新策略」,动作类型选择「Import 策略」。

字段说明
源存储位置目标集群从哪个共享存储位置拉取
导入模式连续或定时
轮询间隔连续模式下的扫描周期,下限 30 秒
Cron 计划定时模式下的 5 字段表达式
源集群过滤存储桶被多集群写入时限定接受哪个来源,留空接受全部
指纹校验强制、仅警告、关闭三选一

三种指纹校验模式对未签名还原点的处理方式完全不同:

存储桶里发现一个还原点
│
▼
签名是否有效?
│
┌────────┴────────┐
有效 无效 / 无签名
│ │
▼ ▼
接受 ┌───────┴────────┬──────────────┐
▼ ▼ ▼
【强制】 【仅警告】 【关闭】
拒绝导入 接受但标记为 直接接受
「未验证」 不做任何校验
│ │ │
✅ 跨集群 ⚠ 仅排查时用 ⚠ 仅限单写入方
推荐

最坏恢复点目标(RPO)约等于源集群备份间隔加上导入轮询间隔,界面会实时估算并显示。

危险

跨集群场景请保持指纹校验为强制。仅警告模式会接受未签名的还原点并标记为未验证;关闭模式完全跳过校验,只有在存储桶只有本集群写入时才可接受。

恢复到另一个集群​

在还原点行尾点「恢复」,抽屉顶部的「目标集群」区块选择目标集群。选择 this-cluster 即原地恢复。

提交后目标集群的 Velero 会先从共享存储位置同步备份元数据,然后开始恢复。提交反馈会提示切换到该集群查看进度。

灾备演练建议​

定期把生产还原点恢复到备用集群的新建命名空间里,验证应用真的起得来。「可观测性」页的 DR 健康评分会把长期未验证的情况标记出来。

验证方法​

kubectl -n supkube get importpolicies
kubectl -n supkube get clusters.supkube.io
kubectl -n supkube get backups -l velero.io/storage-location=shared-bsl

在目标集群的「应用还原」页,来源过滤选「已导入」,应能看到源集群产生的还原点,并带有签名有效的标识与来源集群名。

相关文档​