Velero灾备准入故障诊断与架构恢复 - 第1节
1.1 Velero 是什么
Velero 是一个开源的 Kubernetes 集群灾备与迁移工具,由 VMware 发起并捐赠给 CNCF。它允许用户以声明式方式对集群中的资源(Pod、Deployment、Service、ConfigMap 等)以及持久化卷(PV)数据进行备份、恢复和迁移。Velero 运行在 Kubernetes 集群内部,通过自定义资源(CRD)和控制器模式实现灾备编排,是云原生生态中最成熟的灾备解决方案之一。
核心定位:Velero 不是传统意义上的“虚拟机快照”工具,而是面向 Kubernetes 原生资源与持久化数据的应用级灾备引擎。它不依赖底层基础设施快照 API,而是通过 Kubernetes API 与存储插件(Volume Snapshotter)协同工作。
1.2 核心功能
Velero 提供三大核心功能,覆盖灾备与迁移的完整生命周期:
| 功能 | 说明 | 典型场景 |
|---|---|---|
| 备份(Backup) | 将 Kubernetes 资源对象(YAML 清单)与持久化卷数据(PV 快照或文件级备份)打包上传至对象存储(如 S3、MinIO、Azure Blob)。 | 每日全量备份、变更前快照、合规归档 |
| 恢复(Restore) | 从备份存储中拉取资源清单与卷数据,在目标集群中重建应用状态。支持选择性恢复、命名空间映射、资源过滤。 | 集群故障恢复、误删除恢复、环境回滚 |
| 迁移(Migration) | 将备份数据恢复到另一个 Kubernetes 集群(不同版本、不同云厂商、不同网络环境),实现跨集群应用迁移。 | 集群升级、云迁移、多集群灾备切换 |
提示:备份与恢复是 Velero 的基础能力,迁移本质上是“备份 + 跨集群恢复”的组合操作。Velero 通过
--include-namespaces、--exclude-resources、--label-selector 等参数提供精细化的资源选择控制。
1.3 Velero 与 Kubernetes 原生资源的关系
Velero 深度集成 Kubernetes 的声明式 API 与自定义资源(CRD)体系。它本身不修改 Kubernetes 核心组件,而是通过以下方式与原生资源交互:
- CRD 定义灾备对象:Velero 在集群中安装一组 CRD,包括
Backup、Restore、Schedule、BackupStorageLocation、VolumeSnapshotLocation等。用户通过创建这些 CRD 实例来声明灾备策略。 - Kubernetes API 读取资源:备份时,Velero 通过 Kubernetes API 获取指定命名空间下的所有资源对象(如 Deployment、Service、ConfigMap、Secret 等),并将其序列化为 JSON/YAML 格式存储。
- VolumeSnapshot API 处理持久化数据:对于 PVC 数据,Velero 调用 Kubernetes VolumeSnapshot API(CSI 或 in-tree 存储插件)创建卷快照,或通过 Restic/Kopia 进行文件级备份。
- 控制器模式驱动流程:Velero 的控制器监听 Backup/Restore 等 CRD 的变化,协调执行备份上传、恢复重建等操作,完全遵循 Kubernetes 的 operator 模式。
1.4 备份与恢复的数据流
理解 Velero 的数据流有助于后续排查灾备准入场景中的故障。一次典型的备份操作包含以下步骤:
- 创建 Backup CR:用户通过
velero backup create命令或直接创建 Backup CRD 实例,指定备份范围(命名空间、标签、资源类型)。 - 控制器解析:Velero 控制器监听到 Backup 对象创建,开始执行备份流程。
- API 资源收集:控制器通过 Kubernetes API 查询并序列化指定范围内的所有资源对象(排除集群无关资源如 Node、PV 本身)。
- 卷数据处理:对于 PVC,Velero 根据配置选择 CSI 快照或 Restic/Kopia 文件级备份,生成卷快照或文件归档。
- 上传至对象存储:将资源清单(JSON/YAML)与卷数据打包上传至配置的 BackupStorageLocation(如 S3 Bucket)。
- 更新 Backup 状态:备份完成后,控制器更新 Backup CR 的状态为
Completed,并记录备份元数据。
1.5 关键概念速查表
以下表格汇总了 Velero 的核心概念及其与 Kubernetes 原生资源的对应关系,便于后续章节故障排查时快速参考:
| Velero 概念 | 对应 Kubernetes 资源类型 | 说明 |
|---|---|---|
| Backup | CRD: backups.velero.io |
定义一次备份操作的范围、存储位置、TTL 等参数 |
| Restore | CRD: restores.velero.io |
定义从哪个 Backup 恢复,以及恢复时的映射规则 |
| Schedule | CRD: schedules.velero.io |
定义定时备份策略,自动创建 Backup 对象 |
| BackupStorageLocation (BSL) | CRD: backupstoragelocations.velero.io |
配置对象存储的访问信息(Bucket、Region、凭证) |
| VolumeSnapshotLocation (VSL) | CRD: volumesnapshotlocations.velero.io |
配置卷快照的存储后端(云厂商快照 API 或 CSI) |
| VolumeSnapshot | Kubernetes 原生: volumesnapshots.snapshot.storage.k8s.io |
Velero 通过此资源触发 CSI 驱动创建卷快照 |