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 的可用性。
Velero 数据流与控制流分离架构图 Velero 数据流与控制流分离架构 控制流(Control Flow) 数据流(Data Flow) Velero CLI Kubernetes API Server Velero Server Plugin(数据面) 对象存储(S3/GCS/Azure) 控制信号(RPC) 控制流仅操作元数据(CRD),数据流直接与存储交互,两者互不阻塞

2.3 组件交互流程

一次典型的备份操作,展示了控制流与数据流的完整交互:

  1. 用户触发: 通过 velero backup create CLI 命令发起备份请求。
  2. 控制流启动: CLI 将请求提交给 Kubernetes API Server,创建 Backup CRD 对象。
  3. Velero Server 接管: Velero Server 的控制器 watch 到新的 Backup 对象,开始编排备份工作流。
  4. 数据流执行: Velero Server 调用对应 Plugin,Plugin 直接与对象存储 API 通信,上传备份数据(卷快照、资源清单等)。
  5. 状态更新: 数据流完成后,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 策略 存储服务可用性、数据完整性
Velero 组件依赖与故障隔离边界 Velero 组件依赖与故障隔离边界 Velero CLI K8s API Server Velero Server Plugin 对象存储 故障边界:网络与认证 故障边界:控制器与CRD 故障边界:存储权限与API

2.5 架构设计对故障排查的启示

  • 控制流故障优先排查 Velero Server 日志和 CRD 状态: 如果备份/恢复 CRD 创建后无响应,问题大概率出在 Server 控制器或 API Server 通信上。
  • 数据流故障优先排查 Plugin 日志和存储后端: 如果 CRD 状态显示 InProgress 但长时间未完成,应检查 Plugin 容器的日志,确认是否有存储 API 错误、超时或权限拒绝。
  • 版本兼容性: CLI、Server、Plugin 三者版本必须匹配。版本不匹配是准入场景中常见的低级故障。
  • 网络隔离: 数据流通常需要访问外部存储服务,确保集群网络策略、出口防火墙、DNS 解析均正确配置。
常见误区: 不要将控制流和数据流故障混为一谈。例如,备份 CRD 状态为 Failed 并不一定意味着数据上传失败,也可能是控制流中的元数据写入出错。务必先查看 Velero Server 日志,再检查 Plugin 日志,按层隔离。