2. Velero 基础架构:组件、工作流程与 API 交互原理
Velero 是专为 Kubernetes 设计的开源备份与迁移工具,其核心架构围绕 Server、Plugin 和 CLI 三大组件构建。理解这三者的职责划分以及它们与 Kubernetes API 的交互方式,是掌握增量备份与灾备回滚的基础。
2.1 三大核心组件
| 组件 | 部署形态 | 核心职责 | 关键说明 |
|---|---|---|---|
| Server | Kubernetes Deployment | 编排备份/恢复任务、管理调度、维护备份对象状态 | 运行在集群内,通过 CRD 与 API Server 交互 |
| Plugin | Sidecar / 独立二进制 | 对接存储后端(S3/GCS/Azure)、扩展备份对象类型 | 支持 CSI、Restic、自定义 Provider |
| CLI | 客户端二进制 | 用户操作入口:创建备份、触发恢复、查看状态 | 通过 API Server 间接控制 Velero Server |
架构要点: Velero Server 本身不直接读写存储后端,所有数据平面操作(上传快照、下载备份文件)均委托给 Plugin 完成。这种设计使得存储后端切换时无需重建 Server。
2.2 组件交互工作流程
一次完整的备份操作涉及 CLI、API Server、Velero Server 和 Plugin 四个角色的协作:
- 用户发起:通过
velero backup createCLI 命令指定备份范围(命名空间、标签选择器等)。 - API 写入:CLI 将请求转换为
BackupCRD 对象,通过 Kubernetes API 写入集群。 - Controller 监听:Velero Server 中的 Backup Controller Watch 到新
Backup对象,进入协调循环。 - 数据收集:Server 调用 Kubernetes API 获取目标资源清单(Deployment、PVC、ConfigMap 等)。
- 快照委托:对于 PVC 卷,Server 调用 Volume Snapshot Plugin 创建 CSI 快照;对于文件系统备份,调用 Restic Plugin 读取数据。
- 上传存储:Plugin 将备份数据(资源清单 JSON + 卷快照)上传至对象存储(S3/MinIO/GCS)。
- 状态更新:Server 更新
Backup对象状态为Completed,并记录备份元数据。
关键路径: 步骤 4 和步骤 5 是性能瓶颈所在。增量备份的核心优化就在于步骤 5 中仅传输变化的数据块,而非全量卷数据。
2.3 与 Kubernetes API 的交互原理
Velero 与 Kubernetes API 的交互分为 控制面 和 数据面 两个层面:
2.3.1 控制面交互(CRD + Watch)
- 自定义资源定义:Velero 注册了
Backup、Restore、Schedule、BackupStorageLocation、VolumeSnapshotLocation等 CRD。 - 声明式协调:Velero Server 通过 Informer 监听这些 CRD 的变化,将用户声明(Spec)转换为实际备份/恢复操作。
- 状态持久化:操作结果写入 CRD 的 Status 字段,CLI 和 UI 通过读取 Status 获取进度。
2.3.2 数据面交互(API 读取 + 卷操作)
- 资源枚举:备份时,Server 使用
List/Get接口拉取目标资源(支持--include-namespaces和--selector过滤)。 - 卷快照:通过 CSI 或 VolumeSnapshot API 创建快照,快照句柄由 Plugin 传递给存储后端。
- 恢复时重建:恢复操作通过
Create接口重建资源,并依赖 Velero 的restore-hook机制进行初始化。
权限注意: Velero Server 需要 ClusterRole 级别的权限(读取所有资源、创建 VolumeSnapshot、管理 CRD)。在生产环境中应使用最小权限原则,通过 RBAC 限制其作用范围。
2.4 架构总览图
下图展示了 Velero 各组件的部署位置、通信路径以及数据流向:
2.5 备份工作流程时序图
以下时序图聚焦于一次备份操作中各组件的调用顺序与数据流向:
2.6 关键设计要点
- 无状态 Server:Velero Server 不存储任何备份数据,所有状态通过 CRD 持久化在 etcd 中,备份数据由 Plugin 写入对象存储。这使得 Server 可以随时重启或扩缩容。
- Plugin 热插拔:备份/恢复操作通过 Plugin 接口抽象,社区已提供 AWS/GCP/Azure/CSI/Restic 等官方 Plugin,用户也可实现自定义 Plugin 对接私有存储。
- API 兼容性:Velero 使用 Kubernetes 标准 API 进行资源发现和操作,因此兼容所有 CNCF 认证的 Kubernetes 发行版(包括 OpenShift、Rancher、K3s 等)。
- 增量备份基础:Restic Plugin 支持文件级别的增量备份,通过跟踪文件 inode 和修改时间,仅上传变化的数据块。CSI Plugin 则依赖存储后端的快照差异能力。
生产建议: 在部署 Velero 时,务必为 BackupStorageLocation 和 VolumeSnapshotLocation 配置独立的存储桶。前者存放资源清单和 Restic 数据,后者存放 CSI 卷快照。分离存储可以避免单一存储故障导致备份完全不可用。