tencent cloud

Feedback

Creating Snapshot and Using It to Restore Volume

Last updated: 2022-05-23 16:56:35

    Overview

    If you need to create a snapshot of the PVC data disk to back up data, or to restore the backup snapshot data to a new PVC, you can use the CBS-CSI add-on. This document describes how to use the CBS-CSI add-on to implement data backup and restoration of PVC.

    Prerequisites

    • You have created a TKE cluster on v1.18 or later versions. For more information, see Creating a Cluster.
    • You have installed the latest version of CBS-CSI.

    Directions

    Backing up PVC

    Creating VolumeSnapshotClass

    1. Use the following YAML to create a VolumeSnapshotClass object:

      apiVersion: snapshot.storage.k8s.io/v1beta1
      kind: VolumeSnapshotClass
      metadata: 
      name: cbs-snapclass
      driver: com.tencent.cloud.csi.cbs
      deletionPolicy: Delete
      
    2. Run the following command to see if the VolumeSnapshotClass is created successfully:

      $ kubectl get volumesnapshotclass
      NAME            DRIVER                      DELETIONPOLICY   AGE
      cbs-snapclass   com.tencent.cloud.csi.cbs   Delete           17m
      

    Creating PVC snapshot VolumeSnapshot

    1. This document takes new-snapshot-demo as an example to use the following YAML to create a VolumeSnapshot object.
      apiVersion: snapshot.storage.k8s.io/v1beta1
      kind: VolumeSnapshot
      metadata:
      name: new-snapshot-demo
      spec:
      volumeSnapshotClassName: cbs-snapclass
      source:
      persistentVolumeClaimName: csi-pvc
      
    1. Run the following command to check whether the Volumesnapshot and Volumesnapshotcontent objects have been created successfully. If READYTOUSE is true, the creation is successful.
      $ kubectl get volumesnapshot
      NAME                READYTOUSE   SOURCEPVC            SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS   SNAPSHOTCONTENT                                    CREATIONTIME   AGE
      new-snapshot-demo   true         www1-ivantestweb-0                           10Gi          cbs-snapclass   snapcontent-ea11a797-d438-4410-ae21-41d9147fe610   22m            22m
      
    $ kubectl get volumesnapshotcontent
    NAME                                               READYTOUSE   RESTORESIZE   DELETIONPOLICY   DRIVER                      VOLUMESNAPSHOTCLASS   VOLUMESNAPSHOT      AGE
    snapcontent-ea11a797-d438-4410-ae21-41d9147fe610   true         10737418240   Delete           com.tencent.cloud.csi.cbs   cbs-snapclass         new-snapshot-demo   22m
    
    1. Run the following command to obtain the snapshot ID of the Volumesnapshotcontent object. The field is status.snapshotHandle (here takes snap-e406fc9m as an example). You can log in to the TKE console and use the snapshot ID to check whether the snapshot exists, as shown below:
      $ kubectl get volumesnapshotcontent snapcontent-ea11a797-d438-4410-ae21-41d9147fe610 -oyaml
      
    apiVersion: snapshot.storage.k8s.io/v1beta1
    kind: VolumeSnapshotContent
    metadata:
     creationTimestamp: "2020-11-04T08:58:39Z"
     finalizers:
     - snapshot.storage.kubernetes.io/volumesnapshotcontent-bound-protection
     name: snapcontent-ea11a797-d438-4410-ae21-41d9147fe610
     resourceVersion: "471437790"
     selfLink: /apis/snapshot.storage.k8s.io/v1beta1/volumesnapshotcontents/snapcontent-ea11a797-d438-4410-ae21-41d9147fe610
     uid: 70d0390b-79b8-4276-aa79-a32e3bdef3d6
    spec:
     deletionPolicy: Delete
     driver: com.tencent.cloud.csi.cbs
     source:
       volumeHandle: disk-7z32tin5
     volumeSnapshotClassName: cbs-snapclass
     volumeSnapshotRef:
       apiVersion: snapshot.storage.k8s.io/v1beta1
       kind: VolumeSnapshot
       name: new-snapshot-demo
       namespace: default
       resourceVersion: "471418661"
       uid: ea11a797-d438-4410-ae21-41d9147fe610
    status:
     creationTime: 1604480319000000000
     readyToUse: true
     restoreSize: 10737418240
     snapshotHandle: snap-e406fc9m
    

    Restoring data from the snapshot to a new PVC

    1. This document takes the VolumeSnapshot object new-snapshot-demo created in the previous step as an example and uses the following YAML to restore volume from the snapshot.
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: restore-test
      spec:
      storageClassName: cbs-csi
      dataSource:
      name: new-snapshot-demo
      kind: VolumeSnapshot
      apiGroup: snapshot.storage.k8s.io
      accessModes:
      - ReadWriteOnce
      resources:
      requests:
        storage: 10Gi
      
    1. Run the following command to check whether the restored PVC has been created successfully. You can view the corresponding diskid in the PV (here takes disk-gahz1kw1 as an example).
      $ kubectl get pvc restore-test
      NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      restore-test   Bound    pvc-80b98084-29a3-4a38-a96c-2f284042cf4f   10Gi       RWO            cbs-csi        97s
      
    $ kubectl get pv pvc-80b98084-29a3-4a38-a96c-2f284042cf4f -oyaml
    
    apiVersion: v1
    kind: PersistentVolume
    metadata:
     annotations:
       pv.kubernetes.io/provisioned-by: com.tencent.cloud.csi.cbs
     creationTimestamp: "2020-11-04T12:08:25Z"
     finalizers:
     - kubernetes.io/pv-protection
     name: pvc-80b98084-29a3-4a38-a96c-2f284042cf4f
     resourceVersion: "474676883"
     selfLink: /api/v1/persistentvolumes/pvc-80b98084-29a3-4a38-a96c-2f284042cf4f
     uid: 5321df93-5f21-4895-bafc-71538d50293a
    spec:
     accessModes:
     - ReadWriteOnce
     capacity:
       storage: 10Gi
     claimRef:
       apiVersion: v1
       kind: PersistentVolumeClaim
       name: restore-test
       namespace: default
       resourceVersion: "474675088"
       uid: 80b98084-29a3-4a38-a96c-2f284042cf4f
     csi:
       driver: com.tencent.cloud.csi.cbs
       fsType: ext4
       volumeAttributes:
         diskType: CLOUD_PREMIUM
         storage.kubernetes.io/csiProvisionerIdentity: 1604478835151-8081-com.tencent.cloud.csi.cbs
       volumeHandle: disk-gahz1kw1
     nodeAffinity:
       required:
         nodeSelectorTerms:
         - matchExpressions:
           - key: topology.com.tencent.cloud.csi.cbs/zone
             operator: In
             values:
             - ap-beijing-2
     persistentVolumeReclaimPolicy: Delete
     storageClassName: cbs-csi
     volumeMode: Filesystem
    status:
     phase: Bound
    
    Note:

    If StorageClass uses topology awareness (to schedule the Pod before creating the PV), that is, to specify volumeBindingMode: WaitForFirstConsumer, you need to deploy the Pod (mount the PVC) to trigger the PV creation (create a CBS from the snapshot and bind it to the PV).

    Contact Us

    Contact our sales team or business advisors to help your business.

    Technical Support

    Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

    7x24 Phone Support