2. Velero 架构总览:核心组件、数据流与插件机制

Velero 是云原生环境下最主流的开源灾备工具,其架构设计围绕“无侵入、可扩展、声明式”三大原则展开。理解 Velero 的核心组件、数据流与插件机制,是后续构建灾备准入策略与审计日志体系的基础。

2.1 核心组件:Server、CLI 与 Restic

Velero 由三个主要组件构成,各自承担不同的职责:

组件 部署位置 核心职责 关键说明
Velero Server Kubernetes 集群内(Deployment) 编排备份/恢复任务、管理调度、维护备份对象元数据 通过 CRD(Backup、Restore、Schedule)与 API Server 交互
Velero CLI 运维人员本地或 CI/CD 环境 触发备份/恢复命令、查看状态、管理插件 通过 kubeconfig 与集群内 Velero Server 通信
Restic Daemon Kubernetes 集群内(DaemonSet) 执行文件系统级别的卷备份(Volume Backup) 支持持久卷(PVC)的快照替代方案,适用于非云存储环境
架构要点: Velero Server 是控制中枢,CLI 是操作入口,Restic 是数据搬运工。三者通过 Kubernetes API 和 gRPC 协议协同工作。

2.2 Velero 组件交互架构图

下图展示了 Velero 三大核心组件与 Kubernetes 集群、存储后端的交互关系:

Velero 核心组件交互架构 Velero 核心组件交互架构 Kubernetes 集群 Velero Server Deployment Restic Daemon DaemonSet Kubernetes API CRD / 资源对象 存储后端 S3 / Azure Blob / GCS 或本地存储 Velero CLI 本地 / CI/CD 图例说明 Velero Server:任务编排与调度 Restic Daemon:文件级卷备份 Kubernetes API:CRD 资源管理 存储后端:备份数据持久化 Velero CLI:用户操作入口

2.3 数据流与备份恢复流程

Velero 的备份与恢复流程遵循“先元数据、后数据”的原则,确保一致性。以下是标准备份流程的步骤分解:

  1. 触发备份请求: 用户通过 CLI 或 Schedule CRD 发起 Backup 请求,Velero Server 创建 Backup CR 对象。
  2. 查询资源清单: Velero Server 根据备份范围(Namespace、Label Selector 等)查询 Kubernetes API,获取待备份的资源列表(Deployment、ConfigMap、PVC 等)。
  3. 备份元数据: 将资源清单序列化为 JSON 格式,上传至存储后端(如 S3)的 backups/<name>/resources.json 路径。
  4. 备份卷数据: 对于 PVC,Velero 优先使用云存储快照(VolumeSnapshotter 插件);若不可用,则调用 Restic Daemon 执行文件级备份。
  5. 记录备份状态: 更新 Backup CR 状态为 Completed,并记录备份日志与校验和。
关键数据流: 元数据与卷数据分离存储。元数据用于恢复时重建资源定义,卷数据用于恢复实际文件内容。这种设计使得恢复时可以先重建空 PVC,再填充数据,避免资源冲突。

2.4 备份与恢复流程对比

阶段 备份流程 恢复流程
触发 Backup CR 创建 Restore CR 创建
元数据处理 查询 API → 序列化 → 上传存储 从存储下载 → 反序列化 → 创建资源
卷数据处理 快照或 Restic 文件级备份 从快照恢复或 Restic 文件级恢复
冲突处理 无冲突(只读操作) 支持跳过、重命名、覆盖等策略
状态记录 Backup CR → Completed Restore CR → Completed

2.5 插件机制:扩展 Velero 的边界

Velero 的插件机制是其可扩展性的核心。插件以 gRPC 服务的形式运行,Velero Server 在备份/恢复过程中动态调用。插件分为三大类:

  • Volume Snapshotter(卷快照插件): 对接云存储快照 API(如 AWS EBS、Azure Disk、GCE PD),实现高效卷备份。
  • Object Store(对象存储插件): 对接不同存储后端(AWS S3、Azure Blob、GCS、MinIO 等),负责元数据与卷数据的读写。
  • Backup Item Action / Restore Item Action(资源操作插件): 在备份/恢复过程中对特定资源执行自定义操作(如加密、脱敏、转换)。
安全提示: 插件运行在 Velero Server Pod 内,拥有与 Server 相同的权限。在生产环境中,必须对插件的来源进行校验,避免加载恶意插件导致数据泄露或集群破坏。

2.6 插件调用流程示意图

下图展示了 Velero 在备份过程中如何调用不同类型的插件:

Velero 插件调用流程 Velero 插件调用流程(备份场景) 备份请求触发 插件调度器 Backup Item Action 资源预处理/转换 Volume Snapshotter 云快照创建 Object Store 元数据/数据上传 插件通过 gRPC 与 Velero Server 通信,支持热加载与版本兼容校验

2.7 插件机制的关键设计原则

  • 解耦存储后端: 通过 Object Store 插件,Velero 可以无缝切换存储后端,无需修改核心代码。
  • 资源级扩展: Backup/Restore Item Action 插件允许对特定资源(如 Cert-Manager 证书、Istio 配置)执行自定义逻辑,满足复杂业务场景。
  • 版本兼容: 插件与 Velero Server 通过 gRPC 协议通信,插件接口版本独立,支持向后兼容。
最佳实践: 在灾备准入策略评审中,应重点检查插件列表是否经过安全审批,以及插件是否具备审计日志输出能力。自定义插件必须通过代码审查与安全扫描。