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 的依赖关系。
Velero 核心功能架构 Velero 引擎 资源备份 持久卷快照 定时备份策略 跨集群迁移 备份钩子 插件扩展 灾备准入关注点:备份粒度需与 Kubernetes 资源模型(GVK、OwnerReference)协同 确保 StatefulSet + PVC + 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 备份的是“资源对象 + 数据卷”的语义组合,而非简单的文件级拷贝。
Velero 在云原生生态中的定位 存储基础设施层 对象存储(S3/MinIO/GCS) · 持久卷(CSI/NFS) · 快照驱动 Velero 数据保护层 备份/恢复 · 迁移 · 定时策略 · 钩子 灾备编排层 Karmada · OCM · Cluster API 资源模型协同层 K8s API · CRD · Admission Webhook 灾备准入设计核心:Velero 作为中间层,向上对接编排策略,向下依赖存储基础设施,横向协同资源模型

2.4 备份与资源模型协同的关键概念

在灾备准入场景中,Velero 与 Kubernetes 资源模型的协同体现在以下三个核心机制:

  1. GVK(Group-Version-Kind)解析: Velero 备份时通过 API Discovery 获取集群中所有已安装的 GVK,确保自定义资源(CRD)也能被正确序列化。
  2. OwnerReference 依赖追踪: 备份一个 Deployment 时,Velero 自动追踪其所属的 ReplicaSet、Pod、PVC,形成完整的资源依赖树。
  3. 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