Create volume snapshots

This document explains how to create a copy, or snapshot, of a storage volume at a specific point in time for your container application. A volume snapshot lets you bring a volume back to a prior state or provision a new volume.

This document is for developers within the application operator group, who are responsible for creating application workloads for their organization. For more information, see Audiences for GDC air-gapped documentation.

Before you begin

To complete the tasks in this document, you must have the following resources and roles:

  • To run commands against a Kubernetes cluster, make sure you have the following resources:

    • Locate the Kubernetes cluster name, or ask a member of the platform administrator group what the cluster name is.

    • Sign in and generate the kubeconfig file for the Kubernetes cluster if you don't have one.

    • Use the kubeconfig path of the Kubernetes cluster to replace KUBERNETES_CLUSTER_KUBECONFIG in these instructions.

  • To get the required permissions to manage volume snapshots in a shared cluster, ask your Organization IAM Admin to grant you the Namespace Admin role (namespace-admin) in your project namespace.

  • To get the required permissions to manage volume snapshots in a standard cluster, ask your Organization IAM Admin to grant you the Cluster Developer role (cluster-developer) in a standard cluster.

Take a volume snapshot

To take a snapshot of a PersistentVolumeClaim object, create a VolumeSnapshot object. The system does not guarantee data consistency. Pause the application and flush data before taking a snapshot.

  1. Create a VolumeSnapshot custom resource:

    kubectl --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG \  --namespace NAMESPACE apply -f - <<EOF apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata:  name: VOLUME_SNAPSHOT_NAME spec:  source:  persistentVolumeClaimName: PVC_NAME EOF 

    Replace the following:

    • KUBERNETES_CLUSTER_KUBECONFIG: the kubeconfig file for the cluster.

    • NAMESPACE: the namespace in which to create the volume snapshot. For shared clusters, this must be a project namespace. For standard clusters, it can be any namespace.

    • VOLUME_SNAPSHOT_NAME: the VolumeSnapshot object name.

    • PVC_NAME: the name of the PVC for which you are creating a snapshot.

  2. The snapshot operation is complete when the .status.readyToUse field becomes true. You can use the following command to check the status:

     kubectl --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG get volumesnapshot \  -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse' 
  3. Update the PVC manifest with the volume snapshot specified as a data source:

    kubectl --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG \  --namespace NAMESPACE apply -f - <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata:  name: PVC_NAME spec:  dataSource:  name: VOLUME_SNAPSHOT_NAME  kind: VolumeSnapshot  apiGroup: snapshot.storage.k8s.io  storageClassName: standard-rwo  accessModes:  - ReadWriteOnce resources:  requests:  storage: 10Gi EOF 

    Replace the following:

    • KUBERNETES_CLUSTER_KUBECONFIG: the kubeconfig file for the cluster.

    • NAMESPACE: the namespace in which the PVC resource exists. For shared clusters, this must be a project namespace. For standard clusters, it can be any namespace.

    • PVC_NAME: the name of the PVC for which you are creating a snapshot.

    • VOLUME_SNAPSHOT_NAME: the name of the volume snapshot.

What's next