Files
my-rook-config/Documentation/Storage-Configuration/Ceph-CSI/ceph-csi-snapshot.md
T
yati1998 5fb14b549e docs: update documentation for volume clone
after cross-storageclass clone/restore, now we can
clone across different storageclass.
this commit updates the documentation indicating
the same.

Signed-off-by: yati1998 <ypadia@redhat.com>
(cherry picked from commit 945da179e2)
2024-05-16 15:01:25 +00:00

186 lines
7.1 KiB
Markdown

---
title: Snapshots
---
## Prerequisites
- Install the [snapshot controller and snapshot v1 CRD](https://github.com/kubernetes-csi/external-snapshotter/tree/master#usage).
- We also need a `VolumeSnapshotClass` for volume snapshot to work. The purpose of a `VolumeSnapshotClass` is
defined in [the kubernetes
documentation](https://kubernetes.io/docs/concepts/storage/volume-snapshot-classes/).
In short, as the documentation describes it:
!!! info
Just like StorageClass provides a way for administrators to describe the
"classes" of storage they offer when provisioning a volume,
VolumeSnapshotClass provides a way to describe the "classes" of storage when
provisioning a volume snapshot.
## RBD Snapshots
### RBD VolumeSnapshotClass
In [VolumeSnapshotClass](https://github.com/rook/rook/tree/master/deploy/examples/csi/rbd/snapshotclass.yaml),
the `csi.storage.k8s.io/snapshotter-secret-name` parameter should reference the
name of the secret created for the rbdplugin and `pool` to reflect the Ceph pool name.
Update the value of the `clusterID` field to match the namespace that Rook is
running in. When Ceph CSI is deployed by Rook, the operator will automatically
maintain a configmap whose contents will match this key. By default this is
"rook-ceph".
```console
kubectl create -f deploy/examples/csi/rbd/snapshotclass.yaml
```
### Volumesnapshot
In [snapshot](https://github.com/rook/rook/tree/master/deploy/examples/csi/rbd/snapshot.yaml),
`volumeSnapshotClassName` should be the name of the `VolumeSnapshotClass`
previously created. The `persistentVolumeClaimName` should be the name of the
PVC which is already created by the RBD CSI driver.
```console
kubectl create -f deploy/examples/csi/rbd/snapshot.yaml
```
### Verify RBD Snapshot Creation
```console
$ kubectl get volumesnapshotclass
NAME DRIVER DELETIONPOLICY AGE
csi-rbdplugin-snapclass rook-ceph.rbd.csi.ceph.com Delete 3h55m
```
```console
$ kubectl get volumesnapshot
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE
rbd-pvc-snapshot true rbd-pvc 1Gi csi-rbdplugin-snapclass snapcontent-79090db0-7c66-4b18-bf4a-634772c7cac7 3h50m 3h51m
```
The snapshot will be ready to restore to a new PVC when the `READYTOUSE` field of the
`volumesnapshot` is set to true.
### Restore the RBD snapshot to a new PVC
In [pvc-restore](https://github.com/rook/rook/tree/master/deploy/examples/csi/rbd/pvc-restore.yaml),
`dataSource` should be the name of the `VolumeSnapshot` previously
created. The `dataSource` kind should be the `VolumeSnapshot`. The `storageClassName`
can be any RBD storageclass.
Please Note:
* `provisioner` must be the same for both the Parent PVC and the restored PVC.
* The non-encrypted PVC cannot be restored to an encrypted one and vice-versa.
* encrypted -> encrypted (possible)
* non-encrypted -> non-encrypted (possible)
* encrypted -> non-encrypted (not possible)
* non-encrypted -> encrypted (not possible)
Create a new PVC from the snapshot
```console
kubectl create -f deploy/examples/csi/rbd/pvc-restore.yaml
```
### Verify RBD Clone PVC Creation
```console
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
rbd-pvc Bound pvc-84294e34-577a-11e9-b34f-525400581048 1Gi RWO rook-ceph-block 34m
rbd-pvc-restore Bound pvc-575537bf-577f-11e9-b34f-525400581048 1Gi RWO rook-ceph-block 8s
```
## RBD snapshot resource Cleanup
To clean your cluster of the resources created by this example, run the following:
```console
kubectl delete -f deploy/examples/csi/rbd/pvc-restore.yaml
kubectl delete -f deploy/examples/csi/rbd/snapshot.yaml
kubectl delete -f deploy/examples/csi/rbd/snapshotclass.yaml
```
## CephFS Snapshots
### CephFS VolumeSnapshotClass
In [VolumeSnapshotClass](https://github.com/rook/rook/tree/master/deploy/examples/csi/cephfs/snapshotclass.yaml),
the `csi.storage.k8s.io/snapshotter-secret-name` parameter should reference the
name of the secret created for the cephfsplugin.
In the volumesnapshotclass, update the value of the `clusterID` field to match the namespace that Rook is
running in. When Ceph CSI is deployed by Rook, the operator will automatically
maintain a configmap whose contents will match this key. By default this is
"rook-ceph".
```console
kubectl create -f deploy/examples/csi/cephfs/snapshotclass.yaml
```
### VolumeSnapshot
In [snapshot](https://github.com/rook/rook/tree/master/deploy/examples/csi/cephfs/snapshot.yaml),
`volumeSnapshotClassName` should be the name of the `VolumeSnapshotClass`
previously created. The `persistentVolumeClaimName` should be the name of the
PVC which is already created by the CephFS CSI driver.
```console
kubectl create -f deploy/examples/csi/cephfs/snapshot.yaml
```
### Verify CephFS Snapshot Creation
```console
$ kubectl get volumesnapshotclass
NAME DRIVER DELETIONPOLICY AGE
csi-cephfslugin-snapclass rook-ceph.cephfs.csi.ceph.com Delete 3h55m
```
```console
$ kubectl get volumesnapshot
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE
cephfs-pvc-snapshot true cephfs-pvc 1Gi csi-cephfsplugin-snapclass snapcontent-34476204-a14a-4d59-bfbc-2bbba695652c 3h50m 3h51m
```
The snapshot will be ready to restore to a new PVC when `READYTOUSE` field of the
`volumesnapshot` is set to true.
### Restore the CephFS snapshot to a new PVC
In
[pvc-restore](https://github.com/rook/rook/tree/master/deploy/examples/csi/cephfs/pvc-restore.yaml),
`dataSource` should be the name of the `VolumeSnapshot` previously
created. The `dataSource` kind should be the `VolumeSnapshot`.
Create a new PVC from the snapshot
```console
kubectl create -f deploy/examples/csi/cephfs/pvc-restore.yaml
```
### Verify CephFS Restore PVC Creation
```console
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
cephfs-pvc Bound pvc-74734901-577a-11e9-b34f-525400581048 1Gi RWX rook-cephfs 55m
cephfs-pvc-restore Bound pvc-95308c75-6c93-4928-a551-6b5137192209 1Gi RWX rook-cephfs 34s
```
## CephFS snapshot resource Cleanup
To clean your cluster of the resources created by this example, run the following:
```console
kubectl delete -f deploy/examples/csi/cephfs/pvc-restore.yaml
kubectl delete -f deploy/examples/csi/cephfs/snapshot.yaml
kubectl delete -f deploy/examples/csi/cephfs/snapshotclass.yaml
```
## Limitations
- There is a limit of 400 snapshots per cephFS filesystem.
- The PVC cannot be deleted if it has snapshots. make sure all the snapshots on the PVC are deleted before you delete the PVC.