3. Velero 架构解析

Velero 采用典型的 客户端-服务端 架构,结合 插件机制 实现云原生环境下的备份与恢复。理解其组件划分与协作关系,是设计灾备准入策略和资源模型协同的基础。

3.1 Velero 服务端组件

服务端组件以 Deployment 形式运行在 Kubernetes 集群中,负责接收客户端请求、调度备份/恢复任务、与云存储交互。

组件 部署形态 核心职责
velero-server Deployment (1 副本) API 服务、任务调度、资源协调
node-agent DaemonSet 卷快照、Pod 卷挂载、数据移动
restic (已弃用) DaemonSet 文件级备份(旧版,被 node-agent 替代)
关键设计点: velero-server 是单副本有状态服务,依赖 etcd 存储备份元数据;node-agent 在每个节点上运行,负责处理本地卷的数据传输。

3.2 Velero 客户端组件

客户端组件是 velero CLI 二进制工具,安装在管理员工作站或 CI/CD 流水线中。它通过 Kubernetes API 与 velero-server 通信,不直接操作存储后端。

  • 命令分类:
    • velero backup create/delete/describe/logs — 备份生命周期管理
    • velero restore create/delete/describe/logs — 恢复生命周期管理
    • velero schedule create/delete/describe — 定时备份策略
    • velero install/uninstall/plugin — 集群安装与插件管理
  • 认证方式: 复用 kubeconfig 上下文,支持 ServiceAccount 令牌或云厂商 IAM 角色。
最佳实践: 在灾备准入场景中,建议将 velero CLI 集成到 GitOps 工具链(如 ArgoCD Workflow)中,通过声明式 YAML 触发备份/恢复,避免人工操作。

3.3 Velero 插件机制

Velero 的插件系统是其扩展性的核心。插件分为 存储插件、卷快照插件 和 自定义动作插件 三类,均通过 gRPC 协议与 velero-server 通信。

插件类型 接口 典型实现
存储插件 BackupStore AWS S3、Azure Blob、GCS、MinIO
卷快照插件 VolumeSnapshotter CSI 快照、AWS EBS、Azure Disk、GCE PD
自定义动作插件 BackupItemAction / RestoreItemAction 资源过滤、加密、转换、准入校验
注意: 插件必须与 velero-server 版本兼容。升级 Velero 时,需同步升级所有已安装的插件,否则可能导致备份/恢复失败。

3.4 组件协作流程(SVG 架构图)

下图展示了 Velero 各组件在备份任务中的协作关系:

Velero 组件协作架构图 Velero 组件协作架构图 velero CLI (客户端) velero-server (Deployment) API 服务 / 任务调度 / 元数据管理 存储插件 S3/GCS/Azure 卷快照插件 CSI/EBS/Azure node-agent (DaemonSet) 卷挂载 / 数据移动 / 文件级备份 自定义动作 过滤/加密/准入 组件协作说明: 1. CLI 发送备份/恢复请求到 velero-server 2. velero-server 通过存储插件将元数据写入对象存储 3. velero-server 通过卷快照插件创建持久卷快照 4. node-agent 负责挂载卷并执行数据移动或文件级备份 5. 自定义动作插件在备份/恢复过程中执行资源转换或准入校验

3.5 插件加载与生命周期

Velero 插件以 独立的二进制文件 或 容器镜像 形式分发,通过以下方式加载:

  1. 二进制插件: 放置在 velero-server Pod 的 /plugins 目录下,启动时自动扫描加载。
  2. 容器化插件: 通过 initContainer 将插件二进制复制到共享卷,再被 velero-server 加载。
  3. gRPC 通信: 插件作为独立进程运行,velero-server 通过 Unix Socket 或 TCP 与插件建立 gRPC 连接。
灾备准入场景中的插件价值: 自定义动作插件可以在备份前对资源进行准入校验(如检查是否包含敏感数据、是否符合备份策略),在恢复前进行资源转换(如修改命名空间、调整存储类),是实现“备份即代码”的关键扩展点。

3.6 组件依赖关系(SVG 依赖图)

下图展示了 Velero 各组件的依赖关系与数据流向:

Velero 组件依赖关系图 Velero 组件依赖关系图 velero CLI velero-server 存储插件 卷快照插件 node-agent 自定义动作 依赖关系说明: • velero-server 依赖存储插件和卷快照插件完成备份/恢复 • node-agent 依赖自定义动作插件执行资源级操作 • 所有插件均通过 gRPC 与主进程通信,插件故障不影响主进程运行

3.7 灾备准入视角的关键组件

在灾备准入设计中,以下组件需要重点关注:

  • velero-server 的 API 版本与资源模型兼容性: 确保备份的 CRD 资源与目标集群的 API 版本匹配。
  • node-agent 的卷处理能力: 支持 CSI 快照、文件级备份、卷克隆等,直接影响数据一致性。
  • 自定义动作插件: 实现备份前的准入校验(如检查资源标签、命名空间白名单)和恢复时的资源转换(如修改 StorageClass、调整副本数)。
准入策略建议: 在 Velero 备份流程中插入自定义动作插件,对备份资源进行“预检”,确保只有符合灾备策略的资源才会被备份,避免无效备份占用存储空间。