Skip to content

存储快照与 CSI 相关资源

Kubernetes 的卷快照(VolumeSnapshot)是存储卷在某个时间点的只读副本。它由 CSI(Container Storage Interface)存储驱动实现,常用于:

场景说明
数据备份 / 恢复对重要应用的 PVC 定时打快照,出问题时从快照恢复数据
应用升级前的回滚保险升级前打快照,升级失败可快速回到升级前状态
克隆 / 复制环境从快照创建出新的卷,用于测试、联调或复制生产数据
数据迁移借助快照把数据搬到新卷 / 新存储类

快照与"备份"的关系

快照依赖存储后端实现,通常只记录变化的数据块(增量),速度快、占用小,但不能替代异地容灾备份。真正的离线备份仍需结合 Velero 等工具把数据搬到集群外。

本文覆盖 Kuboard 中 配置与存储 → 存储 分组下的相关页面:存储快照、存储快照类,以及 CSI 驱动程序、CSI 节点、CSI 存储容量、卷挂载四个只读资源页。

菜单默认不可见

存储快照、快照类及 CSI 相关资源默认不在左侧菜单中显示。若看不到这些菜单项,请集群管理员在 系统配置 → 菜单项设置 中启用对应的资源项,启用后菜单即时生效。

前提条件

条件说明
CSI 驱动支持快照底层存储的 CSI 驱动必须实现了快照能力(如阿里云 disk.csi.aliyun.com 等),不是所有存储都支持
已安装快照 CRD集群需安装 external-snapshotter 的三类 CRD:volumesnapshotsvolumesnapshotclassesvolumesnapshotcontentssnapshot.storage.k8s.io/v1)。若集群中看不到快照菜单或资源页提示不可用,需先部署外部快照控制器
存在快照类创建快照前需有对应的 VolumeSnapshotClass(见下文)
源 PVC 已就绪被快照的 PVC 需处于 Bound 状态,且其存储类由支持快照的 CSI 驱动供应

如何判断驱动是否支持快照

打开 存储 → CSI 驱动程序 详情页,可查看驱动的 volumeLifecycleModes 等特性;更直接的依据是集群里已存在可用的 VolumeSnapshotClass,且其 driver 与源 PVC 的存储类一致。

创建 VolumeSnapshot

入口:配置与存储 → 存储 → 存储快照,点击 创建

表单字段(均为必填):

字段对应 spec 字段说明
名称metadata.name快照名称,按名称空间隔离
快照类spec.volumeSnapshotClassName指定使用哪个 VolumeSnapshotClass(文本输入,如 demo-snapshot-class
源 PVCspec.source.persistentVolumeClaimName要对哪个 PVC 打快照(文本输入,如 my-pvc

操作步骤:

  1. 在列表页顶部选择集群与名称空间(快照是名称空间级资源);
  2. 点击 创建,填写名称、快照类与源 PVC;
  3. 点击 保存,在弹出的 YAML 预览 对话框中确认无误后创建;
  4. 返回列表,等待快照的 就绪状态 变为就绪后即可使用。

快照是异步完成的

创建成功后不会立即"完成"。K8s 会在后台调用 CSI 驱动打快照,进入详情页可看到 就绪状态readyToUse):就绪后才会生成绑定的快照内容(VolumeSnapshotContent),也才能用于恢复。

查看快照列表与详情

列表页:与 K8s 其他资源列表一致,支持集群 / 名称空间切换、按名称搜索、批量删除。

详情页包含两块内容:

区块展示内容
规约(Spec)快照类、源 PVC
状态(Status)就绪状态readyToUse,就绪为绿色标签);绑定的快照内容boundVolumeSnapshotContentDataObjectRef

详情页中的"绑定的快照内容"是一个只读引用链接,点击可跳转到对应的 VolumeSnapshotContent(快照内容)查看底层快照数据。VolumeSnapshotContent 是集群级(cluster-scoped)资源,没有独立的菜单页,此处以只读方式展示,避免跨命名空间误编辑。

从快照恢复 / 创建新 PVC

从快照"恢复"的本质是用快照作为数据源创建一个新的 PVC,再把工作负载挂到新 PVC 上:

  1. 存储 → 存储卷声明 页面点击 创建,打开创建表单;
  2. 表单没有直接的"数据源"字段,点击 保存 进入 YAML 预览 对话框;
  3. 在 YAML 的 spec 中补充 dataSource,指向要恢复的快照:
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-restored
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: <与快照相同驱动的存储类>
  resources:
    requests:
      storage: 10Gi
  dataSource:
    name: <快照名称>
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  1. 确认无误后创建;新卷的内容即快照时刻的数据。

恢复的前提

  • 快照必须已 就绪readyToUse = true);
  • 新 PVC 的存储类需与快照使用同一个 CSI 驱动(同一存储类通常最稳妥);
  • 恢复出的卷大小一般应不小于源卷,具体取决于存储后端对快照恢复的支持。

VolumeSnapshotClass(快照类)

VolumeSnapshotClass 是集群级资源,为快照定义两层信息:用哪个 CSI 驱动打快照、删除快照时的行为。

字段说明
名称快照类名称
驱动(driver提供快照能力的 CSI 驱动名称,如 disk.csi.aliyun.com
删除策略(deletionPolicyDelete:删除 VolumeSnapshot 时同时删除后端快照数据;Retain:删除 VolumeSnapshot 后保留后端数据

创建步骤:配置与存储 → 存储 → 存储快照类 → 创建,填写名称、选择驱动与删除策略(默认 Delete)后保存即可。

什么时候需要多个快照类

不同存储驱动各需要一个快照类;同一驱动也可以按删除策略拆成多个(如"留底保留"与"临时快照"各一个)。创建 VolumeSnapshot 时必须指定一个已存在的快照类。

deletionPolicy 的选择

Delete 会在删除快照时一并删掉后端数据,不可恢复;对需要长期保留的快照,建议使用 Retain 策略,或在使用 Delete 策略前确认该快照不再需要。

CSI 相关资源页

以下四个页面均只读(无创建 / 编辑入口),用于查看 CSI 生态的运行状态,通常在排障或容量规划时使用。

菜单项资源对象展示内容什么时候用
CSI 驱动程序CSIDriver集群已注册的 CSI 驱动及其特性:需要挂载(attachRequired)、挂载时 Pod 信息(podInfoOnMount)、存储容量(storageCapacity)、FS 组策略(fsGroupPolicy)、卷生命周期模式(volumeLifecycleModes确认某存储是否支持快照 / 容量感知调度 / 特定卷模式;对比驱动能力
CSI 节点CSINode每个节点上已注册的 CSI 驱动(节点 ID、拓扑键、可分配卷数)排障:某节点上驱动是否注册成功、卷能否调度到该节点
CSI 存储容量CSIStorageCapacity存储类在某拓扑区域的可分配容量、最大 / 最小卷大小、节点拓扑容量感知调度(storageCapacity 特性)下查看卷能否在指定区域创建
卷挂载VolumeAttachment某个 PV 挂载到哪个节点、由哪个驱动挂载、是否已挂载(attached)、挂载元数据、分离错误(detachError排障:卷挂载不上、节点迁移后卷状态异常

这些页面需要时再看

四个 CSI 资源页面向"查看",日常管理存储用不到;出现"存储卷创建 / 挂载 / 调度"类问题时,按 卷挂载 → CSI 节点 → CSI 存储容量 → CSI 驱动程序 的顺序排查即可。

常见注意点

注意点说明
快照依赖 CSI 驱动存储类由不支持快照的驱动供应时,无法对该 PVC 打快照,创建后快照会一直未就绪
快照占用后端配额云盘快照通常有数量与容量上限,会持续占用存储配额,请定期清理不再需要的快照
删除策略决定数据去向删除快照前确认其快照类为 Retain(保留)还是 Delete(连带删除后端数据)
就绪后才能恢复未就绪(readyToUse = false)的快照不能作为 PVC 数据源
快照类与存储类需匹配恢复 / 克隆出的新卷,其存储类应与快照使用同一 CSI 驱动
菜单默认隐藏本页所有资源默认在菜单中隐藏,需管理员在 系统配置 → 菜单项设置 中启用

相关页面