$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \
--type json -p '[{"op": "replace", "path": \
"/spec/featureGates/enableCommonBootImageImport", \
"value": false}]'
Boot sources can make virtual machine (VM) creation more accessible and efficient for users. If automatic boot source updates are enabled, the Containerized Data Importer (CDI) imports, polls, and updates the images so that they are ready to be cloned for new VMs. By default, CDI automatically updates the system-defined boot sources that OpenShift Virtualization provides.
You can opt out of automatic updates for all system-defined boot sources by disabling the enableCommonBootImageImport
feature gate. If you disable this feature gate, all DataImportCron
objects are deleted. This does not remove previously imported PersistentVolumeClaim
(PVC) objects that store operating system images, though administrators can delete them manually.
When the enableCommonBootImageImport
feature gate is disabled, DataSource
objects are reset so that they no longer point to the original PVCs. An administrator can manually provide a boot source by creating a new PVC for the DataSource
object and populating the PVC with an operating system image.
Custom boot sources that are not provided by OpenShift Virtualization are not controlled by the feature gate. You must manage them individually by editing the HyperConverged
custom resource (CR). You can also use this method to manage individual system-defined boot sources.
Control automatic updates for all system-defined boot sources by using the feature gate.
Disabling automatic boot source imports and updates can lower resource usage. In disconnected environments, disabling automatic boot source updates prevents CDIDataImportCronOutdated
alerts from filling up logs.
To disable automatic updates for all system-defined boot sources, turn off the enableCommonBootImageImport
feature gate by setting the value to false
. Setting this value to true
re-enables the feature gate and turns automatic updates back on.
Custom boot sources are not affected by this setting. |
Toggle the feature gate for automatic boot source updates by editing the HyperConverged
custom resource (CR).
To disable automatic boot source updates, set the spec.featureGates.enableCommonBootImageImport
field in the HyperConverged
CR to false
. For example:
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \
--type json -p '[{"op": "replace", "path": \
"/spec/featureGates/enableCommonBootImageImport", \
"value": false}]'
To re-enable automatic boot source updates, set the spec.featureGates.enableCommonBootImageImport
field in the HyperConverged
CR to true
. For example:
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \
--type json -p '[{"op": "replace", "path": \
"/spec/featureGates/enableCommonBootImageImport", \
"value": true}]'
Ensure that your cluster has a default storage class. Then, enable automatic updates for custom boot sources.
Specify a new default storage class in the HyperConverged
custom resource (CR).
Boot sources are created from storage using the default storage class. If your cluster does not have a default storage class, you must define one before configuring automatic updates for custom boot sources. |
Open the HyperConverged
CR in your default editor by running the following command:
$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
Define a new storage class by entering a value in the storageClassName
field:
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
spec:
dataImportCronTemplates:
- metadata:
name: rhel8-image-cron
spec:
template:
spec:
storageClassName: <new_storage_class> (1)
#...
1 | Define the storage class. |
Remove the storageclass.kubernetes.io/is-default-class
annotation from the current default storage class.
Retrieve the name of the current default storage class by running the following command:
$ oc get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
csi-manila-ceph manila.csi.openstack.org Delete Immediate false 11d
hostpath-csi-basic (default) kubevirt.io.hostpath-provisioner Delete WaitForFirstConsumer false 11d (1)
...
1 | In this example, the current default storage class is named hostpath-csi-basic . |
Remove the annotation from the current default storage class by running the following command:
$ oc patch storageclass <current_default_storage_class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}' (1)
1 | Replace <current_default_storage_class> with the storageClassName value of the default storage class. |
Set the new storage class as the default by running the following command:
$ oc patch storageclass <new_storage_class> -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' (1)
1 | Replace <new_storage_class> with the storageClassName value that you added to the HyperConverged CR. |
OpenShift Virtualization automatically updates system-defined boot sources by default, but does not automatically update custom boot sources. You must manually enable automatic updates by editing the HyperConverged
custom resource (CR).
The cluster has a default storage class.
Open the HyperConverged
CR in your default editor by running the following command:
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
Edit the HyperConverged
CR, adding the appropriate template and boot source in the dataImportCronTemplates
section. For example:
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
spec:
dataImportCronTemplates:
- metadata:
name: centos7-image-cron
annotations:
cdi.kubevirt.io/storage.bind.immediate.requested: "true" (1)
spec:
schedule: "0 */12 * * *" (2)
template:
spec:
source:
registry: (3)
url: docker://quay.io/containerdisks/centos:7-2009
storage:
resources:
requests:
storage: 10Gi
managedDataSource: centos7 (4)
retentionPolicy: "None" (5)
1 | This annotation is required for storage classes with volumeBindingMode set to WaitForFirstConsumer . |
2 | Schedule for the job specified in cron format. |
3 | Use to create a data volume from a registry source. Use the default pod pullMethod and not node pullMethod , which is based on the node docker cache. The node docker cache is useful when a registry image is available via Container.Image , but the CDI importer is not authorized to access it. |
4 | For the custom image to be detected as an available boot source, the name of the image’s managedDataSource must match the name of the template’s DataSource , which is found under spec.dataVolumeTemplates.spec.sourceRef.name in the VM template YAML file. |
5 | Use All to retain data volumes and data sources when the cron job is deleted. Use None to delete data volumes and data sources when the cron job is deleted. |
Save the file.
Disable automatic updates for individual boot sources.
You can disable automatic updates for an individual boot source, whether it is custom or system-defined, by editing the HyperConverged
custom resource (CR).
Open the HyperConverged
CR in your default editor by running the following command:
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
Disable automatic updates for an individual boot source by editing the spec.dataImportCronTemplates
field.
Remove the boot source from the spec.dataImportCronTemplates
field. Automatic updates are disabled for custom boot sources by default.
Add the boot source to spec.dataImportCronTemplates
.
Automatic updates are enabled by default for system-defined boot sources, but these boot sources are not listed in the CR unless you add them. |
Set the value of the dataimportcrontemplate.kubevirt.io/enable
annotation to 'false'
.
For example:
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
spec:
dataImportCronTemplates:
- metadata:
annotations:
dataimportcrontemplate.kubevirt.io/enable: 'false'
name: rhel8-image-cron
# ...
Save the file.
You can determine if a boot source is system-defined or custom by viewing the HyperConverged
custom resource (CR).
View the contents of the HyperConverged
CR by running the following command:
$ oc get hco -n openshift-cnv kubevirt-hyperconverged -o yaml
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
spec:
# ...
status:
# ...
dataImportCronTemplates:
- metadata:
annotations:
cdi.kubevirt.io/storage.bind.immediate.requested: "true"
name: centos-7-image-cron
spec:
garbageCollect: Outdated
managedDataSource: centos7
schedule: 55 8/12 * * *
template:
metadata: {}
spec:
source:
registry:
url: docker://quay.io/containerdisks/centos:7-2009
storage:
resources:
requests:
storage: 30Gi
status: {}
status:
commonTemplate: true (1)
# ...
- metadata:
annotations:
cdi.kubevirt.io/storage.bind.immediate.requested: "true"
name: user-defined-dic
spec:
garbageCollect: Outdated
managedDataSource: user-defined-centos-stream8
schedule: 55 8/12 * * *
template:
metadata: {}
spec:
source:
registry:
pullMethod: node
url: docker://quay.io/containerdisks/centos-stream:8
storage:
resources:
requests:
storage: 30Gi
status: {}
status: {} (2)
# ...
1 | Indicates a system-defined boot source. |
2 | Indicates a custom boot source. |
Verify the status of the boot source by reviewing the status.dataImportCronTemplates.status
field.
If the field contains commonTemplate: true
, it is a system-defined boot source.
If the status.dataImportCronTemplates.status
field has the value {}
, it is a custom boot source.