文档简介:
操作场景
前提条件
操作步骤
备份 PVC
创建 VolumeSnapshotClass
apiVersion: snapshot.storage.k8s.io/v1beta1kind: VolumeSnapshotClassmetadata:name: cbs-snapclassdriver: com.tencent.cloud.csi.cbsdeletionPolicy: Delete
$ kubectl get volumesnapshotclassNAME DRIVER DELETIONPOLICY AGEcbs-snapclass com.tencent.cloud.csi.cbs Delete 17m
创建 PVC 快照 VolumeSnapshot
apiVersion: snapshot.storage.k8s.io/v1beta1kind: VolumeSnapshotmetadata:name: new-snapshot-demospec:volumeSnapshotClassName: cbs-snapclass # 引用前面创建的 VolumeSnapshotClasssource:persistentVolumeClaimName: ssd-pvc # 替换成要备份的 pvc 名称
$ kubectl get volumesnapshotNAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT
RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE
new-snapshot-demo true ssd-pvc 20Gi
cbs-snapclass snapcontent-170b2161-f158-4c9e-a090-a38fdfd84a3e 2m36s 2m50s
$ kubectl get volumesnapshotcontentNAME READYTOUSE RESTORESIZE
DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT AGE
snapcontent-170b2161-f158-4c9e-a090-a38fdfd84a3e true 21474836480 Delete
com.tencent.cloud.csi.cbs cbs-snapclass new-snapshot-demo 3m3s
$ kubectl get volumesnapshotcontent -o yaml snapcontent-170b2161-f158-4c9e-a090-a38fdfd84a3e...status:creationTime: 1607331318000000000readyToUse: truerestoreSize: 21474836480snapshotHandle: snap-rsk8v75j
从快照恢复数据到新 PVC
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: restore-testspec:storageClassName: ssd-csi # storage class 根据自身需求自定义dataSource:name: new-snapshot-demo # 引用前面创建的 VolumeSnapshotkind: VolumeSnapshotapiGroup: snapshot.storage.k8s.ioaccessModes:- ReadWriteOnce # CBS 是块存储,只支持单机读写resources:requests:storage: 50Gi # 建议大小与被恢复的 PVC 写成一致
$ kubectl get pvc restore-testNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGErestore-test Bound pvc-940edf09-d622-4126-992b-0a209f048c7d 60Gi RWO ssd-topology 6m8s$ kubectl get pv pvc-940edf09-d622-4126-992b-0a209f048c7d -o yaml...spec:...volumeHandle: disk-ju0hw7no...
如果 StorageClass 使用了拓扑感知(先调度 Pod 再创建 PV),即指定 volumeBindingMode: WaitForFirstConsumer,
则需要先部署 Pod(需挂载 PVC)才会触发创建 PV(从快照创建新的 CBS 并与 PV 绑定)。