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 模式。
Velero 与 Kubernetes 原生资源关系架构 Kubernetes API Server Velero 控制器 CRD: Backup / Restore / Schedule 对象存储 (S3/MinIO) VolumeSnapshot API Velero 通过 CRD 声明灾备策略,控制器驱动执行,最终将资源清单存入对象存储,卷数据通过 VolumeSnapshot API 处理

1.4 备份与恢复的数据流

理解 Velero 的数据流有助于后续排查灾备准入场景中的故障。一次典型的备份操作包含以下步骤:

  1. 创建 Backup CR:用户通过 velero backup create 命令或直接创建 Backup CRD 实例,指定备份范围(命名空间、标签、资源类型)。
  2. 控制器解析:Velero 控制器监听到 Backup 对象创建,开始执行备份流程。
  3. API 资源收集:控制器通过 Kubernetes API 查询并序列化指定范围内的所有资源对象(排除集群无关资源如 Node、PV 本身)。
  4. 卷数据处理:对于 PVC,Velero 根据配置选择 CSI 快照或 Restic/Kopia 文件级备份,生成卷快照或文件归档。
  5. 上传至对象存储:将资源清单(JSON/YAML)与卷数据打包上传至配置的 BackupStorageLocation(如 S3 Bucket)。
  6. 更新 Backup 状态:备份完成后,控制器更新 Backup CR 的状态为 Completed,并记录备份元数据。
Velero 备份数据流 1. 创建 Backup CR 2. 控制器监听 3. API 资源收集 4. 卷数据处理 5. 上传对象存储 6. 更新状态 整个流程由 Velero 控制器驱动,所有中间状态记录在 Backup CR 的 status 字段中

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 驱动创建卷快照