Volume Snapshot and Clones Provisioning Examples
This example is more complex and is composed of six different stages:
- Stage 1: Create VolumeSnapshotClass.
- Stage 2: Create Example PVC and POD.
- Stage 3: Take a Snapshot from the PVC created in Stage #2.
- Stage 4: Create a PVC from the Snapshot created in Stage #3 and create a POD that uses it.
- Stage 5: Create a PVC from the PVC created in Stage #4 and create a POD that uses it.
- Stage 6: Uninstall Snapshot Workloads.
The examples are dependent on one another, so you must run them in order.
Stage 1: Create VolumeSnapshotClass
Create a VolumeSnapshotClass
:
kubectl create -f examples/snaps-example-snapshot-class.yaml
Stage 2: Create Example PVC
and POD
Running the following command:
kubectl create -f examples/snaps-example-pvc-workload.yaml
persistentvolumeclaim/example-pvc created
pod/example-pod created
Verify that PV
, PVC
are created and in Bounded
state and POD
is in Running
state.
kubectl get pv,pvc,pods
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO Delete Bound default/example-pvc example-sc 57s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/example-pvc Bound pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO example-sc 58s
NAME READY STATUS RESTARTS AGE
pod/example-pod 1/1 Running 0 58s
Stage 3: Take a Snapshot
from the PVC created in Stage #2
Create a snapshot from the previously created PVC
named example-pvc.
kubectl create -f examples/snaps-snapshot-from-pvc-workload.yaml
volumesnapshot.snapshot.storage.k8s.io/example-snapshot created
Verify that VolumeSnapshot
and VolumeSnapshotContent
were created, and that READYTOUSE
status is true.
kubectl get VolumeSnapshot,VolumeSnapshotContent
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE
volumesnapshot.snapshot.storage.k8s.io/example-snapshot true example-pvc 10Gi example-snapshot-sc snapcontent-3be9e67b-ece7-4f08-8c40-922a4e84247c 2s 7s
NAME DRIVER DELETIONPOLICY AGE
volumesnapshotclass.snapshot.storage.k8s.io/example-snapshot-sc csi.lightbitslabs.com Delete 81s
Stage 4: Create a PVC
from the Snapshot created in stage #3, and create a POD
that uses it
After your VolumeSnapshot object is bound, you can use that object to provision a new volume that is pre-populated with data from the snapshot.
The volume snapshot content object is used to restore the existing volume to a previous state.
Create a PVC
from the previously taken Snapshot
named example-snapshot
:
kubectl create -f examples/snaps-pvc-from-snapshot-workload.yaml
persistentvolumeclaim/example-pvc-from-snapshot created
pod/example-pvc-from-snapshot-pod created
Verify that PV
, PVC
were created and in Bounded
state, and that POD
is in Running
state.
kubectl get pv,pvc,pod
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO Delete Bound default/example-pvc example-sc 18m
persistentvolume/pvc-d1d20d2b-7fdd-4775-9107-ab8129841a74 10Gi RWO Delete Bound default/example-pvc-from-snapshot example-sc 2m24s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/example-pvc Bound pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO example-sc 18m
persistentvolumeclaim/example-pvc-from-snapshot Bound pvc-d1d20d2b-7fdd-4775-9107-ab8129841a74 10Gi RWO example-sc 2m25s
NAME READY STATUS RESTARTS AGE
pod/example-pod 1/1 Running 0 18m
pod/example-pvc-from-snapshot-pod 1/1 Running 0 2m25s
We see the PV
, PVC
and POD
s from Stage #2 as well.
Stage 5: Create a PVC
from the PVC
we created in stage #4, and create a POD
that uses it
Create a PVC
from the previously taken Snapshot
named example-snapshot.
kubectl create -f examples/snaps-pvc-from-pvc-workload.yaml
persistentvolumeclaim/example-pvc-from-pvc created
pod/example-pvc-from-pvc-pod created
Verify that PV
, PVC
were created and in Bounded
state, and that POD
is in Running
state.
kubectl get pv,pvc,pod
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-1fe22ed7-3b7e-4094-95a3-995538659c51 10Gi RWO Delete Bound default/example-pvc-from-pvc example-sc 15s
persistentvolume/pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO Delete Bound default/example-pvc example-sc 5h53m
persistentvolume/pvc-d1d20d2b-7fdd-4775-9107-ab8129841a74 10Gi RWO Delete Bound default/example-pvc-from-snapshot example-sc 5h36m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/example-pvc Bound pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO example-sc 5h53m
persistentvolumeclaim/example-pvc-from-pvc Bound pvc-1fe22ed7-3b7e-4094-95a3-995538659c51 10Gi RWO example-sc 23s
persistentvolumeclaim/example-pvc-from-snapshot Bound pvc-d1d20d2b-7fdd-4775-9107-ab8129841a74 10Gi RWO example-sc 5h36m
NAME READY STATUS RESTARTS AGE
pod/example-pod 1/1 Running 0 5h53m
pod/example-pvc-from-pvc-pod 1/1 Running 0 23s
pod/example-pvc-from-snapshot-pod 1/1 Running 0 5h36m
We see the PV
, PVC
and POD
s from Stages #2 and #4 as well.
Stage 6: Uninstall Snapshot Workloads
Note: Installation must be in reverse order of the deployment.
After each uninstall, we need to verify that all related resources were released before continuing to the next uninstall.
Uninstall pvc-from-pvc
:
kubectl delete -f examples/snaps-pvc-from-pvc-workload.yaml
persistentvolumeclaim "example-pvc-from-pvc" deleted
pod "example-pvc-from-pvc-pod" deleted
In order to verify that all resources are deleted, the following command should not generate any output:
kubectl get pv,pvc,pod | grep pvc-from-pvc
Uninstall pvc-from-snapshot
:
kubectl delete -f examples/snaps-pvc-from-snapshot-workload.yaml
persistentvolumeclaim "example-pvc-from-snapshot" deleted
pod "example-pvc-from-snapshot-pod" deleted
In order to verify that all resources are deleted, the following command should not generate any output:
kubectl get pv,pvc,pod | grep pvc-from-snapshot
Uninstall snapshot-from-pvc
:
kubectl delete -f examples/snaps-snapshot-from-pvc-workload.yaml
volumesnapshot.snapshot.storage.k8s.io "example-snapshot" deleted
In order to verify that all resources are deleted, the following command should not generate any output:
kubectl get VolumeSnapshot,VolumeSnapshotContent | grep snapshot-from-pvc
Uninstall example-pvc
:
kubectl delete -f examples/snaps-example-pvc-workload.yaml
persistentvolumeclaim "example-pvc" deleted
pod "example-pod" deleted
Verify that all resources are gone:
kubectl get pv,pvc,pods
No resources found in default namespace.
Delete VolumeSnapshotClass
:
kubectl delete -f examples/snaps-example-snapshot-class.yaml
volumesnapshotclass "example-snapshot-sc" deleted