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 增量备份工作流程
- 创建 VolumeSnapshotClass:定义快照的删除策略(Retain/Delete)。
- Velero 调用 CSI 快照 API:对目标 PVC 创建快照。
- 云存储创建增量快照:仅复制自上次快照后变更的块。
- 备份元数据:Velero 将快照 ID 与资源清单关联,存入 BackupStorageLocation。
- 恢复时:Velero 根据快照 ID 创建新 PVC 并挂载快照数据。
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)。
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 中。