Deploying Snapshot and Clones Workloads
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.
For Helm to deploy the snaps
chart in stages, we introduce the mandatory variable snaps.stage
The chart supports the following stages:
- snapshot-class
- example-pvc
- snapshot-from-pvc
- pvc-from-snapshot
- pvc-from-pvc
Stage 1: Create VolumeSnapshotClass
Create a VolumeSnapshotClass
:
helm install \
--set snaps.enabled=true \
--set snaps.stage=snapshot-class \
lb-csi-workload-snaps-snapshot-class \
lightbits-helm-repo/lb-csi-workload-examples
Stage 2: Create Example PVC
and POD
Running the following command:
helm install \
--set snaps.enabled=true \
--set snaps.stage=example-pvc \
lb-csi-workload-snaps-example-pvc \
lightbits-helm-repo/lb-csi-workload-examples
Will output:
NAME: lb-csi-workload-snaps-example-pvc
LAST DEPLOYED: Sun Feb 21 16:09:02 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Verify that PV
, PVC
are created and in Bounded
state, and that 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.
helm install \
--set snaps.enabled=true \
--set snaps.stage=snapshot-from-pvc \
lb-csi-workload-snaps-snapshot-from-pvc \
lightbits-helm-repo/lb-csi-workload-examples
Will output:
NAME: lb-csi-workload-snaps-snapshot-from-pvc
LAST DEPLOYED: Tue Feb 23 13:11:16 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Verify that VolumeSnapshot
and VolumeSnapshotContent
were created, and 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-b710e398-eaa5-45be-bbdc-db74d799e5cc 3m40s 3m49s
NAME READYTOUSE RESTORESIZE DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT AGE
volumesnapshotcontent.snapshot.storage.k8s.io/snapcontent-b710e398-eaa5-45be-bbdc-db74d799e5cc true 10737418240 Delete csi.lightbitslabs.com example-snapshot-sc example-snapshot 3m49s
Stage 4: Create a PVC
from the Snapshot created in Stage 3 and create a POD
that uses it
Create a PVC
from the previously taken Snapshot
named example-snapshot.
helm install \
--set snaps.enabled=true \
--set snaps.stage=pvc-from-snapshot \
lb-csi-workload-snaps-pvc-from-snapshot \
lightbits-helm-repo/lb-csi-workload-examples
Will output:
NAME: lb-csi-workload-snaps-pvc-from-snapshot
LAST DEPLOYED: Tue Feb 23 13:16:26 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Verify that PV
, PVC
are 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
created in Stage 3 and create a POD
that uses it
Create a PVC
from the previously taken Snapshot
named example-snapshot.
helm install \
--set snaps.enabled=true \
--set snaps.stage=pvc-from-pvc \
lb-csi-workload-snaps-pvc-from-pvc \
lightbits-helm-repo/lb-csi-workload-examples
Will output:
NAME: lb-csi-workload-snaps-pvc-from-pvc
LAST DEPLOYED: Tue Feb 23 13:16:26 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
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
If we list the releases installed, we will see:
helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
lb-csi-workload-sc default 1 2021-02-23 08:06:39.915046 +0200 IST deployed lb-csi-workload-examples-0.1.0 1.4.0
lb-csi-workload-snaps-example-pvc default 1 2021-02-23 12:59:55.458252038 +0200 IST deployed lb-csi-workload-examples-0.1.0 1.4.0
lb-csi-workload-snaps-pvc-from-pvc default 1 2021-02-23 18:52:41.391731359 +0200 IST deployed lb-csi-workload-examples-0.1.0 1.4.0
lb-csi-workload-snaps-pvc-from-snapshot default 1 2021-02-23 13:16:26.020897186 +0200 IST deployed lb-csi-workload-examples-0.1.0 1.4.0
lb-csi-workload-snaps-snapshot-from-pvc default 1 2021-02-23 13:11:16.746865829 +0200 IST deployed lb-csi-workload-examples-0.1.0 1.4.0
The 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
:
helm uninstall lb-csi-workload-snaps-pvc-from-pvc
In order to verify that all resources are deleted, the following command should return no entry:
kubectl get pv,pvc,pod | grep pvc-from-pvc
Uninstall pvc-from-snapshot
:
helm uninstall lb-csi-workload-snaps-pvc-from-snapshot
In order to verify that all resources are deleted, the following command should return no entry:
kubectl get pv,pvc,pod | grep pvc-from-snapshot
Uninstall snapshot-from-pvc
:
helm uninstall lb-csi-workload-snaps-snapshot-from-pvc
In order to verify that all resources are deleted, the following command should return no entry:
kubectl get VolumeSnapshot,VolumeSnapshotContent | grep snapshot-from-pvc
Uninstall example-pvc
:
helm uninstall lb-csi-workload-snaps-example-pvc
Verify that all resources are gone:
kubectl get pv,pvc,pods
No resources found in default namespace.
Delete VolumeSnapshotClass
:
helm uninstall lb-csi-workload-snaps-snapshot-class