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 备份工作流程

备份工作流程 1. 用户执行 CLI 命令 2. 创建 Backup CR 3. Backup Controller 发现 4a. 调用 Object Store 插件 (上传备份文件) 4b. 调用 Volume 插件 (创建快照) 5. 更新 Backup CR 状态 6. 备份完成 说明:步骤 4a 和 4b 是并行执行的。镜像拉取加速插件在步骤 4a 的“上传备份文件”阶段被调用。

2.2.2 恢复工作流程

恢复工作流程 1. 用户执行 CLI 命令 2. 创建 Restore CR 3. Restore Controller 发现 4a. 调用 Object Store 插件 (下载备份文件) 4b. 调用 Volume 插件 (从快照创建卷) 5. 创建 Kubernetes 资源 6. 恢复完成 说明:步骤 4a 的“下载备份文件”是镜像拉取加速插件的主要优化点,通过缓存或 P2P 技术加速。

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 关键数据流向图

下图展示了在恢复过程中,镜像数据与常规备份数据的流向差异。

恢复流程中的数据流向 对象存储 备份文件 卷快照 Velero Server 恢复编排 插件调用 目标集群 Pod / PV 镜像仓库 备份数据 恢复数据 镜像拉取 镜像层数据 说明:实线为常规备份/恢复数据流,虚线为镜像数据流。加速插件旨在优化虚线路径。

2.4 插件接口在架构中的位置

Velero 的插件机制是其扩展性的基石。插件接口位于 Velero Server 与外部存储/卷系统之间,是数据流的必经之路。

  • Object Store 插件: 负责备份文件和卷快照的上传与下载。这是实现镜像缓存和 P2P 分发的最佳挂载点。
  • Volume Snapshotter 插件: 负责创建和恢复存储卷的快照。
  • Backup Item Action 插件: 在备份/恢复单个 Kubernetes 资源时执行自定义逻辑,可用于注入镜像加速 Sidecar。
架构启示: 要实现镜像拉取加速,最直接的路径是开发一个自定义的 Object Store 插件。该插件在“下载备份文件”阶段,能够识别出镜像层数据,并优先从本地缓存或 P2P 网络获取,而不是直接从远端对象存储下载。