How to Create and Restore from Snapshots of Volumes Used in Kubernetes Clusters

Prerequisite

You must have an existing volume in use in your cluster, which you can create by creating a PersistentVolumeClaim (PVC). For the purposes of this tutorial, presume we have already created a PVC by calling kubectl create -f your_pvc_file.yaml with a YAML file that looks like this:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-do-test-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: do-block-storage

Create a Snapshot

To create a snapshot of a volume, call kubectl create -f your_snapshot_file.yaml and specify the desired PVC. Here’s an example of a YAML file that defines a snapshot:

apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshot
metadata:
  name: csi-do-test-snapshot
spec:
  source:
    name: csi-do-test-pvc
    kind: PersistentVolumeClaim

You can now observe the state of your volumes and snapshots in the DigitalOcean Control Panel or by using the following command:

$ kubectl get pvc && kubectl get pv && kubectl get volumesnapshot

Restore from a snapshot:

To restore from a given snapshot, you need to create a new PVC that refers to the snapshot by calling kubectl create -f your_restore_file.yaml. Here’s an example of a YAML file that restores from a snapshot and creates a new PVC for use in the cluster:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-do-test-pvc-restore
spec:
  dataSource:
    name: csi-do-test-snapshot
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

For more information

For more details and examples of snapshot use in Kubernetes, see the official Kubernetes blog announcement.