Uploaded image for project: 'OpenShift Virtualization'
  1. OpenShift Virtualization
  2. CNV-44140

Can't clone a DV with 'snapshot' source when storage size request is not specified (storage checkup fails)

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Normal Normal
    • CNV v4.18.z
    • CNV v4.17.0
    • Storage Platform
    • None
    • CNV Storage 269, CNV Storage 270, CNV Storage 275, CNV Storage 276, CNV Storage 277, CNV Storage 278, CNV Storage Sprint 279, CNV Storage Sprint 280, CNV Storage Sprint 281, CNV Storage Sprint 282, CNV Storage Sprint 283, CNV Storage Sprint 284
    • Low
    • No

      Description of problem:

      Storage checkup job fails when we have a golden image volumeSnapshot (OCS-virt is the default and virt-defaul SC), and then HPP became a default storage class.
      
      Also, clone to HPP sc fails with 'snapshot' source.
      
      But clone succeeds with "DataSource" source and target size specified.

      Version-Release number of selected component (if applicable):

      4.16 (maybe earlier as well)

      How reproducible:

      Always

      Steps to Reproduce:

      We have a golden image volumeSnapshot (OCS-virt is the default and virt-defaul SC)

      $ oc get VolumeSnapshot -A | grep centos7
      openshift-virtualization-os-images   centos7-02aa45fbcbad          true         centos7-02aa45fbcbad                                  30Gi          ocs-storagecluster-rbdplugin-snapclass   snapcontent-2e76971b-fa78-41fb-a7ab-58f7f9a64c07   18h            18h
      

      Create a DV with 'snapshot' source, but without the storage size request (when HPP is specified, or when it's the default storage class)

      apiVersion: cdi.kubevirt.io/v1beta1
      kind: DataVolume
      metadata:
        annotations:
          cdi.kubevirt.io/storage.bind.immediate.requested: "true"
        name: dv-hpp-cloned-from-snapshot
      spec:
        source:
          snapshot:
            name: centos7-02aa45fbcbad
            namespace: openshift-virtualization-os-images
        storage:
          resources: {}
          storageClassName: hostpath-csi-basic
      

      DV doesn't get cloned:

      $ oc get dv -A
      NAMESPACE   NAME                            PHASE             PROGRESS   RESTARTS   AGE
      default     dv-hpp-cloned-from-datasource   Succeeded         100.0%                8m3s
      default     dv-hpp-cloned-from-snapshot     CloneInProgress   N/A                   38m
      

      No pods in source and target namespaces:

      $ oc get pods
      No resources found in default namespace.
      
      $ oc get pods -n openshift-virtualization-os-images
      No resources found in openshift-virtualization-os-images namespace.
      
      $ oc get pvc -n openshift-virtualization-os-images
      NAME                                                  STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  VOLUMEATTRIBUTESCLASS   AGE
      tmp-pvc-c28730ff-62e3-4c4d-93c3-9e044c800366          Pending                                                                        hostpath-csi-basic            <unset>                 39m
      tmp-source-pvc-c28730ff-62e3-4c4d-93c3-9e044c800366   Bound     pvc-d9551722-4ca7-419b-8372-63aa0d0ffd90   30Gi       RWO            ocs-storagecluster-ceph-rbd   <unset>                 39m

      Source PVC yaml:

      $ oc get pvc -n openshift-virtualization-os-images tmp-source-pvc-c28730ff-62e3-4c4d-93c3-9e044c800366 -oyaml
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        annotations:
          cdi.kubevirt.io/cloneFallbackReason: The storageclass provisioner does not match
            the volumesnapshotcontent driver
          cdi.kubevirt.io/clonePhase: Pending
          cdi.kubevirt.io/cloneType: copy
          cdi.kubevirt.io/createdForDataVolume: d7fbea86-6179-4fb5-a3f4-ff5296293eac
          cdi.kubevirt.io/dataSourceNamespace: openshift-virtualization-os-images
          cdi.kubevirt.io/storage.bind.immediate.requested: "true"
          cdi.kubevirt.io/storage.clone.token: eyJhbGciOiJQUzI1NiJ9.eyJleHAiOjE3MjAzNDgxNTIsImlhdCI6MTcyMDM0Nzg1MiwiaXNzIjoiY2RpLWFwaXNlcnZlciIsIm5hbWUiOiJjZW50b3M3LTAyYWE0NWZiY2JhZCIsIm5hbWVzcGFjZSI6Im9wZW5zaGlmdC12aXJ0dWFsaXphdGlvbi1vcy1pbWFnZXMiLCJuYmYiOjE3MjAzNDc4NTIsIm9wZXJhdGlvbiI6IkNsb25lIiwicGFyYW1zIjp7InRhcmdldE5hbWUiOiJkdi1ocHAtY2xvbmVkLWZyb20tc25hcHNob3QiLCJ0YXJnZXROYW1lc3BhY2UiOiJkZWZhdWx0In0sInJlc291cmNlIjp7Imdyb3VwIjoic25hcHNob3Quc3RvcmFnZS5rOHMuaW8iLCJyZXNvdXJjZSI6InZvbHVtZXNuYXBzaG90cyIsInZlcnNpb24iOiJ2MSJ9fQ.BBM7Vx9bpmPEqO90MNH2sNbi8_lOlgdhjD3yFHRda33puoHA7XzeE9_pODIhaB1znG9t61S-vLYDqFiMxK1A7diBHMUt9DY3oEIT2awOxLsD8grDS3ACLfTFoX0MJQ8CU97-r9cbiJHZdSk1nXDpJ6am6e5jY0Ce8D2wRn67t0NmxwS2Rf88Duxuz7G3tLkm4Y7nQa9Qc9PoIP1tf-lIxWKGaepSNvLnVyfQ76dEsKUDvmNxu9Pfpkecg9Jr0EUtMa_EmD0vTnbLjWUOqNHsHMj4lzIpZ28qzmXostGchgvcSTXF432XyPEownt8dawjLM1uB6WHHqms-ismOwvzkQ
          cdi.kubevirt.io/storage.condition.running: "false"
          cdi.kubevirt.io/storage.condition.running.message: Clone Pending
          cdi.kubevirt.io/storage.condition.running.reason: Pending
          cdi.kubevirt.io/storage.contentType: kubevirt
          cdi.kubevirt.io/storage.extended.clone.token: eyJhbGciOiJQUzI1NiJ9.eyJleHAiOjIwMzU3MDc4NTIsImlhdCI6MTcyMDM0Nzg1MiwiaXNzIjoiY2RpLWRlcGxveW1lbnQiLCJuYW1lIjoiY2VudG9zNy0wMmFhNDVmYmNiYWQiLCJuYW1lc3BhY2UiOiJvcGVuc2hpZnQtdmlydHVhbGl6YXRpb24tb3MtaW1hZ2VzIiwibmJmIjoxNzIwMzQ3ODUyLCJvcGVyYXRpb24iOiJDbG9uZSIsInBhcmFtcyI6eyJ0YXJnZXROYW1lIjoiZHYtaHBwLWNsb25lZC1mcm9tLXNuYXBzaG90IiwidGFyZ2V0TmFtZXNwYWNlIjoiZGVmYXVsdCIsInVpZCI6ImMyODczMGZmLTYyZTMtNGM0ZC05M2MzLTllMDQ0YzgwMDM2NiJ9LCJyZXNvdXJjZSI6eyJncm91cCI6InNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIiwicmVzb3VyY2UiOiJ2b2x1bWVzbmFwc2hvdHMiLCJ2ZXJzaW9uIjoidjEifX0.k31sWJS6Qa8i1m2f02EuvdnuTGKol0eL3YPQ6tDa_xGT88bGNiSu2iOp209ZIhydN85m5MJfZay8wtkRM3cG-2Cpdw5kod9hv1y30MJPQMQ0q-X1fFZy3Txy4nnQnrUmgKdlEf0gXhrfgsIRluP2fJdtDu2tOq9bD38wINfi4mDOt0-Zyke3-0Rjh0jq9284nprtb4YPkRU6Ozr4TdxGyy8hOue7PBpYEgxzWp8kCbMg7hveT-eZI-VJgMYMsaeKqJwX2twnGThJ1yWlu-UMsjqM9C5EvKXaUT_wgjrzleWdExUZ5X8FV-Y7KypvqKT-gIXf57nAIR_Qj6YyPEOJOA
          cdi.kubevirt.io/storage.pod.restarts: "0"
          cdi.kubevirt.io/storage.populator.kind: VolumeCloneSource
          cdi.kubevirt.io/storage.preallocation.requested: "false"
          cdi.kubevirt.io/storage.usePopulator: "true"
          pv.kubernetes.io/bind-completed: "yes"
          pv.kubernetes.io/bound-by-controller: "yes"
          volume.beta.kubernetes.io/storage-provisioner: openshift-storage.rbd.csi.ceph.com
          volume.kubernetes.io/storage-provisioner: openshift-storage.rbd.csi.ceph.com
        creationTimestamp: "2024-07-07T10:24:12Z"
        finalizers:
        - kubernetes.io/pvc-protection
        labels:
          alerts.k8s.io/KubePersistentVolumeFillingUp: disabled
          app: containerized-data-importer
          app.kubernetes.io/component: storage
          app.kubernetes.io/managed-by: cdi-controller
          app.kubernetes.io/part-of: hyperconverged-cluster
          app.kubernetes.io/version: 4.16.0
          cdi.kubevirt.io/OwnedByUID: c28730ff-62e3-4c4d-93c3-9e044c800366
        name: tmp-source-pvc-c28730ff-62e3-4c4d-93c3-9e044c800366
        namespace: openshift-virtualization-os-images
        resourceVersion: "9297241"
        uid: d9551722-4ca7-419b-8372-63aa0d0ffd90
      spec:
        accessModes:
        - ReadWriteOnce
        dataSource:
          apiGroup: snapshot.storage.k8s.io
          kind: VolumeSnapshot
          name: centos7-02aa45fbcbad
        dataSourceRef:
          apiGroup: snapshot.storage.k8s.io
          kind: VolumeSnapshot
          name: centos7-02aa45fbcbad
        resources:
          requests:
            storage: 30Gi
        storageClassName: ocs-storagecluster-ceph-rbd
        volumeMode: Block
        volumeName: pvc-d9551722-4ca7-419b-8372-63aa0d0ffd90
      status:
        accessModes:
        - ReadWriteOnce
        capacity:
          storage: 30Gi
        phase: Bound 

      TMP-PVC yaml:

      $ oc get pvc -n openshift-virtualization-os-images tmp-pvc-c28730ff-62e3-4c4d-93c3-9e044c800366 -oyaml
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        annotations:
          cdi.kubevirt.io/cloneFallbackReason: The storageclass provisioner does not match
            the volumesnapshotcontent driver
          cdi.kubevirt.io/clonePhase: PrepClaim
          cdi.kubevirt.io/cloneType: copy
          cdi.kubevirt.io/createdForDataVolume: d7fbea86-6179-4fb5-a3f4-ff5296293eac
          cdi.kubevirt.io/dataSourceNamespace: openshift-virtualization-os-images
          cdi.kubevirt.io/events.source: default/dv-hpp-cloned-from-snapshot
          cdi.kubevirt.io/events.source.kind: PersistentVolumeClaim
          cdi.kubevirt.io/ownerUID: c28730ff-62e3-4c4d-93c3-9e044c800366
          cdi.kubevirt.io/storage.bind.immediate.requested: ""
          cdi.kubevirt.io/storage.clone.token: eyJhbGciOiJQUzI1NiJ9.eyJleHAiOjE3MjAzNDgxNTIsImlhdCI6MTcyMDM0Nzg1MiwiaXNzIjoiY2RpLWFwaXNlcnZlciIsIm5hbWUiOiJjZW50b3M3LTAyYWE0NWZiY2JhZCIsIm5hbWVzcGFjZSI6Im9wZW5zaGlmdC12aXJ0dWFsaXphdGlvbi1vcy1pbWFnZXMiLCJuYmYiOjE3MjAzNDc4NTIsIm9wZXJhdGlvbiI6IkNsb25lIiwicGFyYW1zIjp7InRhcmdldE5hbWUiOiJkdi1ocHAtY2xvbmVkLWZyb20tc25hcHNob3QiLCJ0YXJnZXROYW1lc3BhY2UiOiJkZWZhdWx0In0sInJlc291cmNlIjp7Imdyb3VwIjoic25hcHNob3Quc3RvcmFnZS5rOHMuaW8iLCJyZXNvdXJjZSI6InZvbHVtZXNuYXBzaG90cyIsInZlcnNpb24iOiJ2MSJ9fQ.BBM7Vx9bpmPEqO90MNH2sNbi8_lOlgdhjD3yFHRda33puoHA7XzeE9_pODIhaB1znG9t61S-vLYDqFiMxK1A7diBHMUt9DY3oEIT2awOxLsD8grDS3ACLfTFoX0MJQ8CU97-r9cbiJHZdSk1nXDpJ6am6e5jY0Ce8D2wRn67t0NmxwS2Rf88Duxuz7G3tLkm4Y7nQa9Qc9PoIP1tf-lIxWKGaepSNvLnVyfQ76dEsKUDvmNxu9Pfpkecg9Jr0EUtMa_EmD0vTnbLjWUOqNHsHMj4lzIpZ28qzmXostGchgvcSTXF432XyPEownt8dawjLM1uB6WHHqms-ismOwvzkQ
          cdi.kubevirt.io/storage.condition.running: "true"
          cdi.kubevirt.io/storage.condition.running.message: ""
          cdi.kubevirt.io/storage.condition.running.reason: Populator is running
          cdi.kubevirt.io/storage.contentType: kubevirt
          cdi.kubevirt.io/storage.extended.clone.token: eyJhbGciOiJQUzI1NiJ9.eyJleHAiOjIwMzU3MDc4NTIsImlhdCI6MTcyMDM0Nzg1MiwiaXNzIjoiY2RpLWRlcGxveW1lbnQiLCJuYW1lIjoiY2VudG9zNy0wMmFhNDVmYmNiYWQiLCJuYW1lc3BhY2UiOiJvcGVuc2hpZnQtdmlydHVhbGl6YXRpb24tb3MtaW1hZ2VzIiwibmJmIjoxNzIwMzQ3ODUyLCJvcGVyYXRpb24iOiJDbG9uZSIsInBhcmFtcyI6eyJ0YXJnZXROYW1lIjoiZHYtaHBwLWNsb25lZC1mcm9tLXNuYXBzaG90IiwidGFyZ2V0TmFtZXNwYWNlIjoiZGVmYXVsdCIsInVpZCI6ImMyODczMGZmLTYyZTMtNGM0ZC05M2MzLTllMDQ0YzgwMDM2NiJ9LCJyZXNvdXJjZSI6eyJncm91cCI6InNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIiwicmVzb3VyY2UiOiJ2b2x1bWVzbmFwc2hvdHMiLCJ2ZXJzaW9uIjoidjEifX0.k31sWJS6Qa8i1m2f02EuvdnuTGKol0eL3YPQ6tDa_xGT88bGNiSu2iOp209ZIhydN85m5MJfZay8wtkRM3cG-2Cpdw5kod9hv1y30MJPQMQ0q-X1fFZy3Txy4nnQnrUmgKdlEf0gXhrfgsIRluP2fJdtDu2tOq9bD38wINfi4mDOt0-Zyke3-0Rjh0jq9284nprtb4YPkRU6Ozr4TdxGyy8hOue7PBpYEgxzWp8kCbMg7hveT-eZI-VJgMYMsaeKqJwX2twnGThJ1yWlu-UMsjqM9C5EvKXaUT_wgjrzleWdExUZ5X8FV-Y7KypvqKT-gIXf57nAIR_Qj6YyPEOJOA
          cdi.kubevirt.io/storage.pod.restarts: "0"
          cdi.kubevirt.io/storage.populator.kind: VolumeCloneSource
          cdi.kubevirt.io/storage.preallocation.requested: "false"
          cdi.kubevirt.io/storage.usePopulator: "true"
          k8s.io/CloneRequest: openshift-virtualization-os-images/tmp-source-pvc-c28730ff-62e3-4c4d-93c3-9e044c800366
        creationTimestamp: "2024-07-07T10:24:13Z"
        finalizers:
        - kubernetes.io/pvc-protection
        labels:
          alerts.k8s.io/KubePersistentVolumeFillingUp: disabled
          app: containerized-data-importer
          app.kubernetes.io/component: storage
          app.kubernetes.io/managed-by: cdi-controller
          app.kubernetes.io/part-of: hyperconverged-cluster
          app.kubernetes.io/version: 4.16.0
          cdi.kubevirt.io/OwnedByUID: c28730ff-62e3-4c4d-93c3-9e044c800366
        name: tmp-pvc-c28730ff-62e3-4c4d-93c3-9e044c800366
        namespace: openshift-virtualization-os-images
        resourceVersion: "9297244"
        uid: fc86752d-a6ef-43b1-985f-e7d89dfb6047
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 30Gi
        storageClassName: hostpath-csi-basic
        volumeMode: Filesystem
      status:
        phase: Pending
      
      Actual results:
      {code:none}
      DV clone fails, checkup job fails

      Expected results:

      1. Checkup job should use the DataSource source and specify the DV size?
      2. DV clone should work with 'snapshot' clone

      Additional info:

      When creating a DV from a DataSource, the webhook complains that we need to specify the storage size:

      $ oc create  -f dv-hpp-cloned-from-datasource.yaml
      Error from server: error when creating "dv-hpp-cloned-from-datasource.yaml": admission webhook "datavolume-validate.cdi.kubevirt.io" denied the request:  Storage size is missing

      When we specify the size - DV clones successfully with both of these yamls:

      $ oc get dv -A 
      NAMESPACE   NAME                                    PHASE             PROGRESS   RESTARTS   AGE
      default     dv-hpp-cloned-from-datasource           Succeeded         100.0%                34m
      default     dv-hpp-cloned-from-snapshot             CloneInProgress   N/A                   64m
      default     dv-hpp-cloned-from-snapshot-with-size   Succeeded         100.0%                3m52s
      $ cat dv-hpp-cloned-from-snapshot-size.yaml 
      apiVersion: cdi.kubevirt.io/v1beta1
      kind: DataVolume
      metadata:
        annotations:
          cdi.kubevirt.io/storage.bind.immediate.requested: "true"
        name: dv-hpp-cloned-from-snapshot-with-size
      spec:
        source:
          snapshot:
            name: centos7-02aa45fbcbad
            namespace: openshift-virtualization-os-images
        storage:
          resources: 
            requests:
              storage: 30Gi
          storageClassName: hostpath-csi-basic
      
      
      $ cat dv-hpp-cloned-from-datasource.yaml
      apiVersion: cdi.kubevirt.io/v1beta1
      kind: DataVolume
      metadata:
        annotations:
          cdi.kubevirt.io/storage.bind.immediate.requested: "true"
        name: dv-hpp-cloned-from-datasource
      spec:
        sourceRef:
          kind: DataSource
          name: centos7
          namespace: openshift-virtualization-os-images
        storage:
          resources:
            requests:
              storage: 30Gi
          storageClassName: hostpath-csi-basic 

              gaohoward Howard Gao
              jpeimer@redhat.com Jenia Peimer
              Jenia Peimer Jenia Peimer
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated: