2. Velero 基础架构:组件架构与数据流

Velero 采用典型的 控制平面 + 数据平面 分离架构,由服务端、客户端、插件系统和备份存储后端四大部分组成。理解各组件职责及数据流转路径,是设计灾备准入策略的前提。

2.1 组件架构总览

下图展示了 Velero 在 Kubernetes 集群中的核心组件部署关系与交互路径:

Velero 组件架构总览 Velero 组件架构总览 Kubernetes 集群 控制平面 velero 服务端 Pod (Deployment / 控制器) CRD 资源 Backup / Restore / Schedule BackupLocation / VolumeSnapshotLocation 数据平面 节点代理 (DaemonSet) Restic / Kopia 数据移动器 插件容器 CSI / 存储提供商 / 自定义 (InitContainer / Sidecar) velero CLI (客户端) kubectl 插件 / API 调用 备份存储后端 S3 / Azure Blob / GCS / MinIO API 请求 调度 数据上传/下载 说明: • 服务端控制器监听 CRD 变化,驱动备份/恢复工作流。 • 数据平面通过 DaemonSet 在每个节点上运行数据移动器,负责卷快照与文件级备份。 • 插件系统扩展了 Velero 对不同存储后端和卷类型的支持。

2.2 组件详解

2.2.1 服务端 (Server)

Velero 服务端以 Deployment 形式运行在集群中,是备份/恢复工作流的控制中枢。它通过监听自定义资源(CRD)的变化来驱动状态机。

  • 核心控制器:BackupController、RestoreController、ScheduleController、DownloadRequestController。
  • CRD 资源:Backup、Restore、Schedule、BackupStorageLocation、VolumeSnapshotLocation、DeleteBackupRequest 等。
  • 准入机制:支持 Webhook 验证,可在备份/恢复操作前执行自定义策略检查。

2.2.2 客户端 (CLI)

Velero 客户端是一个命令行工具,同时也是 kubectl 插件。用户通过客户端向服务端 API 提交备份/恢复请求。

命令 功能 典型参数
velero backup create 创建一次性备份 --include-namespaces, --exclude-resources
velero restore create 从备份恢复资源 --from-backup, --namespace-mappings
velero schedule create 创建定时备份计划 --schedule (cron 表达式)
velero backup-location set 配置备份存储后端 --provider, --bucket, --config

2.2.3 插件系统 (Plugins)

插件是 Velero 架构中最重要的扩展点,分为以下三类:

  • 存储插件 (Object Store Plugin):对接不同对象存储后端,实现数据上传/下载。官方支持 AWS S3、Azure Blob、GCS,社区支持 MinIO、Ceph RGW 等。
  • 卷快照插件 (Volume Snapshotter Plugin):对接 CSI 驱动或云厂商快照 API,实现持久卷的瞬时快照。例如 velero-plugin-for-csi、velero-plugin-for-aws-ebs。
  • 自定义插件:用户可基于 Velero 插件接口开发自定义动作,如备份前/后执行 Hook、资源过滤、数据加密等。
最佳实践: 在生产环境中,建议将存储插件和卷快照插件以 InitContainer 形式注入到 Velero 服务端 Pod 中,确保插件版本与服务端版本兼容。

2.3 数据流与备份存储后端

2.3.1 备份数据流

一次完整的备份操作涉及以下数据流转路径:

  1. 用户发起:通过 velero backup create 或创建 Backup CR 对象。
  2. 服务端调度:BackupController 检测到新的 Backup 资源,解析备份范围(命名空间、资源类型、标签选择器)。
  3. API 数据收集:服务端通过 Kubernetes API 读取目标资源的 YAML 描述(不包含卷数据),生成备份清单。
  4. 卷数据处理:对于 PVC,根据 VolumeSnapshotLocation 配置,调用卷快照插件创建快照;或通过节点代理(Restic/Kopia)执行文件级备份。
  5. 数据上传:备份清单(JSON/YAML)和卷数据(快照或文件块)上传至配置的 BackupStorageLocation。
  6. 状态更新:备份完成后,服务端更新 Backup 资源状态为 Completed,并记录元数据。
Velero 备份数据流 备份数据流 用户 / CLI velero backup create 服务端控制器 BackupController Kubernetes API 读取资源清单 卷快照/文件级 CSI / Restic 备份存储后端 S3 / MinIO / GCS 关键路径: ① 用户请求 → ② 服务端解析 Backup CR → ③ 通过 K8s API 收集资源清单 → ④ 处理卷数据 → ⑤ 清单+卷数据上传至存储后端。 备份清单与卷数据可存储在不同位置(通过 BackupStorageLocation 和 VolumeSnapshotLocation 分别配置)。

2.3.2 备份存储后端配置

Velero 使用 BackupStorageLocation (BSL) 和 VolumeSnapshotLocation (VSL) 两种资源来定义存储目标:

资源类型 存储内容 典型 Provider 配置示例
BackupStorageLocation 备份清单(JSON/YAML)、日志、Restic 文件块 aws, azure, gcp, minio --provider aws --bucket my-backup-bucket --region us-east-1
VolumeSnapshotLocation 云厂商卷快照(CSI 快照或原生快照) aws-ebs, csi, gce-pd --provider aws-ebs --config region=us-east-1
注意: 如果只配置了 BackupStorageLocation 而未配置 VolumeSnapshotLocation,Velero 将无法对 PVC 创建卷快照,但会尝试通过 Restic/Kopia 进行文件级备份。对于有状态应用,建议同时配置两种存储位置。

2.4 组件交互与准入控制点

在灾备准入架构中,以下组件交互点可作为策略注入位置:

  • CLI → API Server:通过 RBAC 和审计日志控制谁可以发起备份。
  • Backup CR 创建:通过 Admission Webhook 校验备份范围、目标存储、加密要求。
  • 数据上传前:在插件层实现数据加密、压缩、校验和。
  • 存储后端访问:通过 IAM/密钥管理限制 Velero 服务端对存储桶的写入权限。
架构要点总结: Velero 的控制平面(服务端 + CRD)与数据平面(节点代理 + 插件)分离设计,使得准入策略可以分层实施。控制平面侧重操作审计与资源校验,数据平面侧重传输加密与存储安全。理解这一分层是后续设计灾备准入测试用例的基础。