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_KUBECONFIGin 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.
Create a
VolumeSnapshotcustom 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 EOFReplace 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: theVolumeSnapshotobject name.PVC_NAME: the name of the PVC for which you are creating a snapshot.
The snapshot operation is complete when the
.status.readyToUsefield becomestrue. 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'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 EOFReplace 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.