Scenario
If you need to create a snapshot of the PVC data disk to backup 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.
Preparations
You have created a TKE cluster of v1.18 or later versions. For more information, see Creating a Cluster.
You have installed the latest version of CBS-CSI add-on. For more information, see CBS CSI Documents.
Instructions
Backing up PVC
Creating a VolumeSnapshotClass
1. Use the following YAML to create a VolumeSnapshotClass object, as shown below:
apiVersion: snapshot.storage.k8s.io/v1beta1kind: VolumeSnapshotClassmetadata:name: cbs-snapclassdriver: com.tencent.cloud.csi.cbsdeletionPolicy: Delete
2. Run the following command to see if the
VolumeSnapshotClass is created successfully:$ kubectl get volumesnapshotclassNAME DRIVER DELETIONPOLICY AGEcbs-snapclass com.tencent.cloud.csi.cbs Delete 17m
Create a PVC snapshot object VolumeSnapshot
1. In this example, we use the snapshot name
new-snapshot-demo to create a VolumeSnapshot object using the following YAML. The example is as follows:apiVersion: snapshot.storage.k8s.io/v1beta1kind: VolumeSnapshotmetadata:name: new-snapshot-demospec:volumeSnapshotClassName: cbs-snapclasssource:persistentVolumeClaimName: csi-pvc
2. Run the following command to check whether the Volumesnapshot and Volumesnapshotcontent objects have been created successfully. If
READYTOUSE is true, the creation is successful, as shown below:$ kubectl get volumesnapshotNAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGEnew-snapshot-demo true www1-ivantestweb-0 10Gi cbs-snapclass snapcontent-ea11a797-d438-4410-ae21-41d9147fe610 22m 22m
$ kubectl get volumesnapshotcontentNAME READYTOUSE RESTORESIZE DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT AGEsnapcontent-ea11a797-d438-4410-ae21-41d9147fe610 true 10737418240 Delete com.tencent.cloud.csi.cbs cbs-snapclass new-snapshot-demo 22m
3. Execute the following command to obtain the snapshot ID of the VolumeSnapshotContent object. The field is
status.snapshotHandle (e.g., snap-e406fc9m). You can confirm whether the snapshot exists in the Cloud Service Console > Snapshot List based on the snapshot ID. Example:$ kubectl get volumesnapshotcontent snapcontent-ea11a797-d438-4410-ae21-41d9147fe610 -oyaml
apiVersion: snapshot.storage.k8s.io/v1beta1kind: VolumeSnapshotContentmetadata:creationTimestamp: "2020-11-04T08:58:39Z"finalizers:- snapshot.storage.kubernetes.io/volumesnapshotcontent-bound-protectionname: snapcontent-ea11a797-d438-4410-ae21-41d9147fe610resourceVersion: "471437790"selfLink: /apis/snapshot.storage.k8s.io/v1beta1/volumesnapshotcontents/snapcontent-ea11a797-d438-4410-ae21-41d9147fe610uid: 70d0390b-79b8-4276-aa79-a32e3bdef3d6spec:deletionPolicy: Deletedriver: com.tencent.cloud.csi.cbssource:volumeHandle: disk-7z32tin5volumeSnapshotClassName: cbs-snapclassvolumeSnapshotRef:apiVersion: snapshot.storage.k8s.io/v1beta1kind: VolumeSnapshotname: new-snapshot-demonamespace: defaultresourceVersion: "471418661"uid: ea11a797-d438-4410-ae21-41d9147fe610status:creationTime: 1604480319000000000readyToUse: truerestoreSize: 10737418240snapshotHandle: snap-e406fc9m
Restoring data from the snapshot to a new PVC
1. In this document, we use the VolumeSnapshot object named
new-snapshot-demo created in the steps above as an example. The following YAML demonstrates how to restore a volume from a snapshot:apiVersion: v1kind: PersistentVolumeClaimmetadata:name: restore-testspec:storageClassName: cbs-csidataSource:name: new-snapshot-demokind: VolumeSnapshotapiGroup: snapshot.storage.k8s.ioaccessModes:- ReadWriteOnceresources:requests:storage: 10Gi
2. 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-testNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGErestore-test Bound pvc-80b98084-29a3-4a38-a96c-2f284042cf4f 10Gi RWO cbs-csi 97s
$ kubectl get pv pvc-80b98084-29a3-4a38-a96c-2f284042cf4f -oyaml
apiVersion: v1kind: PersistentVolumemetadata:annotations:pv.kubernetes.io/provisioned-by: com.tencent.cloud.csi.cbscreationTimestamp: "2020-11-04T12:08:25Z"finalizers:- kubernetes.io/pv-protectionname: pvc-80b98084-29a3-4a38-a96c-2f284042cf4fresourceVersion: "474676883"selfLink: /api/v1/persistentvolumes/pvc-80b98084-29a3-4a38-a96c-2f284042cf4fuid: 5321df93-5f21-4895-bafc-71538d50293aspec:accessModes:- ReadWriteOncecapacity:storage: 10GiclaimRef:apiVersion: v1kind: PersistentVolumeClaimname: restore-testnamespace: defaultresourceVersion: "474675088"uid: 80b98084-29a3-4a38-a96c-2f284042cf4fcsi:driver: com.tencent.cloud.csi.cbsfsType: ext4volumeAttributes:diskType: CLOUD_PREMIUMstorage.kubernetes.io/csiProvisionerIdentity: 1604478835151-8081-com.tencent.cloud.csi.cbsvolumeHandle: disk-gahz1kw1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: topology.com.tencent.cloud.csi.cbs/zoneoperator: Invalues:- ap-beijing-2persistentVolumeReclaimPolicy: DeletestorageClassName: cbs-csivolumeMode: Filesystemstatus:phase: Bound
Note
If StorageClass uses topology awareness (schedule the Pod first and then create the PV), that is, to specify
volumeBindingMode: WaitForFirstConsumer, you need to deploy the Pod (to mount the PVC) to trigger the creation of the PV (create a new CBS from the snapshot and bind it to the PV).