Velero 与数据路径
SupKube 的数据面由 Velero 承担,四种数据路径决定卷数据怎么被抓取、能不能跨集群恢复。
前置条件
- 已完成安装,参见 在线安装。
- 了解集群里各 StorageClass 的快照能力。
捆绑还是自带 Velero
Chart 默认捆绑 Velero 一起安装,目的是让首次安装一条命令完成。
| 场景 | 配置 |
|---|---|
| 全新集群 | velero.enabled=true,Velero 落在 Release 命名空间 |
| 已有手工安装的 Velero | velero.enabled=false 加 config.veleroNamespace=velero |
捆绑模式下 Velero 与 SupKube 在同一个命名空间(默认 supkube),因为 Velero 子 Chart 会忽略命名空间覆盖参数。config.veleroNamespace 留空时后端会自动解析到正确位置,不要凭习惯填 velero。
四种数据路径
| 数据路径 | 卷数据去向 | 能否跨集群恢复 | 依赖 |
|---|---|---|---|
| CSI 快照 | 留在集群存储层,写时复制 | 否,除非快照本身能被目标集群访问 | CSI 驱动支持快照 |
| Data Mover | CSI 快照经 Kopia 搬到对象存储 | 是 | node-agent 与 CSI 快照能力 |
| 文件系统 | Restic 或 Kopia 直接读取卷文件 | 是 | node-agent |
| 仅元数据 | 只备份资源清单,不动卷数据 | 是 | 无 |
选择建议:
- 追求恢复速度、只做集群内回滚,用 CSI 快照。
- 需要异地或跨集群恢复,且存储支持快照,用 Data Mover。
- 存储不支持 CSI 快照,用 文件系统。
- 应用的数据可以自行重建(例如纯缓存),用 仅元数据。
node-agent 是硬前置
Data Mover 与文件系统两条路径都依赖 node-agent DaemonSet。Chart 默认 velero.deployNodeAgent=true。
kubectl -n supkube get daemonset velero-node-agent
kubectl -n supkube get pods -l name=node-agent -o wide
每个可调度节点上都应当有一个 Ready 的 node-agent。
一致性:最需要理解的一点
Velero 的快照与文件级读取拿到的都是崩溃一致(Crash-consistent)的磁盘镜像,不是应用一致(Application-consistent)的。
运行中的数据库正在做压实与写入,数据文件、元数据、事务日志在磁盘上本身就不同步。字节还原得回来不等于数据库起得来。
为运行中的数据库配置 Velero 的备份前后 hook,在备份瞬间让数据库静默。SupKube 的备份就绪性检查会提示这个风险,但绝不会替您修改工作负载。
关键 Velero 参数
| 参数 | 默认值 | 说明 |
|---|---|---|
velero.configuration.features | EnableCSI | 打开 CSI 能力,关闭后 CSI 快照不可用 |
velero.configuration.backupSyncPeriod | 60s | 从对象存储同步备份元数据的周期 |
velero.configuration.fsBackupTimeout | 4h | 文件系统备份的超时时间,大卷需要上调 |
velero.deployNodeAgent | true | 是否部署 node-agent |
velero.snapshotsEnabled | true | 是否启用卷快照 |
velero.installCRDs | true | 是否安装 Velero 的自定义资源定义 |
Chart 默认加载两个插件:velero-plugin-for-aws:v1.14.1 与 velero-plugin-for-microsoft-azure:v1.14.1。
CSI 兼容性检查
策略编辑页会对所选命名空间做 CSI 兼容性检查,列出不支持快照的 PVC。出现阻断时,要么把数据路径切到文件系统,要么把这些 PVC 迁移到支持快照的 StorageClass。
kubectl get volumesnapshotclasses
kubectl get pvc -n my-app
kubectl get storageclass
验证方法
kubectl -n supkube get pods -l component=velero
kubectl -n supkube get backupstoragelocations
kubectl -n supkube exec deploy/supkube-backend -- \
wget -qO- http://127.0.0.1:8080/api/v1/velero-health
自检接口返回的阻断项为空即数据面健康。界面上的等价判据是「系统概览」页顶部没有 Velero 相关的红色或黄色横幅。