Velero 架构总览:组件与数据流控制流分离设计
Velero 采用 数据流与控制流分离 的架构设计,将备份/恢复的编排逻辑与底层存储操作解耦。这种设计使得 Velero 能够灵活适配多种云平台和存储后端,同时保持核心引擎的轻量稳定。理解其组件构成与交互关系,是进行灾备准入场景故障排查的基础。
2.1 核心组件:Server、CLI、Plugin
Velero 由三个主要组件构成,各自承担不同职责:
| 组件 | 部署形态 | 核心职责 | 故障排查关注点 |
|---|---|---|---|
| Velero Server | Kubernetes Deployment | 接收备份/恢复请求,编排工作流,管理备份对象(Backup/Restore CRD),与 API Server 交互 | Pod 日志、CRD 状态、控制器循环是否阻塞 |
| Velero CLI | 客户端二进制 | 用户与 Velero 交互的入口,触发备份/恢复命令,查看状态,管理调度 | 客户端版本兼容性、网络连通性、认证凭据 |
| Velero Plugin | Sidecar 或独立容器 | 对接具体存储后端(如 AWS S3、Azure Blob、GCS)和云资源(如卷快照、卷备份) | 插件日志、存储凭证、API 限流、对象存储权限 |
故障排查提示: 在准入场景中,Plugin 往往是故障高发区。存储桶权限变更、云 API 限流、插件版本与 Velero Server 不匹配,都会导致备份失败。排查时应优先检查 Plugin 容器的日志输出。
2.2 数据流与控制流分离设计
Velero 架构的核心思想是将 控制流(Control Flow) 与 数据流(Data Flow) 分离,避免备份/恢复操作对 Kubernetes 控制平面造成压力,同时提升数据传输的灵活性和可扩展性。
- 控制流: 由 Velero Server 主导,负责创建 Backup/Restore CRD 对象、调度工作流、记录状态、触发 Plugin 回调。控制流仅涉及元数据操作,不直接处理大规模数据。
- 数据流: 由 Plugin 和 Velero 内置的数据传输模块负责,直接与对象存储、卷快照 API 交互,完成实际的数据上传/下载。数据流可以并行执行,且不依赖 Kubernetes API Server 的可用性。
2.3 组件交互流程
一次典型的备份操作,展示了控制流与数据流的完整交互:
- 用户触发: 通过
velero backup createCLI 命令发起备份请求。 - 控制流启动: CLI 将请求提交给 Kubernetes API Server,创建
BackupCRD 对象。 - Velero Server 接管: Velero Server 的控制器 watch 到新的 Backup 对象,开始编排备份工作流。
- 数据流执行: Velero Server 调用对应 Plugin,Plugin 直接与对象存储 API 通信,上传备份数据(卷快照、资源清单等)。
- 状态更新: 数据流完成后,Plugin 将结果返回给 Velero Server,Server 更新 Backup CRD 的状态。
准入场景关键点: 在灾备准入测试中,控制流故障通常表现为 Backup CRD 创建后长时间处于
New 或 InProgress 状态;数据流故障则表现为 Plugin 日志中的存储 API 错误或超时。两者需要分开排查。
2.4 组件依赖关系表
下表总结了各组件之间的依赖关系,以及故障隔离的边界:
| 组件 | 依赖项 | 故障隔离边界 |
|---|---|---|
| Velero CLI | Kubernetes API Server 可达性、kubeconfig 配置 | 客户端网络与认证 |
| Velero Server | Kubernetes API Server、CRD 注册、Plugin 镜像 | Server Pod 运行状态、控制器循环 |
| Plugin | 对象存储端点、云 API 凭据、网络出口 | 存储桶权限、API 限流、插件版本 |
| 对象存储 | 网络连通性、存储桶存在、IAM 策略 | 存储服务可用性、数据完整性 |
2.5 架构设计对故障排查的启示
- 控制流故障优先排查 Velero Server 日志和 CRD 状态: 如果备份/恢复 CRD 创建后无响应,问题大概率出在 Server 控制器或 API Server 通信上。
- 数据流故障优先排查 Plugin 日志和存储后端: 如果 CRD 状态显示
InProgress但长时间未完成,应检查 Plugin 容器的日志,确认是否有存储 API 错误、超时或权限拒绝。 - 版本兼容性: CLI、Server、Plugin 三者版本必须匹配。版本不匹配是准入场景中常见的低级故障。
- 网络隔离: 数据流通常需要访问外部存储服务,确保集群网络策略、出口防火墙、DNS 解析均正确配置。
常见误区: 不要将控制流和数据流故障混为一谈。例如,备份 CRD 状态为
Failed 并不一定意味着数据上传失败,也可能是控制流中的元数据写入出错。务必先查看 Velero Server 日志,再检查 Plugin 日志,按层隔离。