Set up CDI Proxy¶
About this task
The Containerized Data Importer (CDI) project provides facilities for enabling PVCs to be used as disks for KubeVirt VMs by way of DataVolumes.
The CDI service is installed as part of uploading and applying the KubeVirt
system application. The most common use case for CDI is ‘uploading a disk
image to a DataVolume’. To use the CDI service, your Kubernetes cluster-admin
should make the cdi-uploadproxy
service accessible from outside the cluster.
This can be done via NodePort service or Ingress service.
Configuring the NodePort service option is shown below:
Procedure
Create the CDI proxy yaml configuration.
$ cat <<EOF > cdi-uploadproxy-nodeport-service.yaml apiVersion: v1 kind: Service metadata: name: cdi-uploadproxy-nodeport namespace: cdi labels: cdi.kubevirt.io: "cdi-uploadproxy" spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 32111 # Use unused nodeport in 31,500 to 32,767 range protocol: TCP selector: cdi.kubevirt.io: cdi-uploadproxy EOF
Apply the configuration.
$ kubectl apply -f cdi-uploadproxy-nodeport-service.yaml
Results
Now the virtctl
command can be used to upload a VM image file into an
existing or new DataVolume (PVC).
See the example (Create an Ubuntu VM) that uploads an ubuntu
cloud image (jammy-server-cloudimg-amd64.img
from
https://cloud-images.ubuntu.com/jammy/current/) into a new 500G DataVolume
named stx-lab-jenkins-disk:
$ virtctl image-upload dv <DV-Name> -n <NameSpace> --insecure \
--access-mode ReadWriteOnce --size <size>Gi --image-path <Image-Path> \
--uploadproxy-url https://<NodeIP>:<PORT>
See sections on Create an Ubuntu VM and Create a Windows VM on how to then use this DataVolume to create/launch a VM.
See https://kubevirt.io/user-guide/operations/containerized_data_importer/ for more details and other use cases.