PVC快照功能和使用云服务器或者虚拟机的快照功能类似,可以针对存储某一刻的状态进行一个快照,无论数据出现严重丢失或者其他情况,都可以回滚数据。快照功能无论是块存储还是文件存储,操作步骤和原理一致。

注意:PVC快照功能需要Kubernetes版本在1.17以上,并且高于1.19时,需要单独安装Snapshot控制器,另外需要注意快照功能也需要后端存储的支持。

一、共享文件存储快照

特别说明:下面操作是基于之前的环境进行操作的,详细请点击---使用共享文件系统存储,这里就不重复演示部署环境了。

1.1 创建快照

1.创建snapshotClass

$ cd /root/rook/deploy/examples/csi/cephfs
$ k create -f snapshotclass.yaml

说明:文件默认即可,不用修改

2.验证snapshotClass是否创建成功,观察到已成功创建

[root@k8s-master01 cephfs]# k get volumesnapshotclass
NAME                         DRIVER                          DELETIONPOLICY   AGE
csi-cephfsplugin-snapclass   rook-ceph.cephfs.csi.ceph.com   Delete           5m55s

3.创建快照

$ cd /root/rook/deploy/examples/csi/cephfs
$ k create -f snapshot.yaml

共享文件存储快照-1

注意:snapshot.yaml文件中的PVC需要根据自己实际环境进行修改

4.验证快照是否创建成功,观察到已成功创建

[root@k8s-master01 cephfs]# k get volumesnapshot
NAME                  READYTOUSE   SOURCEPVC         SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS                SNAPSHOTCONTENT                                    CREATIONTIME   AGE
cephfs-pvc-snapshot   true         nginx-share-pvc                           2Gi           csi-cephfsplugin-snapclass   snapcontent-c6767763-2d43-455e-aeeb-7807b56c92b7   43s            43s

5.登录Ceph进一步验证快照是否创建成功,观察到已成功创建

共享文件存储快照-2

6.上面快照名字和我们自己查到快照名snapcontent-c6767763-2d43-455e-aeeb-7807b56c92b7是不一样的,如果想要查找ceph上快照名的对应关系,需要借助VolumeSnapshotContent,下面简单介绍下VolumeSnapshotContent

VolumeSnapshotContent(卷快照内容)是 Kubernetes 中的一个资源对象,用于表示卷快照的内容或数据。它与 VolumeSnapshot(卷快照)资源一起使用,用于创建和管理卷的快照。

VolumeSnapshotContent 包含了以下信息:

  • metadata:元数据部分包含关于 VolumeSnapshotContent 的基本信息,如名称、命名空间、标签等。
  • spec:规格部分定义了 VolumeSnapshotContent 的配置和属性。
  • volumeSnapshotRef:指定与该快照内容关联的 VolumeSnapshot 对象的引用。它包含了 VolumeSnapshot 的名称和 UID。
  • driver:指定了用于创建卷快照的驱动程序。这是一个字符串值,表示 Kubernetes 中已安装的卷快照驱动程序的名称。
  • source:指定了用于创建卷快照的卷的来源信息。它可以是 PersistentVolumeClaim(持久卷声明)或 VolumeSnapshot
  • snapshotHandle:指定了底层存储系统中快照的句柄。它是一个字符串值,用于唯一标识底层存储系统中的快照。
  • status:状态部分包含了 VolumeSnapshotContent 的当前状态信息。
  • creationTime:表示创建 VolumeSnapshotContent 的时间戳。
  • readyToUse:表示卷快照内容是否已准备就绪,可以用于还原或复制卷。
  • restoreSize:表示卷快照内容的还原大小。

VolumeSnapshotContent 可以通过 kubectl 命令或 Kubernetes API 进行创建和管理。它与 VolumeSnapshot 一起使用,用于跟踪和管理卷的快照数据。通过使用 VolumeSnapshotContentVolumeSnapshot,可以实现卷的备份、还原和复制等操作,提供更强大的数据管理和保护能力。

[root@k8s-master01 cephfs]# k get VolumeSnapshotContent snapcontent-c6767763-2d43-455e-aeeb-7807b56c92b7 -oyaml

共享文件存储快照-3

1.2 回滚PVC数据

1.根据pvc-restore.yaml文件核对storageClassName、name、storage大小(不能小于实际大小)

[root@k8s-master01 cephfs]# k get VolumeSnapshot cephfs-pvc-snapshot
NAME                  READYTOUSE   SOURCEPVC         SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS                SNAPSHOTCONTENT                                    CREATIONTIME   AGE
cephfs-pvc-snapshot   true         nginx-share-pvc                           2Gi           csi-cephfsplugin-snapclass   snapcontent-c6767763-2d43-455e-aeeb-7807b56c92b7   82m            82m
[root@k8s-master01 cephfs]# k get sc rook-cephfs
NAME          PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rook-cephfs   rook-ceph.cephfs.csi.ceph.com   Delete          Immediate           true                   24h

2.核对后进行相应的修改

$ cd /root/rook/deploy/examples/csi/cephfs
$ vim pvc-restore.yaml

共享文件存储回滚PVC数据-1

3.将快照恢复到新的PVC

$ cd /root/rook/deploy/examples/csi/cephfs
$ k create -f  pvc-restore.yaml

4.验证恢复PVC

[root@k8s-master01 cephfs]# k get pvc
NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
cephfs-pvc-restore   Bound    pvc-eb384ad1-ca09-4112-b64b-4b6fe62b9cc2   2Gi        RWX            rook-cephfs       11s
nginx-share-pvc      Bound    pvc-b94bb9f8-f7e4-48cd-82be-db9dee6c451d   2Gi        RWX            rook-cephfs       11h

1.3 快照资源清理

使用如下命令清除集群中本示例创建的资源

$ cd /root/rook/deploy/examples/csi/cephfs
$ k delete -f pvc-restore.yaml
$ k delete -f snapshot.yaml
$ k delete -f snapshotclass.yaml

二、块存储快照

特别说明:下面操作是基于之前的环境进行操作的,详细请点击---使用ceph块存储,这里就不重复演示部署环境了。

2.1 创建snapshotClass

1.创建snapshotClass

$ cd /root/rook/deploy/examples/csi/rbd
$ k create -f snapshotclass.yaml

说明:文件默认即可,不用修改

2.验证snapshotClass是否创建成功,观察到已成功创建

[root@k8s-master01 rbd]# k get volumesnapshotclass
NAME                         DRIVER                          DELETIONPOLICY   AGE
csi-rbdplugin-snapclass      rook-ceph.rbd.csi.ceph.com      Delete           4m36s

3.创建快照

$ cd /root/rook/deploy/examples/csi/rbd
$ k create -f snapshot.yaml

块存储快照-1

注意:snapshot.yaml文件中的PVC需要根据自己实际环境进行修改

4.验证快照是否创建成功,观察到已成功创建

[root@k8s-master01 rbd]#  k get volumesnapshot
NAME                  READYTOUSE   SOURCEPVC         SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS                SNAPSHOTCONTENT                                    CREATIONTIME   AGE
rbd-pvc-snapshot      true         mysql-pv-claim                            8Gi           csi-rbdplugin-snapclass      snapcontent-aa01a48a-fac7-4aec-aacd-4e2768cd9f3c   61s            61s

5.登录Ceph进一步验证快照是否创建成功,观察到已成功创建

块存储快照-2

6.上面快照名字和我们自己查到快照名snapcontent-aa01a48a-fac7-4aec-aacd-4e2768cd9f3c是不一样的,如果想要查找ceph上快照名的对应关系,需要借助VolumeSnapshotContent。

[root@k8s-master01 cephfs]# k get VolumeSnapshotContent snapcontent-aa01a48a-fac7-4aec-aacd-4e2768cd9f3c -oyaml

块存储快照-3

2.2 回滚PVC数据

1.根据pvc-restore.yaml文件核对storageClassName、name、storage大小(不能小于实际大小)

[root@k8s-master01 rbd]# k get VolumeSnapshot rbd-pvc-snapshot
NAME               READYTOUSE   SOURCEPVC        SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS             SNAPSHOTCONTENT                                    CREATIONTIME   AGE
rbd-pvc-snapshot   true         mysql-pv-claim                           8Gi           csi-rbdplugin-snapclass   snapcontent-aa01a48a-fac7-4aec-aacd-4e2768cd9f3c   44m            44m

[root@k8s-master01 rbd]# k get sc rook-ceph-block
NAME              PROVISIONER                  RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rook-ceph-block   rook-ceph.rbd.csi.ceph.com   Delete          Immediate           true                   9h

2.核对后进行相应的修改

$ cd /root/rook/deploy/examples/csi/rbd
$ vim pvc-restore.yaml

块存储回滚PVC数据-1

3.将快照恢复到新的PVC

$ cd /root/rook/deploy/examples/csi/cephfs
$ k create -f  pvc-restore.yaml

4.验证恢复PVC

[root@k8s-master01 rbd]# k get pvc
NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
mysql-pv-claim       Bound    pvc-f1f26550-43e5-4cc3-bf80-986ed5f7639f   8Gi        RWO            rook-ceph-block   9h
rbd-pvc-restore      Bound    pvc-2238d971-d572-4970-8003-2523e5ae9ca4   8Gi        RWO            rook-ceph-block   6s

2.3 快照资源清理

使用如下命令清除集群中本示例创建的资源

$ cd /root/rook/deploy/examples/csi/rbd
$ k delete -f pvc-restore.yaml
$ k delete -f snapshot.yaml
$ k delete -f snapshotclass.yaml