tencent cloud

文档反馈

使用 CBS CSI 插件对 PVC 进行备份与恢复

最后更新时间:2023-05-23 16:58:46

    操作场景

    如需为 PVC 数据盘创建快照来备份数据,或者将备份的快照数据恢复到新的 PVC 中,可以通过 CBS-CSI 插件来实现,本文将介绍如何利用 CBS-CSI 插件实现 PVC 的数据备份与恢复。

    前提条件

    • 已创建 TKE 集群 或已在腾讯云自建 Kubernetes 集群,集群版本 >= 1.18。
    • 已安装 CBS-CSI 插件
    • 访问管理 控制台完成对 TKE_QCSRole 角色授予 CBS 快照操作的相关权限,详情请参考 快照授权

    操作步骤

    备份 PVC

    创建 VolumeSnapshotClass

    1. 使用以下 YAML,创建 VolumeSnapshotClass 对象。示例如下:

      apiVersion: snapshot.storage.k8s.io/v1beta1
      kind: VolumeSnapshotClass
      metadata:
         name: cbs-snapclass
      driver: com.tencent.cloud.csi.cbs
      deletionPolicy: Delete
      
    2. 执行以下命令,检查 VolumeSnapshotClass 是否创建成功。示例如下:

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

    创建 PVC 快照 VolumeSnapshot

    1. 本文以 new-snapshot-demo 快照名为例创建 VolumeSnapshot。使用以下 YAML,创建 VolumeSnapshot 对象。示例如下:

      apiVersion: snapshot.storage.k8s.io/v1beta1
      kind: VolumeSnapshot
      metadata:
         name: new-snapshot-demo
      spec:
         volumeSnapshotClassName: cbs-snapclass # 引用前面创建的 VolumeSnapshotClass
         source:
           persistentVolumeClaimName: ssd-pvc # 替换成要备份的 pvc 名称
      
    2. 执行以下命令,查看 Volumesnapshot 和 Volumesnapshotcontent 对象是否创建成功,若 READYTOUSE 为 true,则创建成功。示例如下:

      $ kubectl get volumesnapshot
      NAME                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 volumesnapshotcontent
      NAME                                               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
      
    3. 执行以下命令,可以获取 Volumesnapshotcontent 对象的快照 ID,字段是 status.snapshotHandle(如下为 snap-rsk8v75j),可以根据快照 ID 在 容器服务控制台 确认快照是否存在。示例如下:

      $ kubectl get volumesnapshotcontent -o yaml snapcontent-170b2161-f158-4c9e-a090-a38fdfd84a3e
      ...
      status:
      creationTime: 1607331318000000000
      readyToUse: true
      restoreSize: 21474836480
      snapshotHandle: snap-rsk8v75j
      

    从快照恢复数据到新 PVC

    1. 本文以上述 步骤 创建的 VolumeSnapshot 对象名称 new-snapshot-demo 为例,使用以下 YAML 从快照恢复数据到新的 PVC 中。示例如下:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
         name: restore-test
      spec:
         storageClassName: ssd-csi # storage class 根据自身需求自定义
         dataSource:
           name: new-snapshot-demo # 引用前面创建的 VolumeSnapshot
           kind: VolumeSnapshot
           apiGroup: snapshot.storage.k8s.io
         accessModes:
           - ReadWriteOnce # CBS 是块存储,只支持单机读写
         resources:
           requests:
             storage: 50Gi # 建议大小与被恢复的 PVC 写成一致
      
    2. 执行以下命令,可以查看 PVC 已经创建并绑定 PV,从 PV 中也可以查看到对应的 diskid(如下为 disk-ju0hw7no)。示例如下:

      $ kubectl get pvc restore-test
      NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      restore-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 绑定)。

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持