1. Velero 灾备概述

Velero 是云原生社区广泛使用的开源 Kubernetes 集群备份与恢复工具。它能够将集群中的持久化数据、资源对象(Deployment、Service、ConfigMap 等)以及 PV/PVC 快照统一打包,上传至对象存储(如 S3、MinIO、Azure Blob 等),并在需要时完整或部分恢复。在灾备体系中,Velero 承担着“数据保护最后一公里”的关键角色,其缓存机制直接影响备份窗口与恢复点目标(RPO)。

1.1 Velero 架构与核心组件

Velero 采用 Client-Server 架构,由以下核心组件构成:

组件 部署形态 职责
Velero CLI 客户端二进制 用户交互入口,下发备份/恢复/调度命令
Velero Server Kubernetes Deployment 核心控制器,监听 Backup/Schedule/Restore CRD 并执行操作
Node Agent DaemonSet 负责节点级数据移动(卷快照、文件系统备份)
Restic / Kopia 集成在 Node Agent 中 文件级备份引擎,支持增量与去重
Volume Snapshotter CSI 插件 / 云驱动 调用存储后端创建持久卷快照
Backup Storage Location (BSL) CRD 资源 定义对象存储桶的访问配置
架构要点: Velero Server 本身不直接读写数据,它通过 CRD 驱动 Node Agent 和 Volume Snapshotter 完成实际数据搬运。这种解耦设计使得备份引擎可以独立升级,也便于引入缓存层。
Velero 整体架构图 Velero CLI Velero Server (Deployment) Backup CRD Schedule CRD Restore CRD Node Agent (DaemonSet) Volume Snapshotter 对象存储 (S3/MinIO) 存储后端 (CSI/云) 说明:CLI 下发命令 → Server 解析为 CRD → Node Agent 与 Snapshotter 执行数据移动 → 写入对象存储或存储后端

1.2 备份与恢复流程

Velero 的备份与恢复遵循 “声明式驱动” 模式,用户通过创建 Backup CR 或 Schedule CR 触发操作。以下为标准备份流程:

  1. API 请求:用户通过 CLI 或直接创建 Backup CR,指定备份范围(namespace、label selector)和存储位置。
  2. 资源快照:Velero Server 调用 Kubernetes API 获取指定资源对象的 JSON 描述,打包为 resources.json.gz。
  3. 卷快照:若备份包含 PVC,Volume Snapshotter 调用 CSI 驱动或云 API 创建持久卷快照。
  4. 文件级备份:Node Agent 中的 Restic/Kopia 对卷内文件进行扫描、分块、去重,生成增量数据块。
  5. 上传存储:所有备份数据(资源清单 + 卷快照 + 文件块)上传至 BSL 定义的对象存储桶。
  6. 元数据记录:备份完成后,Velero 在存储桶中写入 velero-backup.json 元数据文件,记录备份时间戳、包含的资源列表、校验和等信息。
恢复流程关键差异: 恢复时 Velero 会先读取元数据文件,按需从对象存储拉取资源清单和卷数据。如果启用了缓存,Node Agent 会优先检查本地缓存中是否已有对应数据块,避免重复下载。

1.3 缓存机制在灾备中的角色

Velero 的缓存机制主要作用于 文件级备份(Restic/Kopia) 阶段。缓存分为两个层级:

缓存层级 存储位置 作用 对 RPO 的影响
内存缓存 Node Agent 进程内存 暂存最近扫描的文件元数据与索引 减少重复扫描,缩短备份窗口
磁盘缓存 节点本地路径(默认 /var/cache/velero) 缓存已上传的数据块指纹与部分热数据 增量备份时命中缓存可跳过上传,降低 RPO

在灾备场景中,缓存命中率直接影响 RPO(恢复点目标) 的达成:

  • 高缓存命中 → 增量备份仅上传变更数据块 → 备份时间缩短 → 可支持更频繁的备份调度 → RPO 降低。
  • 缓存未命中 → 全量扫描与上传 → 备份窗口拉长 → 调度间隔被迫增大 → RPO 升高。
  • 缓存污染或溢出 → 数据块指纹失效 → 触发不必要的全量重传 → 资源浪费与 RPO 恶化。
常见陷阱: 当节点资源配额(CPU/内存/磁盘)不足时,Velero 的磁盘缓存可能被操作系统回收或限速,导致缓存命中率骤降。这是后续章节“资源配额与 RPO 协同调优”的核心切入点。
缓存命中 vs 未命中:对备份流程的影响 ✅ 缓存命中场景 1. 扫描文件元数据 2. 缓存命中 → 跳过数据块上传 3. 仅上传变更索引 → 耗时短 RPO 可达 5~15 分钟 ❌ 缓存未命中场景 1. 全量扫描所有文件 2. 缓存未命中 → 全量数据块上传 3. 大量网络 I/O → 耗时数倍 RPO 可能超过 1 小时 核心结论:缓存命中率是决定 Velero 增量备份效率与 RPO 的关键指标,受节点资源配额直接影响

1.4 缓存机制与资源配额的关联

Velero 的磁盘缓存大小受 Node Agent 的资源限制 和 节点磁盘容量 双重约束。以下为典型关联关系:

  • CPU 限制:缓存索引的构建与查询需要 CPU 资源。CPU 不足时,缓存查询延迟增加,可能导致备份超时回退到全量模式。
  • 内存限制:内存缓存大小直接影响可缓存的元数据条目数。内存不足时,早期缓存条目被驱逐,降低命中率。
  • 磁盘限制:磁盘缓存空间不足时,新数据块无法写入缓存,后续备份必须重新上传。
  • I/O 限制:磁盘 I/O 带宽不足时,缓存读写成为瓶颈,拖慢整个备份流程。
调优切入点: 在 Kubernetes 资源配额紧张的环境中,Velero 的缓存机制往往最先“受伤”。通过监控缓存命中率指标(velero_cache_hit_ratio),可以反向推断资源配额是否合理,进而实现 RPO 的协同优化。这正是本课程后续章节要深入展开的核心方法。