首页/云/Kubernetes 速查/VolumeSnapshot 卷快照
配置与存储54 条

VolumeSnapshot 卷快照

CSI 快照 API(snapshot.storage.k8s.io/v1):用 VolumeSnapshotClass + VolumeSnapshot 对 PVC 打快照,由存储侧提供能力。

Kubernetes 速查云更新于 2026-10-13

快照由谁提供

卷快照是存储接口的扩展能力:Kubernetes 只定义接口与对象,真正的数据点由存储驱动在存储侧创建。集群需要先安装快照控制器与对应的接口定义,再把驱动配置成快照类,之后才能用快照对象给卷声明打点。恢复时从快照创建一个新卷,而不是直接回滚原卷。

基本信息

接口组snapshot.storage.k8s.io/v1
前置条件驱动支持快照,集群已装快照控制器与接口定义
核心对象快照类、快照、快照内容
恢复方式以快照为数据源创建新的卷声明
关键状态就绪标志为真才可被使用

典型使用场景

  • 数据库变更前的保护点,出问题可快速拉起副本验证
  • 版本发布前给数据卷打点,便于快速回退数据状态
  • 搭建测试环境:从生产快照复制一份数据,不必导出导入
  • 长期归档:按策略定期打点并保留指定份数
  • 迁移前的数据副本,降低操作风险

创建快照

创建快照
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: mysql-snap-1012
  namespace: prod
spec:
  volumeSnapshotClassName: csi-snapclass    # 指定快照类
  source:
    persistentVolumeClaimName: mysql-data   # 要打快照的卷声明

查看与恢复

查看与恢复
kubectl get volumesnapshot -n prod                        # 快照列表
kubectl describe volumesnapshot mysql-snap-1012 -n prod | grep -i ready   # 就绪状态
kubectl get volumesnapshotclass                           # 可用快照类
# 恢复时新建声明,并把快照设为数据源,不要改原声明

对象与状态读法

对象或状态含义注意点
快照类描述由哪个驱动创建快照与存储驱动配置必须对应
快照一次打点请求与结果就绪前不能作为恢复来源
快照内容存储侧的实际数据点由控制器创建,通常不手工修改
就绪标志数据点是否可用脚本中要等待该标志为真
应用持续写入时直接打快照不保证事务一致。数据库应先刷新落盘或短暂加锁,或使用存储侧提供的一致性组,否则恢复出来的数据可能处于中间状态。
快照通常依赖存储侧的写时复制实现,速度快但占用的容量随后续写入量增长。保留策略要配合存储容量一起评估,避免大量快照耗尽空间。

易错点

  • 在就绪标志为真之前就尝试恢复:恢复操作会失败或拿到不完整数据
  • 应用运行中直接打快照:数据没有事务一致性,恢复后需要额外的数据修复
  • 以为快照能原地回滚:恢复是通过新卷实现的,原卷不会被改写
  • 长期保留大量快照不清理:存储侧增量占用持续增长,最终耗尽后端容量

数据来源与参考

  • Kubernetes 官方文档 · Volume Snapshots
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌