2. Velero 架构解析:组件、工作流程与数据流向
理解 Velero 的架构是进行插件开发与性能调优的基础。本章将深入剖析 Velero 的核心组件(Server、CLI、Restic)、备份与恢复的工作流程,以及关键的数据流向。掌握这些内容,你才能精准定位镜像拉取加速的切入点。
2.1 核心组件
Velero 由三个主要组件构成,它们各司其职,协同完成 Kubernetes 集群资源的备份与恢复。
| 组件 | 部署形态 | 核心职责 |
|---|---|---|
| Velero Server | Kubernetes Deployment | 运行在集群内,负责调度备份/恢复任务、调用插件、与对象存储交互。 |
| Velero CLI | 客户端二进制 | 用户与 Velero 交互的命令行工具,用于触发备份、恢复、调度等操作。 |
| Restic | DaemonSet (Node Agent) | 负责持久卷(PV)的文件级备份与恢复,支持增量备份和加密。 |
关键认知: Velero Server 是大脑,CLI 是遥控器,Restic 是专门处理卷数据的搬运工。镜像拉取加速插件主要作用于 Velero Server 调用插件接口的阶段。
2.1.1 Velero Server
Velero Server 是架构的核心,它监听自定义资源(CRDs)的变化,并驱动整个工作流。它包含以下关键控制器:
- Backup Controller: 处理 Backup 对象的创建,协调备份流程。
- Restore Controller: 处理 Restore 对象的创建,协调恢复流程。
- Schedule Controller: 根据 Cron 表达式定时创建 Backup 对象。
- Plugin Manager: 加载并调用各类插件(Object Store、Volume Snapshotter、Backup Item Action 等)。
2.1.2 Velero CLI
CLI 是用户的操作入口。它通过调用 Kubernetes API Server 创建 Velero 自定义资源(如 Backup、Restore)来间接驱动 Server 工作。CLI 本身不执行数据移动。
# 创建备份命令示例
velero backup create my-backup --include-namespaces production
# 查看备份状态
velero backup describe my-backup --details
2.1.3 Restic (Node Agent)
Restic 以 DaemonSet 形式运行在每个节点上,用于处理持久卷的数据。它不经过 Velero Server 的数据通道,而是直接读取宿主机文件系统,并将数据上传到对象存储。
- 优势: 支持文件级备份,无需存储系统原生快照能力;支持增量备份,节省空间和时间。
- 局限: 备份速度受限于单节点磁盘 I/O 和网络带宽;恢复时需先下载全部数据。
2.2 工作流程
Velero 的工作流程分为备份流程和恢复流程。下面通过两张 SVG 图分别展示这两个核心流程。
2.2.1 备份工作流程
2.2.2 恢复工作流程
2.3 数据流向
理解数据在不同组件间的流动方向,是诊断性能瓶颈和设计加速方案的前提。数据流向主要分为控制流和数据流。
2.3.1 控制流
控制流负责传递指令和状态信息,不涉及实际数据。它通过 Kubernetes API Server 和 Velero 自定义资源实现。
- 方向: CLI → Kubernetes API Server → Velero Server → 插件。
- 载体: Backup/Restore/Delete 等 CR 对象。
- 特点: 数据量小,延迟敏感,是任务编排的骨架。
2.3.2 数据流
数据流负责传输实际的 Kubernetes 资源清单和持久卷数据。这是镜像拉取加速的核心关注点。
| 数据类别 | 源 | 目标 | 传输方式 | 加速潜力 |
|---|---|---|---|---|
| 资源清单 | Kubernetes API Server | 对象存储 | Velero Server 序列化后上传 | 低(数据量小) |
| 卷数据 (非 Restic) | 存储系统快照 | 对象存储 | Volume Snapshotter 插件直接传输 | 中(取决于存储系统) |
| 卷数据 (Restic) | 宿主机文件系统 | 对象存储 | Restic 进程直接上传 | 高(文件级,可增量) |
| 镜像数据 | 镜像仓库 | 目标集群节点 | Kubelet 拉取 | 极高(本课程核心) |
注意: 传统 Velero 备份不包含镜像层数据。镜像拉取加速插件的核心思路是在恢复流程中,通过 Velero 的插件机制,劫持或优化镜像拉取过程,避免从远端仓库重复下载大量镜像层。
2.3.3 关键数据流向图
下图展示了在恢复过程中,镜像数据与常规备份数据的流向差异。
2.4 插件接口在架构中的位置
Velero 的插件机制是其扩展性的基石。插件接口位于 Velero Server 与外部存储/卷系统之间,是数据流的必经之路。
- Object Store 插件: 负责备份文件和卷快照的上传与下载。这是实现镜像缓存和 P2P 分发的最佳挂载点。
- Volume Snapshotter 插件: 负责创建和恢复存储卷的快照。
- Backup Item Action 插件: 在备份/恢复单个 Kubernetes 资源时执行自定义逻辑,可用于注入镜像加速 Sidecar。
架构启示: 要实现镜像拉取加速,最直接的路径是开发一个自定义的 Object Store 插件。该插件在“下载备份文件”阶段,能够识别出镜像层数据,并优先从本地缓存或 P2P 网络获取,而不是直接从远端对象存储下载。