2. Velero 项目介绍
2.1 Velero 的起源与发展
Velero(原 Heptio Ark)是由 Heptio 公司于 2017 年开源的一款 Kubernetes 集群备份与恢复工具。2018 年 VMware 收购 Heptio 后,项目更名为 Velero 并捐赠给 CNCF(Cloud Native Computing Foundation),目前作为 Sandbox 级别项目持续演进。
Velero 的发展历程可概括为以下关键节点:
| 时间 | 里程碑 | 核心变化 |
|---|---|---|
| 2017 | Heptio Ark 开源 | 提供基础的 Kubernetes 资源备份/恢复能力 |
| 2018 | VMware 收购,更名 Velero | 引入 Volume 快照支持,扩展存储后端 |
| 2019 | 加入 CNCF Sandbox | 社区治理标准化,插件生态初步形成 |
| 2021 | v1.6 发布 | 支持 CSI 快照、数据移动(Data Mover) |
| 2023+ | v1.12+ 持续迭代 | 增强备份粒度控制、资源模型协同、灾备准入 |
关键认知: Velero 并非简单的“kubectl get all”导出工具,而是一个面向云原生环境的有状态应用灾备框架,其核心价值在于将 Kubernetes 资源对象与持久化数据(PV/PVC)作为一个整体进行一致性保护。
2.2 Velero 的核心功能
Velero 围绕“备份-恢复-迁移”三大场景,提供以下核心能力:
- 集群资源备份: 按命名空间、标签选择器、资源类型等维度,将 Kubernetes 对象(Deployment、Service、ConfigMap、Secret 等)导出为 JSON/YAML 并存储至对象存储。
- 持久卷快照: 通过 CSI 驱动或云厂商快照 API,对 PVC 绑定的持久卷创建一致性快照,支持文件系统级冻结(fsfreeze)。
- 定时备份策略: 使用 Cron 表达式定义备份周期,自动执行全量/增量备份,保留策略可配置。
- 跨集群迁移: 将备份数据从源集群恢复至目标集群,支持集群间资源映射(如 StorageClass 转换、命名空间重映射)。
- 备份钩子(Hooks): 在备份/恢复前后执行自定义命令(如数据库 flush、应用停写),保证数据一致性。
- 插件扩展: 支持 Volume Snapshotter、Object Store、Backup Item Action 三类插件,可对接不同存储后端和自定义逻辑。
灾备准入视角: 在资源模型协同设计中,Velero 的备份粒度(资源+卷)与 Kubernetes 资源模型(GVK、OwnerReference、Finalizer)的交互,决定了备份的完整性和可恢复性。例如,备份一个 StatefulSet 时,必须同时捕获其关联的 PVC、Pod 以及 VolumeSnapshot 的依赖关系。
2.3 Velero 在云原生生态中的定位
在 CNCF 云原生全景图中,Velero 归属于 “存储与数据管理” 类别,与 Rook、MinIO、Longhorn 等项目共同构成云原生数据基础设施层。其生态定位可从以下三个维度理解:
| 维度 | 定位描述 | 典型交互项目 |
|---|---|---|
| 数据保护层 | 为 Kubernetes 集群提供应用级备份/恢复,弥补 etcd 快照仅能恢复集群状态、无法恢复应用数据的不足 | etcd、Kopia、Restic |
| 灾备编排层 | 与集群联邦(Karmada/Open Cluster Management)配合,实现跨集群的灾备策略编排与故障切换 | Karmada、OCM、Cluster API |
| 资源模型协同层 | 备份/恢复过程需解析 Kubernetes 资源模型(GVK、OwnerReference、Finalizer),确保依赖关系完整 | Kubernetes API Server、CRD、Admission Webhook |
常见误区: 部分团队将 Velero 等同于“对象存储备份工具”,忽略了其与 Kubernetes 资源模型的深度耦合。在灾备准入设计中,必须明确:Velero 备份的是“资源对象 + 数据卷”的语义组合,而非简单的文件级拷贝。
2.4 备份与资源模型协同的关键概念
在灾备准入场景中,Velero 与 Kubernetes 资源模型的协同体现在以下三个核心机制:
- GVK(Group-Version-Kind)解析: Velero 备份时通过 API Discovery 获取集群中所有已安装的 GVK,确保自定义资源(CRD)也能被正确序列化。
- OwnerReference 依赖追踪: 备份一个 Deployment 时,Velero 自动追踪其所属的 ReplicaSet、Pod、PVC,形成完整的资源依赖树。
- Finalizer 与备份锁: 在备份过程中,Velero 通过 Finalizer 机制防止被备份的资源被意外删除,保证备份操作的原子性。
准入设计启示: 在实现灾备准入策略时,需要利用 Admission Webhook 拦截备份请求,校验备份范围是否覆盖了目标资源的完整依赖链。例如,备份一个 CRD 实例时,必须同时备份其引用的 ConfigMap 和 Secret,否则恢复后将出现资源缺失。
# 示例:Velero 备份命令,指定资源依赖追踪
velero backup create my-backup \
--include-namespaces production \
--include-resources deployments,statefulsets,persistentvolumeclaims \
--snapshot-volumes \
--wait