Title
Create new category
Edit page index title
Edit category
Edit link
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:
xxxxxxxxxxkubectl create -f examples/snaps-example-snapshot-class.yamlStage 2: Create Example PVC and POD
Running the following command:
xxxxxxxxxxkubectl create -f examples/snaps-example-pvc-workload.yamlpersistentvolumeclaim/example-pvc createdpod/example-pod createdVerify that PV, PVC are created and in Bounded state and POD is in Running state.
kubectl get pv,pvc,podsNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpersistentvolume/pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO Delete Bound default/example-pvc example-sc 57s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEpersistentvolumeclaim/example-pvc Bound pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO example-sc 58s NAME READY STATUS RESTARTS AGEpod/example-pod 1/1 Running 0 58sStage 3: Take a Snapshot from the PVC created in Stage #2
Create a snapshot from the previously created PVC named example-pvc.
xxxxxxxxxxkubectl create -f examples/snaps-snapshot-from-pvc-workload.yaml volumesnapshot.snapshot.storage.k8s.io/example-snapshot createdVerify that VolumeSnapshot and VolumeSnapshotContent were created, and that READYTOUSE status is true.
kubectl get VolumeSnapshot,VolumeSnapshotContent NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGEvolumesnapshot.snapshot.storage.k8s.io/example-snapshot true example-pvc 10Gi example-snapshot-sc snapcontent-3be9e67b-ece7-4f08-8c40-922a4e84247c 2s 7s NAME DRIVER DELETIONPOLICY AGEvolumesnapshotclass.snapshot.storage.k8s.io/example-snapshot-sc csi.lightbitslabs.com Delete 81sStage 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:
xxxxxxxxxxkubectl create -f examples/snaps-pvc-from-snapshot-workload.yaml persistentvolumeclaim/example-pvc-from-snapshot createdpod/example-pvc-from-snapshot-pod createdVerify that PV, PVC were created and in Bounded state, and that POD is in Running state.
kubectl get pv,pvc,podNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpersistentvolume/pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO Delete Bound default/example-pvc example-sc 18mpersistentvolume/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 AGEpersistentvolumeclaim/example-pvc Bound pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO example-sc 18mpersistentvolumeclaim/example-pvc-from-snapshot Bound pvc-d1d20d2b-7fdd-4775-9107-ab8129841a74 10Gi RWO example-sc 2m25s NAME READY STATUS RESTARTS AGEpod/example-pod 1/1 Running 0 18mpod/example-pvc-from-snapshot-pod 1/1 Running 0 2m25sWe see the PV, PVC and PODs 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.
xxxxxxxxxxkubectl create -f examples/snaps-pvc-from-pvc-workload.yaml persistentvolumeclaim/example-pvc-from-pvc createdpod/example-pvc-from-pvc-pod createdVerify that PV, PVC were created and in Bounded state, and that POD is in Running state.
kubectl get pv,pvc,podNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpersistentvolume/pvc-1fe22ed7-3b7e-4094-95a3-995538659c51 10Gi RWO Delete Bound default/example-pvc-from-pvc example-sc 15spersistentvolume/pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO Delete Bound default/example-pvc example-sc 5h53mpersistentvolume/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 AGEpersistentvolumeclaim/example-pvc Bound pvc-797e45c0-2333-47ce-9a5e-2bb46b101163 10Gi RWO example-sc 5h53mpersistentvolumeclaim/example-pvc-from-pvc Bound pvc-1fe22ed7-3b7e-4094-95a3-995538659c51 10Gi RWO example-sc 23spersistentvolumeclaim/example-pvc-from-snapshot Bound pvc-d1d20d2b-7fdd-4775-9107-ab8129841a74 10Gi RWO example-sc 5h36m NAME READY STATUS RESTARTS AGEpod/example-pod 1/1 Running 0 5h53mpod/example-pvc-from-pvc-pod 1/1 Running 0 23spod/example-pvc-from-snapshot-pod 1/1 Running 0 5h36mWe see the PV, PVC and PODs 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:
xxxxxxxxxxkubectl delete -f examples/snaps-pvc-from-pvc-workload.yamlpersistentvolumeclaim "example-pvc-from-pvc" deletedpod "example-pvc-from-pvc-pod" deletedIn order to verify that all resources are deleted, the following command should not generate any output:
xxxxxxxxxxkubectl get pv,pvc,pod | grep pvc-from-pvcUninstall pvc-from-snapshot:
xxxxxxxxxxkubectl delete -f examples/snaps-pvc-from-snapshot-workload.yaml persistentvolumeclaim "example-pvc-from-snapshot" deletedpod "example-pvc-from-snapshot-pod" deletedIn order to verify that all resources are deleted, the following command should not generate any output:
xxxxxxxxxxkubectl get pv,pvc,pod | grep pvc-from-snapshotUninstall snapshot-from-pvc:
xxxxxxxxxxkubectl delete -f examples/snaps-snapshot-from-pvc-workload.yaml volumesnapshot.snapshot.storage.k8s.io "example-snapshot" deletedIn order to verify that all resources are deleted, the following command should not generate any output:
xxxxxxxxxxkubectl get VolumeSnapshot,VolumeSnapshotContent | grep snapshot-from-pvcUninstall example-pvc:
xxxxxxxxxxkubectl delete -f examples/snaps-example-pvc-workload.yaml persistentvolumeclaim "example-pvc" deletedpod "example-pod" deletedVerify that all resources are gone:
xxxxxxxxxxkubectl get pv,pvc,podsNo resources found in default namespace.Delete VolumeSnapshotClass:
xxxxxxxxxxkubectl delete -f examples/snaps-example-snapshot-class.yamlvolumesnapshotclass "example-snapshot-sc" deleted© 2026 Lightbits Labs™