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