Fixes: #1803 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
7.6 KiB
Create snapshot and Clone Volume
Prerequisite
-
For snapshot functionality to be supported for your Kubernetes cluster, the Kubernetes version running in your cluster should be >= v1.17. We also need the
snapshot controller
deployed in your Kubernetes cluster along withcsi-snapshotter
sidecar container. Refer external-snapshotter for more information on these sidecar controllers. There should be avolumesnapshotclass
object present in the cluster for snapshot request to be satisfied.-
To install snapshot controller and CRD
./scripts/install-snapshot.sh install
To install from specific external-snapshotter version, you can leverage
SNAPSHOT_VERSION
variable, for example:SNAPSHOT_VERSION="v4.0.0" ./scripts/install-snapshot.sh install
-
In the future, you can choose to cleanup by running
./scripts/install-snapshot.sh cleanup
-
NOTE: At present, there is a limit of 400 snapshots per cephFS filesystem. Also PVC cannot be deleted if it's having snapshots. Make sure all the snapshots on the PVC are deleted before you delete the PVC.
Create CephFS Snapshot and Clone Volume
Create SnapshotClass
kubectl create -f ../examples/cephfs/snapshotclass.yaml
Create Snapshot
The snapshot is created on/for an existing PVC. You should have a PVC in bound state before creating snapshot from it. It is recommended to create a volume snapshot or a PVC clone only when the PVC is not in use. Please refer pvc creation doc for more information on how to create a PVC.
- Verify if PVC is in Bound state
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
csi-cephfs-pvc Bound pvc-1ea51547-a88b-4ab0-8b4a-812caeaf025d 1Gi RWX csi-cephfs-sc 20h
- Create snapshot of the bound PVC
$ kubectl create -f ../examples/cephfs/snapshot.yaml
volumesnapshot.snapshot.storage.k8s.io/cephfs-pvc-snapshot created
- Get details about the snapshot
$ kubectl get volumesnapshot
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE
cephfs-pvc-snapshot true csi-cephfs-pvc 1Gi csi-cephfsplugin-snapclass snapcontent-34476204-a14a-4d59-bfbc-2bbba695652c 3s 6s
- Get details about the volumesnapshotcontent
$ kubectl get volumesnapshotcontent
NAME READYTOUSE RESTORESIZE DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT AGE
snapcontent-34476204-a14a-4d59-bfbc-2bbba695652c true 1073741824 Delete cephfs.csi.ceph.com csi-cephfsplugin-snapclass cephfs-pvc-snapshot 64s
Restore Snapshot to a new PVC
kubectl create -f ../examples/cephfs/pvc-restore.yaml
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
csi-cephfs-pvc Bound pvc-1ea51547-a88b-4ab0-8b4a-812caeaf025d 1Gi RWX csi-cephfs-sc 20h
cephfs-pvc-restore Bound pvc-95308c75-6c93-4928-a551-6b5137192209 1Gi RWX csi-cephfs-sc 11m
Clone PVC
kubectl create -f ../examples/cephfs/pvc-clone.yaml
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
csi-cephfs-pvc Bound pvc-1ea51547-a88b-4ab0-8b4a-812caeaf025d 1Gi RWX csi-cephfs-sc 20h
cephfs-pvc-clone Bound pvc-b575bc35-d521-4c41-b4f9-1d733cd28fdf 1Gi RWX csi-cephfs-sc 39s
cephfs-pvc-restore Bound pvc-95308c75-6c93-4928-a551-6b5137192209 1Gi RWX csi-cephfs-sc 55m
Create RBD Snapshot and Clone Volume
In the examples/rbd
directory you will find two files related to snapshots:
snapshotclass.yaml
and snapshot.yaml
Once you created RBD PVC, you'll need to customize snapshotclass.yaml
and
make sure the clusterid
parameter matches clusterid
mentioned in the
storageclass from which the PVC got created.
If you followed the documentation to create the rbdplugin, you shouldn't
have to edit any other file.
After configuring everything you needed, deploy the snapshotclass:
Create RBD-SnapshotClass
kubectl create -f snapshotclass.yaml
Verify that the SnapshotClass was created
$ kubectl get volumesnapshotclass
NAME AGE
csi-rbdplugin-snapclass 4s
Create rbd-Snapshot
kubectl create -f snapshot.yaml
Verify if your Volume Snapshot has successfully been created
$ kubectl get volumesnapshot
NAME AGE
rbd-pvc-snapshot 6s
Check the status of the Snapshot
$ kubectl describe volumesnapshot rbd-pvc-snapshot
Name: rbd-pvc-snapshot
Namespace: default
Labels: <none>
Annotations: <none>
API Version: snapshot.storage.k8s.io/v1alpha1
Kind: VolumeSnapshot
Metadata:
Creation Timestamp: 2019-02-06T08:52:34Z
Finalizers:
snapshot.storage.kubernetes.io/volumesnapshot-protection
Generation: 5
Resource Version: 84239
Self Link: /apis/snapshot.storage.k8s.io/v1alpha1/namespaces/default/volumesnapshots/rbd-pvc-snapshot
UID: 8b9b5740-29ec-11e9-8e0f-b8ca3aad030b
Spec:
Snapshot Class Name: csi-rbdplugin-snapclass
Snapshot Content Name: snapcontent-8b9b5740-29ec-11e9-8e0f-b8ca3aad030b
Source:
API Group: <nil>
Kind: PersistentVolumeClaim
Name: rbd-pvc
Status:
Creation Time: 2019-02-06T08:52:34Z
Ready To Use: true
Restore Size: 1Gi
Events: <none>
Restore the Snapshot
To restore the snapshot to a new PVC, create pvc-restore.yaml and a testing pod pod-restore.yaml
kubectl create -f pvc-restore.yaml
kubectl create -f pod-restore.yaml
Clone the PVC
$ kubectl create -f ../examples/rbd/pvc-clone.yaml
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
rbd-pvc Bound pvc-c2ffdc98-3abe-4b07-838c-35a2a8067771 1Gi RWO rook-ceph-block 41m
rbd-pvc-clone Bound pvc-b575bc35-d521-4c41-b4f9-1d733cd28fdf 1Gi RWO rook-ceph-block 45m
rbd-pvc-restore Bound pvc-95308c75-6c93-4928-a551-6b5137192209 1Gi RWO rook-ceph-block 45m