跳转至

4.VolumeSnapshot克隆

基于VolumeSnapshot克隆DataVolume

参考文档 基于VolumeSnapshot克隆的前置条件如下: - 源snapshot和目标pvc共用相同的provisioner,也就是说不能跨Ceph集群了 - 用户具备创建DataVolume的权限,能够在源名称空间下创建datavolumes/source资源 - 存储支持扩展 - 使用场景:基于一个虚拟机快照创建新的虚拟机。

  • 直接用示例说明: 1. 先创建一个DV,将其作为快照的源
    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: img-cirros
      namespace: default
    spec:
      source:
        http:
          #url: http://images.demo.com:10800/images/cirros-0.5.1-x86_64-disk.img
          url: http://images.demo.com:10800/images/ubuntu-22.04-server-cloudimg-amd64.img
      pvc:
        storageClassName: "ceph-hdd-block"
        accessModes:
          - ReadWriteMany
        resources:
          requests:
            storage: 1Gi
        volumeMode: Block
    
    2. 接下来,为上面DV对应的PVC创建卷快照
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: img-cirros-volumesnapshot
      namespace: default
    spec:
      volumeSnapshotClassName: csi-rbdplugin-snapclass
      source:
        # 指定要创建卷快照的pvc名字
        persistentVolumeClaimName: img-cirros
    

    创建卷快照后,再次检查卷快照,确认已经准备好被使用,即READYTOUSEtrue

    # kubectl get volumesnapshot img-cirros-volumesnapshot 
    NAME                        READYTOUSE   SOURCEPVC    SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS             SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    img-cirros-volumesnapshot   true         img-cirros                           1Gi           csi-rbdplugin-snapclass   snapcontent-29334e67-daf8-4c0e-a44f-01cb198da9a9   21m            21m
    
    3. 现在,就可以基于上面的volumesnapshot创建DV了
    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: cloned-dv1-bysnapshot
      namespace: default
    spec:
      source:
        snapshot:
          namespace: default
          name: img-cirros-volumesnapshot
      storage:
        storageClassName: "ceph-hdd-block"
        accessModes:
          - ReadWriteMany
        # 以下可以省略
        resources:
          requests:
            storage: 1Gi
    
    4. 最后,使用上面的dv(pvc)创建vm验证
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm01-cloned-bysnapshot
      namespace: default
    spec:
      running: true
      template:
        metadata:
          labels:
            kubevirt.io/size: small
            kubevirt.io/domain: vm01-cloned-bysnapshot
        spec:
          domain:
            devices:
              disks:
                - name: root-disk
                  disk:
                    bus: virtio
              interfaces:
              - name: default
                masquerade: {}
            resources:
              requests:
                memory: 1024M
          networks:
          - name: default
            pod: {}
          volumes:
          - name: root-disk
            persistentVolumeClaim:
              claimName: cloned-dv1-bysnapshot
    

基于cirros镜像卷快照克隆,可能会出现如下错误:

cirros_vm_err.png