apiVersion: cdi.kubevirt.io/v1alpha1
kind: DataVolume
metadata:
name: <upload-datavolume> (1)
spec:
source:
upload: {}
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: <2Gi> (2)
You can upload a locally stored disk image to a new or existing DataVolume by using the
virtctl
command-line utility.
Install
the kubevirt-virtctl
package.
If you require scratch space according to the CDI supported operations matrix, you must first define a StorageClass or prepare CDI scratch space for this operation to complete successfully.
DataVolume
objects are custom resources that are provided by the Containerized
Data Importer (CDI) project. DataVolumes orchestrate import, clone, and upload
operations that are associated with an underlying PersistentVolumeClaim (PVC).
DataVolumes are integrated with KubeVirt, and they prevent a virtual machine
from being started before the PVC has been prepared.
You can manually create a DataVolume with an upload
data source to use for uploading
local disk images.
Create a DataVolume configuration that specifies spec: source: upload{}
:
apiVersion: cdi.kubevirt.io/v1alpha1
kind: DataVolume
metadata:
name: <upload-datavolume> (1)
spec:
source:
upload: {}
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: <2Gi> (2)
1 | The name of the DataVolume. |
2 | The size of the DataVolume. Ensure that this value is greater than or equal to the size of the disk that you upload. |
Create the DataVolume by running the following command:
$ oc create -f <upload-datavolume>.yaml
You can use the virtctl
CLI utility to upload a local disk image from
a client machine to a DataVolume (DV) in your cluster. You can use a DV that
already exists in your cluster or create a new DV during this procedure.
After you upload a local disk image, you can add it to a virtual machine. |
A virtual machine disk image, in RAW, ISO, or QCOW2 format, optionally
compressed by using xz
or gz
.
The kubevirt-virtctl
package must be installed on the client machine.
The client machine must be configured to trust the OpenShift Container Platform router’s certificate.
Identify the following items:
The name of the upload DataVolume that you want to use. If this DataVolume does not exist, it is created automatically.
The size of the DataVolume, if you want it to be created during the upload procedure. The size must be greater than or equal to the size of the disk image.
The file location of the virtual machine disk image that you want to upload.
Upload the disk image by running the virtctl image-upload
command.
Specify the parameters that you identified in the previous step.
For example:
$ virtctl image-upload dv <datavolume_name> \ (1) --size=<datavolume_size> \ (2) --image-path=</path/to/image> \ (3)
1 | The name of the DataVolume. |
2 | The size of the DataVolume. For example: --size=500Mi , --size=1G |
3 | The file path of the virtual machine disk image. |
|
Optional. To verify that a DataVolume was created, view all DataVolume objects by running the following command:
$ oc get dvs
This matrix shows the supported CDI operations for content types against endpoints, and which of these operations requires scratch space.
Content types | HTTP | HTTPS | HTTP basic auth | Registry | Upload |
---|---|---|---|---|---|
KubeVirt(QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
Archive+ |
✓ TAR |
✓ TAR |
✓ TAR |
□ TAR |
□ TAR |
✓ Supported operation
□ Unsupported operation
* Requires scratch space
** Requires scratch space if a custom certificate authority is required
+ Archive does not support block mode DVs