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 完成实际数据搬运。这种解耦设计使得备份引擎可以独立升级,也便于引入缓存层。
1.2 备份与恢复流程
Velero 的备份与恢复遵循 “声明式驱动” 模式,用户通过创建 Backup CR 或 Schedule CR 触发操作。以下为标准备份流程:
- API 请求:用户通过 CLI 或直接创建 Backup CR,指定备份范围(namespace、label selector)和存储位置。
- 资源快照:Velero Server 调用 Kubernetes API 获取指定资源对象的 JSON 描述,打包为
resources.json.gz。 - 卷快照:若备份包含 PVC,Volume Snapshotter 调用 CSI 驱动或云 API 创建持久卷快照。
- 文件级备份:Node Agent 中的 Restic/Kopia 对卷内文件进行扫描、分块、去重,生成增量数据块。
- 上传存储:所有备份数据(资源清单 + 卷快照 + 文件块)上传至 BSL 定义的对象存储桶。
- 元数据记录:备份完成后,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 协同调优”的核心切入点。
1.4 缓存机制与资源配额的关联
Velero 的磁盘缓存大小受 Node Agent 的资源限制 和 节点磁盘容量 双重约束。以下为典型关联关系:
- CPU 限制:缓存索引的构建与查询需要 CPU 资源。CPU 不足时,缓存查询延迟增加,可能导致备份超时回退到全量模式。
- 内存限制:内存缓存大小直接影响可缓存的元数据条目数。内存不足时,早期缓存条目被驱逐,降低命中率。
- 磁盘限制:磁盘缓存空间不足时,新数据块无法写入缓存,后续备份必须重新上传。
- I/O 限制:磁盘 I/O 带宽不足时,缓存读写成为瓶颈,拖慢整个备份流程。
调优切入点: 在 Kubernetes 资源配额紧张的环境中,Velero 的缓存机制往往最先“受伤”。通过监控缓存命中率指标(
velero_cache_hit_ratio),可以反向推断资源配额是否合理,进而实现 RPO 的协同优化。这正是本课程后续章节要深入展开的核心方法。