12.7. 管理自动引导源更新
管理自动引导源更新。
12.7.1. 关于自动引导源更新 复制链接链接已复制到粘贴板!
通过引导源,可让虚拟机 (VM) 的创建更容易和高效。如果启用了自动引导源更新,Containerized Data Importer (CDI) 导入、轮询和更新镜像,以便为新虚拟机克隆它们。默认情况下,CDI 自动更新 OpenShift Virtualization 提供的系统定义的引导源。
您可以通过禁用 enableCommonBootImageImport 功能门,选择对所有系统定义的引导源的自动更新。如果您禁用这个功能门,则所有 DataImportCron 对象都会被删除。这不会删除之前导入的 PersistentVolumeClaim (PVC) 对象来存储操作系统镜像,但管理员可以手动删除它们。
当禁用 enableCommonBootImageImport 功能门时,DataSource 对象会被重置,以便它们不再指向原始 PVC。管理员可以通过为 DataSource 对象创建新 PVC,并使用操作系统镜像填充 PVC 来手动提供引导源。
不是由 OpenShift Virtualization 提供的自定义引导源不受功能门控制。您必须通过编辑 HyperConverged 自定义资源 (CR) 来单独管理它们。您还可以使用此方法管理各个系统定义的引导源。
12.7.2. 为所有系统引导源启用或禁用自动更新 复制链接链接已复制到粘贴板!
使用功能门控制所有系统定义的引导源的自动更新。
12.7.2.1. 为所有系统定义的引导源管理自动更新 复制链接链接已复制到粘贴板!
禁用自动引导源导入和更新可能会降低资源使用量。在断开连接的环境中,禁用自动引导源更新可防止 CDIDataImportCronOutdated 警报填满日志。
要禁用所有系统定义的引导源的自动更新,请通过将值设为 false 来关闭 enableCommonBootImageImport 功能门。将此值设置为 true 可重新启用功能门并重新打开自动更新。
自定义引导源不受此设置的影响。
流程
通过编辑
HyperConverged自定义资源 (CR) 为自动引导源更新切换功能门。要禁用自动引导源更新,请将
HyperConvergedCR 中的spec.featureGates.enableCommonBootImageImport字段设置为false。例如:oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/featureGates/enableCommonBootImageImport", \ "value": false}]'$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/featureGates/enableCommonBootImageImport", \ "value": false}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要重新启用自动引导源更新,请将
HyperConvergedCR 中的spec.featureGates.enableCommonBootImageImport字段设置为true。例如:oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/featureGates/enableCommonBootImageImport", \ "value": true}]'$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/featureGates/enableCommonBootImageImport", \ "value": true}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.7.3. 为自定义引导源启用自动更新 复制链接链接已复制到粘贴板!
确保集群具有默认存储类。然后,为自定义引导源启用自动更新。
12.7.3.1. 为自定义引导源更新配置存储类 复制链接链接已复制到粘贴板!
在 HyperConverged 自定义资源 (CR) 中指定新的默认存储类。
引导源使用默认存储类从存储创建。如果您的集群没有默认存储类,则必须在为自定义引导源配置自动更新前定义一个。
流程
运行以下命令,在默认编辑器中打开
HyperConvergedCR:oc edit hco -n openshift-cnv kubevirt-hyperconverged
$ oc edit hco -n openshift-cnv kubevirt-hyperconvergedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在
storageClassName字段中输入值来定义新的存储类:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 定义存储类。
从当前的默认存储类中删除
storageclass.kubernetes.io/is-default-class注解。运行以下命令,检索当前默认存储类的名称:
oc get sc
$ oc get scCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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 ...
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 11d1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,当前的默认存储类名为
hostpath-csi-basic。
运行以下命令,从当前默认存储类中删除注解:
oc patch storageclass <current_default_storage_class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'$ oc patch storageclass <current_default_storage_class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<current_default_storage_class>替换为默认存储类的storageClassName值。
运行以下命令,将新存储类设置为默认值:
oc patch storageclass <new_storage_class> -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'$ oc patch storageclass <new_storage_class> -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<new_storage_class>替换为添加到HyperConvergedCR 中的storageClassName值。
12.7.3.2. 为自定义引导源启用自动更新 复制链接链接已复制到粘贴板!
OpenShift Virtualization 默认自动更新系统定义的引导源,但不会自动更新自定义引导源。您必须通过编辑 HyperConverged 自定义资源 (CR) 手动启用自动更新。
先决条件
- 集群有一个默认存储类。
流程
运行以下命令,在默认编辑器中打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
HyperConvergedCR,在dataImportCronTemplates部分添加适当的模板和引导源。例如:自定义资源示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 对于将
volumeBindingMode设置为WaitForFirstConsumer的存储类来说,这个注解是必需的。 - 2
- 以 cron 格式指定的作业调度计划。
- 3
- 用于从 registry 源创建数据卷。使用默认
podpullMethod而不是节点pullMethod,这基于节点docker 缓存。当 registry 镜像通过Container.Image可用时,节点docker 缓存很有用,但 CDI 导入程序没有授权访问它。 - 4
- 要使自定义镜像被检测到为可用的引导源,镜像的
managedDataSource的名称必须与模板的DataSource的名称匹配,它在 VM 模板 YAML 文件中的spec.dataVolumeTemplates.spec.sourceRef.name下找到。 - 5
- 在删除 cron 作业时,使用
All来保留数据卷和数据源。删除 cron 作业时,使用None删除数据卷和数据源。
- 保存该文件。
12.7.4. 禁用特定引导源的自动更新 复制链接链接已复制到粘贴板!
禁用单个引导源的自动更新。
12.7.4.1. 为单个引导源禁用自动更新 复制链接链接已复制到粘贴板!
您可以通过编辑 HyperConverged 自定义资源 (CR) 禁用单个引导源的自动更新,无论是自定义还是系统定义。
流程
运行以下命令,在默认编辑器中打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过编辑
spec.dataImportCronTemplates字段来禁用单个引导源的自动更新。- 自定义引导源
-
从
spec.dataImportCronTemplates字段删除引导源。在默认情况下,自定义引导源禁用了自动更新。
-
从
- 系统定义的引导源
将引导源添加到
spec.dataImportCronTemplates。注意对于系统定义的引导源,默认启用自动更新,但除非添加它们,否则这些引导源不会在 CR 中列出。
将
dataimportcrontemplate.kubevirt.io/enable注解的值设置为'false'。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 保存该文件。
12.7.5. 验证引导源的状态 复制链接链接已复制到粘贴板!
您可以通过查看 HyperConverged 自定义资源(CR)来确定引导源是否为系统定义或自定义。
流程
运行以下命令,查看
HyperConvergedCR 的内容:oc get hco -n openshift-cnv kubevirt-hyperconverged -o yaml
$ oc get hco -n openshift-cnv kubevirt-hyperconverged -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过查看
status.dataImportCronTemplates.status字段来验证引导源的状态。-
如果字段包含
commonTemplate: true,则它是一个系统定义的引导源。 -
如果
status.dataImportCronTemplates.status字段的值为{},则它是一个自定义引导源。
-
如果字段包含