4. Velero 备份机制详解:全量备份、增量备份与备份存储位置

Velero 的备份机制是 Kubernetes 集群灾备的基石。理解全量备份、增量备份(VolumeSnapshot)以及备份存储位置(BackupStorageLocation)的工作原理,是设计高效灾备策略的前提。本章将深入剖析这三者的核心差异、适用场景与配置要点。

4.1 全量备份(Full Backup)

全量备份是 Velero 最基本的备份模式,它会将指定命名空间或集群范围内的所有 Kubernetes 资源对象(如 Deployment、Service、ConfigMap)以及关联的持久卷数据(通过 restic 或 Kopia)完整复制一份。

  • 备份范围:资源清单 + 卷数据(可选)。
  • 数据量:每次备份均为完整副本,数据量较大。
  • 恢复速度:恢复时只需依赖单个备份文件,速度最快。
  • 存储成本:随着备份版本增加,存储成本线性增长。
  • 典型场景:首次备份、关键里程碑备份、恢复演练基线。
最佳实践:建议每周执行一次全量备份作为基线,并结合每日增量备份,在存储成本与恢复速度之间取得平衡。

4.2 增量备份(VolumeSnapshot)

Velero 的增量备份主要依赖云存储提供商的 VolumeSnapshot 能力(如 AWS EBS Snapshot、GCP Persistent Disk Snapshot、Azure Disk Snapshot)。它仅备份自上次快照以来发生变化的块数据,而非整个卷。

特性 全量备份(File System Level) 增量备份(VolumeSnapshot)
备份粒度 文件级(通过 restic/Kopia) 块级(云存储快照 API)
首次备份大小 全量数据 全量数据
后续备份大小 全量数据(除非启用 restic 增量) 仅变更的块
恢复速度 依赖文件系统遍历,较慢 直接挂载快照,极快
跨云迁移 支持(文件级复制) 受限(依赖云厂商快照格式)
存储成本 较高(重复数据多) 较低(仅存储差异块)
注意:VolumeSnapshot 增量备份要求 PVC 使用支持快照的 StorageClass(如 CSI 驱动),且 Velero 需要配置对应的 VolumeSnapshotLocation。如果集群不支持 CSI 快照,则退化为 restic/Kopia 的文件级全量备份。

4.2.1 增量备份工作流程

  1. 创建 VolumeSnapshotClass:定义快照的删除策略(Retain/Delete)。
  2. Velero 调用 CSI 快照 API:对目标 PVC 创建快照。
  3. 云存储创建增量快照:仅复制自上次快照后变更的块。
  4. 备份元数据:Velero 将快照 ID 与资源清单关联,存入 BackupStorageLocation。
  5. 恢复时:Velero 根据快照 ID 创建新 PVC 并挂载快照数据。
Velero 增量备份(VolumeSnapshot)流程 Velero 备份命令 CSI 快照 API 云存储快照 增量块数据 备份元数据 BackupStorageLocation VolumeSnapshotLocation 说明:增量备份依赖云存储快照 API,仅传输变更块,大幅降低存储成本与备份窗口。

4.3 备份存储位置(BackupStorageLocation)

BackupStorageLocation(BSL)是 Velero 用于存储备份文件(资源清单、restic 数据、Kopia 数据)的抽象层。它定义了备份数据的物理存储后端,支持多种云存储和本地存储。

4.3.1 支持的存储后端

存储后端 协议 典型配置 适用场景
AWS S3 s3:// region, bucket, accessKey 公有云主存储
GCP GCS gs:// project, bucket, serviceAccount 公有云主存储
Azure Blob azblob:// storageAccount, container 公有云主存储
MinIO s3:// endpoint, bucket, accessKey 私有云/本地存储
NFS / 本地路径 file:// path, server 开发测试环境

4.3.2 BSL 配置示例

apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
  name: default
  namespace: velero
spec:
  provider: aws
  objectStorage:
    bucket: my-velero-backups
    prefix: cluster-a
  config:
    region: us-east-1
    s3ForcePathStyle: "false"
    s3Url: https://s3.us-east-1.amazonaws.com
  credential:
    name: cloud-credentials
    key: cloud

4.3.3 BSL 关键参数

  • provider:存储后端类型(aws, gcp, azure, minio 等)。
  • objectStorage.bucket:存储桶名称。
  • objectStorage.prefix:备份文件在桶内的路径前缀,用于多集群隔离。
  • config.region:云存储区域。
  • credential:访问存储后端的密钥引用。
  • accessMode:ReadWrite(默认)或 ReadOnly,用于灾备场景的只读挂载。
多 BSL 策略:可以配置多个 BSL 实现备份数据异地冗余。例如,主 BSL 使用 AWS S3(低延迟),辅助 BSL 使用 GCP GCS(跨云灾备)。Velero 支持在备份时指定目标 BSL。

4.4 全量备份与增量备份的协同策略

在生产环境中,推荐采用 全量 + 增量 的混合备份策略,以平衡存储成本与恢复时间目标(RTO)。

全量 + 增量混合备份策略时间线 全量备份 增量备份 增量备份 全量备份 周日 00:00 周一 00:00 周二 00:00 下周日 00:00 策略说明: 每周日执行全量备份作为恢复基线,周一至周六执行增量备份。 恢复时先恢复最近的全量备份,再按顺序应用增量备份,实现最小 RPO。

4.5 备份验证与监控

备份的有效性需要通过定期验证来保证。Velero 提供了 velero backup describe 和 velero restore --from-backup 命令来验证备份完整性。

# 查看备份状态
velero backup describe my-backup --details

# 从备份执行恢复验证(不实际覆盖资源)
velero restore create --from-backup my-backup --restore-volumes=false --dry-run
关键提醒:VolumeSnapshot 增量备份的恢复依赖云存储快照的可用性。建议定期执行恢复演练,确保快照未被意外删除或损坏。同时,BackupStorageLocation 的访问密钥应定期轮换,并存储在 Kubernetes Secret 中。