CSI volume cloning

Volume cloning duplicates an existing persistent volume to help protect against data loss in OKD. This feature is only available with supported Container Storage Interface (CSI) drivers. You should be familiar with persistent volumes before you provision a CSI volume clone.

Overview of CSI volume cloning

A Container Storage Interface (CSI) volume clone is a duplicate of an existing persistent volume at a particular point in time.

Volume cloning is similar to volume snapshots, although it is more efficient. For example, a cluster administrator can duplicate a cluster volume by creating another instance of the existing cluster volume.

Cloning creates an exact duplicate of the specified volume on the back-end device, rather than creating a new empty volume. After dynamic provisioning, you can use a volume clone just as you would use any standard volume.

No new API objects are required for cloning. The existing dataSource field in the PersistentVolumeClaim object is expanded so that it can accept the name of an existing PersistentVolumeClaim in the same namespace.

Support limitations

By default, OKD supports CSI volume cloning with these limitations:

  • The destination persistent volume claim (PVC) must exist in the same namespace as the source PVC.

  • The source and destination storage class must be the same.

  • Support is only available for CSI drivers. In-tree and FlexVolumes are not supported.

  • OKD does not include any CSI drivers. Use the CSI drivers provided by community or storage vendors. Follow the installation instructions provided by the CSI driver.

  • CSI drivers might not have implemented the volume cloning functionality. For details, see the CSI driver documentation.

  • OKD 4.7 supports version 1.1.0 of the CSI specification.

Provisioning a CSI volume clone

When you create a cloned persistent volume claim (PVC) API object, you trigger the provisioning of a CSI volume clone. The clone pre-populates with the contents of another PVC, adhering to the same rules as any other persistent volume. The one exception is that you must add a dataSource that references an existing PVC in the same namespace.

Prerequisites

  • You are logged in to a running OKD cluster.

  • Your PVC is created using a CSI driver that supports volume cloning.

  • Your storage back end is configured for dynamic provisioning. Cloning support is not available for static provisioners.

Procedure

To clone a PVC from an existing PVC:

  1. Create and save a file with the PersistentVolumeClaim object described by the following YAML:

    pvc-clone.yaml

    1. apiVersion: v1
    2. kind: PersistentVolumeClaim
    3. metadata:
    4. name: pvc-1-clone
    5. namespace: mynamespace
    6. spec:
    7. storageClassName: csi-cloning (1)
    8. accessModes:
    9. - ReadWriteOnce
    10. resources:
    11. requests:
    12. storage: 5Gi
    13. dataSource:
    14. kind: PersistentVolumeClaim
    15. name: pvc-1
    1The name of the storage class that provisions the storage back end. The default storage class can be used and storageClassName can be omitted in the spec.
  2. Create the object you saved in the previous step by running the following command:

    1. $ oc create -f pvc-clone.yaml

    A new PVC pvc-1-clone is created.

  3. Verify that the volume clone was created and is ready by running the following command:

    1. $ oc get pvc pvc-1-clone

    The pvc-1-clone shows that it is Bound.

    You are now ready to use the newly cloned PVC to configure a pod.

  4. Create and save a file with the Pod object described by the YAML. For example:

    1. kind: Pod
    2. apiVersion: v1
    3. metadata:
    4. name: mypod
    5. spec:
    6. containers:
    7. - name: myfrontend
    8. image: dockerfile/nginx
    9. volumeMounts:
    10. - mountPath: "/var/www/html"
    11. name: mypd
    12. volumes:
    13. - name: mypd
    14. persistentVolumeClaim:
    15. claimName: pvc-1-clone (1)
    1The cloned PVC created during the CSI volume cloning operation.

    The created Pod object is now ready to consume, clone, snapshot, or delete your cloned PVC independently of its original dataSource PVC.