1. VolumeSnapshot 概述
VolumeSnapshot 是 Kubernetes 中用于捕获持久卷(PersistentVolume)在某一时刻数据状态的原生 API 资源。它允许用户在不中断应用的情况下,对存储卷进行快照备份,并基于快照快速恢复或克隆新卷。在云原生存储体系中,VolumeSnapshot 是数据保护、灾难恢复和开发测试环境快速搭建的关键能力。
1.1 VolumeSnapshot 的定义与核心 API
VolumeSnapshot 在 Kubernetes 中由三个核心 API 资源组成,它们协同工作以实现快照的生命周期管理:
| API 资源 | 缩写 | 作用 | 生命周期 |
|---|---|---|---|
| VolumeSnapshot | vs | 用户声明的快照请求,代表一个时间点的卷数据副本 | 由用户创建/删除 |
| VolumeSnapshotContent | vsc | 集群中实际存在的快照资源,绑定到后端存储系统的快照 ID | 由 CSI 驱动创建/删除,与 VolumeSnapshot 一一绑定 |
| VolumeSnapshotClass | vsclass | 定义快照的存储策略(如 CSI 驱动、删除策略、参数) | 由管理员预先创建 |
关键概念: VolumeSnapshot 是用户视角的请求对象,VolumeSnapshotContent 是集群视角的实际快照数据,VolumeSnapshotClass 则提供快照的配置模板。三者关系类似于 PVC、PV 和 StorageClass 的映射模式。
1.2 VolumeSnapshot 的用途
VolumeSnapshot 在 Kubernetes 生产环境中主要服务于以下场景:
- 数据备份与恢复: 对关键业务数据库(如 MySQL、PostgreSQL)的持久卷进行定时快照,在数据损坏或误删除时快速恢复。
- 应用迁移与克隆: 基于快照创建新的 PVC,快速复制生产环境数据到测试或预发布环境,避免全量拷贝。
- 版本回滚: 在应用升级前创建快照,升级失败后可立即回滚到快照时间点的数据状态。
- 合规与审计: 保留特定时间点的数据副本,满足数据保留策略和合规要求。
1.3 VolumeSnapshot 与 PVC/PV 的关系
VolumeSnapshot 与 PVC(PersistentVolumeClaim)、PV(PersistentVolume)之间存在紧密的依赖和转换关系。下图展示了四者在 Kubernetes 存储体系中的拓扑结构:
1.4 核心关系总结
VolumeSnapshot 与 PVC/PV 之间的核心关系可以归纳为以下四点:
- 快照来源: VolumeSnapshot 必须基于一个已有的 PVC 创建,该 PVC 必须绑定到一个 PV 上。快照捕获的是 PV 后端存储的数据状态。
- 数据绑定: 每个 VolumeSnapshot 创建后,会自动生成一个对应的 VolumeSnapshotContent 对象,两者形成 1:1 的绑定关系,类似于 PVC 与 PV 的绑定。
- 恢复路径: 从 VolumeSnapshot 恢复数据时,可以创建一个新的 PVC,该 PVC 会绑定到一个由快照数据还原出的新 PV 上。原 PVC/PV 不受影响。
- 独立生命周期: 删除 VolumeSnapshot 不会影响源 PVC/PV 的正常运行;同样,删除源 PVC/PV 也不会自动删除已创建的 VolumeSnapshot(取决于 VolumeSnapshotClass 的删除策略)。
实践建议: 在生产环境中,建议为每个需要备份的 PVC 配置独立的 VolumeSnapshotClass,并设置合适的保留策略。快照操作本身对应用无侵入,但频繁快照可能影响后端存储性能,建议根据业务 RPO(恢复点目标)合理规划快照频率。
1.5 版本差异校验的起点
理解 VolumeSnapshot 的基本定义和与 PVC/PV 的关系,是后续进行版本差异校验的基础。不同 Kubernetes 版本(如 v1.20 到 v1.28)对 VolumeSnapshot 的 API 版本、字段支持、CSI 驱动兼容性存在显著差异。本章节建立的拓扑关系图将作为后续版本对比的参照基准。