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 各组件在备份任务中的协作关系:
3.5 插件加载与生命周期
Velero 插件以 独立的二进制文件 或 容器镜像 形式分发,通过以下方式加载:
- 二进制插件: 放置在 velero-server Pod 的
/plugins目录下,启动时自动扫描加载。 - 容器化插件: 通过
initContainer将插件二进制复制到共享卷,再被 velero-server 加载。 - gRPC 通信: 插件作为独立进程运行,velero-server 通过 Unix Socket 或 TCP 与插件建立 gRPC 连接。
灾备准入场景中的插件价值: 自定义动作插件可以在备份前对资源进行准入校验(如检查是否包含敏感数据、是否符合备份策略),在恢复前进行资源转换(如修改命名空间、调整存储类),是实现“备份即代码”的关键扩展点。
3.6 组件依赖关系(SVG 依赖图)
下图展示了 Velero 各组件的依赖关系与数据流向:
3.7 灾备准入视角的关键组件
在灾备准入设计中,以下组件需要重点关注:
- velero-server 的 API 版本与资源模型兼容性: 确保备份的 CRD 资源与目标集群的 API 版本匹配。
- node-agent 的卷处理能力: 支持 CSI 快照、文件级备份、卷克隆等,直接影响数据一致性。
- 自定义动作插件: 实现备份前的准入校验(如检查资源标签、命名空间白名单)和恢复时的资源转换(如修改 StorageClass、调整副本数)。
准入策略建议: 在 Velero 备份流程中插入自定义动作插件,对备份资源进行“预检”,确保只有符合灾备策略的资源才会被备份,避免无效备份占用存储空间。