dataVolume
基于 DataVolume 创建虚拟机¶
参考:https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.2/html/container-native_virtualization/cnv-cloning-vm-disk-into-new-datavolume * 用户先将镜像上传到minio中(不一定是minio) * 镜像上传成功后,点击创建镜像时,触发创建dv,从而将镜像从minio同步到ceph中,源指向minio镜像地址 * 为实例申请一个可启动pvc,dataSource指向上面创建的dv,实为pvc克隆 * 创建实例,启动盘指上上面创建的pvc
方法(一):创建dv,source为http方式,用户可将镜像上传到能够通过http访问到的位置,方式可以是minio、s3、nginx、httpd等,触发创建dv,将源(source)指定到镜像所在的http地址,yaml 如下:
上述yaml在执行后,会创建一个dv资源,该dv资源关联了一个同名的(img-cirros)的pvcapiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: img-cirros namespace: default spec: source: http: url: http://images.demo.com:9000/images/cirros-0.4.0-x86_64-disk.img pvc: storageClassName: "ceph-hdd-block" accessModes: - ReadWriteMany resources: requests: storage: 1Gi volumeMode: Block# kubectl get dv NAME PHASE PROGRESS RESTARTS AGE img-cirros Succeeded 100.0% 5 9m23s # kubectl describe dv img-cirros Name: img-cirros Namespace: default Labels: <none> Annotations: cdi.kubevirt.io/storage.usePopulator: true API Version: cdi.kubevirt.io/v1beta1 Kind: DataVolume Metadata: Creation Timestamp: 2023-10-14T06:19:47Z Generation: 1 Resource Version: 1448577 UID: 8c6320c8-b994-41d3-962e-9638e008e632 Spec: Pvc: Access Modes: ReadWriteMany Resources: Requests: Storage: 1Gi Storage Class Name: ceph-hdd-block Volume Mode: Block Source: Http: URL: http://images.demo.com:9000/images/cirros-0.4.0-x86_64-disk.img Status: Claim Name: img-cirros Conditions: Last Heartbeat Time: 2023-10-14T06:25:55Z Last Transition Time: 2023-10-14T06:25:55Z Message: PVC img-cirros Bound Reason: Bound Status: True Type: Bound Last Heartbeat Time: 2023-10-14T06:25:55Z Last Transition Time: 2023-10-14T06:25:55Z Status: True Type: Ready Last Heartbeat Time: 2023-10-14T06:25:54Z Last Transition Time: 2023-10-14T06:25:54Z Message: Import Complete Reason: Completed Status: False Type: Running Phase: Succeeded Progress: 100.0% Restart Count: 5 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Pending 11m datavolume-import-controller PVC img-cirros Pending Warning Error 8m34s (x2 over 11m) datavolume-import-controller Unable to connect to http data source: HTTP request errored: Get "http://images.demo.com:9000/images/cirros-0.4.0-x86_64-disk.img": dial tcp: lookup images.demo.com on 12.96.0.10:53: no such host Warning ImportFailed 5m56s (x2 over 6m1s) datavolume-import-controller Failed to import into PVC img-cirros Normal ImportInProgress 5m45s (x3 over 11m) datavolume-import-controller Import into img-cirros in progress Warning Completed 5m44s datavolume-import-controller Import Complete Normal Bound 5m43s datavolume-import-controller PVC img-cirros Bound Normal ImportSucceeded 5m43s datavolume-import-controller Successfully imported into PVC img-cirros # kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE img-cirros Bound pvc-be3aefaa-b02e-4c24-9c7e-c1943b765226 1Gi RWX ceph-hdd-block 9m38s方法(二),直接通过
virtctl image-upload命令上传,该方式只会创建pvc 例如:注意 新的版本中 --block-volume 已经废弃, 使用 --access-mode=block来指定 创建dv的yaml(如果不考虑跨名称空间创建vm,可以不创建dv)# kubectl get svc -n cdi |grep upload cdi-uploadproxy ClusterIP 12.105.37.69 <none> 443/TCP 45m virtctl image-upload --uploadproxy-url=https://12.105.37.69 \ --insecure \ --pvc-name=img2-cirros \ --pvc-size=1G \ --storage-class=ceph-hdd-block \ --access-mode=ReadWriteOnce \ --block-volume \ --image-path=./cirros-0.4.0-x86_64-disk.img说明:用户通过# 该方式是通过cdi-clone方式 apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: dv-img-cirros # 因为创建dv会生成一个与该dv同名称的pvc,所以不能和virtctl image-upload中的pvc名称相同,除非名称空间不同 namespace: default # 注意可以指定名称空间 spec: source: pvc: namespace: default name: img2-cirros # 用户通过virtctl image-upload命令上传,指定的--pvc-name为 img2-cirros pvc: storageClassName: "ceph-hdd-block" accessModes: - ReadWriteMany resources: requests: storage: 1Gi volumeMode: Blockvirtctl image-upload上传镜像只会创建pvc,不会创建dv,我们可以基于该pvc创建vm,但在跨名称空间场景,就不能使用该pvc来创建vm了。 即dv是解决跨名称空间克隆pvc(cdi-clone),可以将任意名称空间的pvc克隆到指定名称空间为实例申请pvc,dataSource指向上面创建的dv,即pvc克隆 说明:如果是通过
virtctl image-upload命令上传的镜像,不创建上面的dv,dataSource直接指向virtctl image-upload命令上传--pvc-name也可以apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-cirros01-bootdisk namespace: default spec: storageClassName: "ceph-hdd-block" volumeMode: Block accessModes: - ReadWriteMany dataSource: kind: PersistentVolumeClaim name: dv-cirros #dv对应的pvc名,创建dv同时会创建与该dv名字相同的pvc,注意:名称空间一致,否则无法创建。 resources: requests: storage: 2Gi创建实例,将卷指向上面创建的pvc
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-cirros01 spec: running: true template: metadata: labels: kubevirt.io/size: small kubevirt.io/domain: vm-cirros01 spec: domain: devices: disks: - name: root-disk disk: bus: virtio interfaces: - name: default masquerade: {} resources: requests: memory: 64M networks: - name: default pod: {} volumes: - name: root-disk persistentVolumeClaim: claimName: pvc-cirros01-bootdisk