2. Velero 基础架构:组件架构与数据流
Velero 采用典型的 控制平面 + 数据平面 分离架构,由服务端、客户端、插件系统和备份存储后端四大部分组成。理解各组件职责及数据流转路径,是设计灾备准入策略的前提。
2.1 组件架构总览
下图展示了 Velero 在 Kubernetes 集群中的核心组件部署关系与交互路径:
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 备份数据流
一次完整的备份操作涉及以下数据流转路径:
- 用户发起:通过
velero backup create或创建 Backup CR 对象。 - 服务端调度:BackupController 检测到新的 Backup 资源,解析备份范围(命名空间、资源类型、标签选择器)。
- API 数据收集:服务端通过 Kubernetes API 读取目标资源的 YAML 描述(不包含卷数据),生成备份清单。
- 卷数据处理:对于 PVC,根据 VolumeSnapshotLocation 配置,调用卷快照插件创建快照;或通过节点代理(Restic/Kopia)执行文件级备份。
- 数据上传:备份清单(JSON/YAML)和卷数据(快照或文件块)上传至配置的 BackupStorageLocation。
- 状态更新:备份完成后,服务端更新 Backup 资源状态为
Completed,并记录元数据。
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)与数据平面(节点代理 + 插件)分离设计,使得准入策略可以分层实施。控制平面侧重操作审计与资源校验,数据平面侧重传输加密与存储安全。理解这一分层是后续设计灾备准入测试用例的基础。