2. Velero 核心概念:备份、恢复、调度、存储位置与卷快照

在深入蓝绿发布与漂移告警复测流程之前,必须牢固掌握 Velero 的五大核心概念。这些概念构成了所有运维操作的基础,理解它们之间的协作关系,是正确设计备份策略和快速定位恢复故障的前提。

核心要点: Velero 的架构本质是一个“声明式备份控制器”。它通过 Kubernetes CRD(Custom Resource Definition)将备份、恢复等操作定义为 API 资源,由控制器协调执行。存储位置和卷快照是其数据持久化的两大支柱。

2.1 五大核心概念总览

下表从定义、用途和关键属性三个维度,对五大概念进行横向对比,帮助你快速建立全局认知。

概念 定义 核心用途 关键属性 / 关联对象
Backup 对 Kubernetes 资源对象和持久化卷数据的完整或增量快照。 数据保全、灾难恢复、环境克隆。 TTL(过期时间)、Included/Excluded Namespaces、存储位置引用。
Restore 从指定的 Backup 对象中,将资源对象和数据恢复到目标集群。 故障恢复、版本回退、数据迁移。 Restore 模式(包括/排除资源)、Namespace 映射、PV 恢复策略。
Schedule 基于 Cron 表达式自动触发 Backup 创建的定时任务。 自动化备份、合规性要求、定期快照。 Cron 语法、备份模板(Template)、暂停/启用状态。
StorageLocation 定义备份数据(对象存储)的存储后端配置。 数据持久化、多云/混合云存储、备份数据生命周期管理。 Provider(如 AWS S3、GCS、Azure Blob)、Bucket、Prefix、访问凭证。
VolumeSnapshot 对 PV(PersistentVolume)底层存储卷的瞬时快照。 数据库等有状态应用的高效、一致性备份。 CSI Driver 支持、SnapshotClass、VolumeSnapshotLocation。

2.2 核心概念关系与数据流

下图展示了 Velero 在执行一次备份操作时,各核心组件之间的协作关系与数据流向。理解这张图,就掌握了 Velero 的运行原理。

Velero 核心概念关系与数据流图 Velero 核心概念关系与数据流 用户 / kubectl / API Schedule (Cron 定时器) Backup (CRD) K8s 资源对象 (YAML) VolumeSnapshot (CSI) PersistentVolume (存储) StorageLocation (S3/GCS) 对象存储 (Bucket) 数据流说明: 1. 用户直接创建 Backup 或通过 Schedule 自动触发 Backup。 2. Backup 控制器将 K8s 资源对象(YAML)序列化,并调用 CSI 驱动创建 VolumeSnapshot。 3. 资源对象数据被上传到 StorageLocation 指定的对象存储 Bucket。 4. VolumeSnapshot 数据也通过 CSI 驱动写入底层存储,其元数据同样记录在 Backup 中。

2.3 核心概念深度解析

2.3.1 Backup(备份)

Backup 是 Velero 中最核心的操作单元。它包含两个部分:Kubernetes 资源对象的 YAML 清单和持久化卷的数据快照。备份操作是异步的,Velero 会创建一个 Backup CRD 对象,控制器会持续更新其状态。

运维提示: 在蓝绿发布场景中,建议在切换流量前对“蓝环境”执行一次 --ttl 72h 的备份。这样,如果“绿环境”出现漂移告警,你可以在 72 小时内快速回退到“蓝环境”的稳定状态。
# 创建一个包含指定命名空间和卷快照的备份示例
velero backup create blue-env-backup \
  --include-namespaces production-blue \
  --snapshot-volumes \
  --ttl 72h \
  --storage-location default

2.3.2 Restore(恢复)

Restore 是从已有的 Backup 中提取数据并重建资源的过程。恢复操作支持灵活的命名空间映射和资源过滤,这在跨环境迁移或蓝绿切换时非常有用。

  • 命名空间映射: 将备份中的 production-blue 命名空间恢复到 production-green。
  • 资源过滤: 可以选择只恢复 Deployment 和 Service,而跳过 ConfigMap。
  • 恢复模式: 支持 --restore-volumes 和 --namespace-mappings 等精细控制。
# 将 blue-env-backup 恢复到 green 命名空间,并保留原始 PV 数据
velero restore create --from-backup blue-env-backup \
  --namespace-mappings production-blue:production-green \
  --restore-volumes=true

2.3.3 Schedule(调度)

Schedule 是 Velero 实现自动化运维的关键。它使用标准的 Cron 表达式来定义备份执行周期。在蓝绿发布流程中,建议为每个环境配置独立的 Schedule。

Cron 表达式 含义 适用场景
0 */6 * * * 每 6 小时执行一次 核心业务系统,数据变更频繁
0 2 * * * 每天凌晨 2 点执行 常规业务,日终备份
0 0 * * 0 每周日凌晨执行 低频变更系统,周备份
# 创建一个每天凌晨 2 点执行的定时备份
velero schedule create daily-blue-backup \
  --schedule="0 2 * * *" \
  --include-namespaces production-blue \
  --ttl 168h

2.3.4 StorageLocation(存储位置)

StorageLocation 定义了备份数据(资源清单和卷快照元数据)的物理存储后端。它通常指向一个对象存储服务(如 AWS S3、MinIO、GCS)。Velero 支持同时配置多个 StorageLocation,实现数据分级或异地容灾。

关键配置: 在蓝绿发布复测流程中,务必确保 StorageLocation 的 Bucket 和 Prefix 配置正确,并且 Velero 服务账号拥有对该 Bucket 的读写权限。错误的存储配置是导致备份失败的最常见原因。
# 查看当前集群中配置的存储位置
velero storage-location get

# 输出示例
NAME      PROVIDER   BUCKET/PREFIX                   ACCESS MODE
default   aws        my-velero-backups/blue-env      ReadWrite

2.3.5 VolumeSnapshot(卷快照)

VolumeSnapshot 是 Velero 实现有状态应用一致性备份的核心。它利用 Kubernetes CSI(Container Storage Interface)快照功能,对 PV 进行瞬时快照。与直接复制文件系统相比,卷快照具有速度快、对应用影响小的优势。

  • CSI 驱动依赖: 底层存储必须提供 CSI 快照能力(如 AWS EBS、GCE PD、Ceph RBD)。
  • VolumeSnapshotClass: 需要预先定义,用于指定快照的属性和保留策略。
  • 一致性组: 对于多卷应用(如数据库),需要确保所有卷的快照在时间上一致。
# 查看集群中可用的 VolumeSnapshotClass
kubectl get volumesnapshotclass

# 输出示例
NAME              DRIVER               DELETIONPOLICY   AGE
csi-aws-vsc       ebs.csi.aws.com      Delete           30d
csi-gce-vsc       pd.csi.storage.gke.io  Retain         15d

2.4 概念关联与运维决策树

在蓝绿发布漂移告警复测中,你需要根据告警类型和影响范围,快速选择正确的 Velero 概念组合来执行恢复。下面的决策树可以帮助你理清思路。

Velero 概念关联与运维决策树 蓝绿发布漂移告警:Velero 概念关联决策树 漂移告警触发 影响范围判断 仅资源对象漂移 使用 Backup + Restore 数据卷内容漂移 使用 VolumeSnapshot + Restore 存储后端异常 检查 StorageLocation 配置
复测流程建议: 在复测漂移告警时,建议先通过 velero backup describe 确认备份的完整性,再执行恢复。如果恢复后告警依然存在,应优先检查 StorageLocation 的连通性和 VolumeSnapshotClass 的配置是否正确。