12.3. 管理自动引导源更新
您可以为以下引导源管理自动更新:
通过引导源,可让虚拟机 (VM) 的创建更容易和高效。如果启用了自动引导源更新,Containerized Data Importer (CDI) 导入、轮询和更新镜像,以便为新虚拟机克隆它们。默认情况下,CDI 自动更新红帽引导源。
12.3.1. 管理红帽引导源更新 复制链接链接已复制到粘贴板!
您可以通过将 enableCommonBootImageImport
字段设置为 false
来选择不使用所有系统定义的引导源的自动更新。如果将值设为 false
,则所有 DataImportCron
对象都会被删除。但是,这不会删除之前导入的引导源对象来存储操作系统镜像,但管理员可以手动删除它们。
当 enableCommonBootImageImport
字段值设置为 false
时,会重置DataSource
对象,以便它们不再指向原始引导源。管理员可以手动提供引导源,方法是为 DataSource
对象创建新持久性卷声明(PVC)或卷快照,然后使用操作系统镜像填充它。
12.3.1.1. 为所有系统定义的引导源管理自动更新 复制链接链接已复制到粘贴板!
禁用自动引导源导入和更新可能会降低资源使用量。在断开连接的环境中,禁用自动引导源更新可防止 CDIDataImportCronOutdated
警报填满日志。
要禁用所有系统定义的引导源的自动更新,请将 enableCommonBootImageImport
字段设置为 false
。将此值设置为 true
可重新打开自动更新。
自定义引导源不受此设置的影响。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
通过编辑
HyperConverged
自定义资源(CR)来启用或禁用自动引导源更新。要禁用自动引导源更新,请将
HyperConverged
CR 中的spec.enableCommonBootImageImport
字段设置为false
。例如:oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/enableCommonBootImageImport", \ "value": false}]'
$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/enableCommonBootImageImport", \ "value": false}]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要重新启用自动引导源更新,请将
HyperConverged
CR 中的spec.enableCommonBootImageImport
字段设置为true
。例如:oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/enableCommonBootImageImport", \ "value": true}]'
$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/enableCommonBootImageImport", \ "value": true}]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3.2. 管理自定义引导源更新 复制链接链接已复制到粘贴板!
不是由 OpenShift Virtualization 提供的自定义引导源不受功能门控制。您必须通过编辑 HyperConverged
自定义资源 (CR) 来单独管理它们。
您必须配置存储类。否则,集群无法接收自定义引导源的自动更新。详情请参阅 定义存储类。
12.3.2.1. 配置默认和 virt-default 存储类 复制链接链接已复制到粘贴板!
存储类决定了如何为工作负载置备持久性存储。在 OpenShift Virtualization 中,virt-default 存储类优先于集群默认存储类,用于虚拟化工作负载。在一个时间点上,仅一个存储类应被设置为 virt-default 或 cluster default。如果多个存储类被标记为默认,virt-default 存储类会覆盖集群默认。为确保一致的行为,请仅配置一个存储类作为虚拟化工作负载的默认值。
引导源使用默认存储类创建。当默认存储类更改时,会使用新的默认存储类自动更新旧的引导源。如果您的集群没有默认存储类,则必须定义一个。
如果引导源镜像存储为卷快照,并且集群默认和 virt-default 存储类都未设置,则会清理卷快照,并创建新的数据卷。但是,在设置了默认存储类前,新创建的数据卷不会开始导入。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
将当前的 virt-default 或集群默认存储类进行补丁为 false:
运行以下命令,识别当前标记为 virt-default 的所有存储类:
oc get sc -o json| jq '.items[].metadata|select(.annotations."storageclass.kubevirt.io/is-default-virt-class"=="true")|.name'
$ oc get sc -o json| jq '.items[].metadata|select(.annotations."storageclass.kubevirt.io/is-default-virt-class"=="true")|.name'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于返回的每个存储类,运行以下命令来删除 virt-default 注解:
oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubevirt.io/is-default-virt-class": "false"}}}'
$ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubevirt.io/is-default-virt-class": "false"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,识别当前标记为集群默认的所有存储类:
oc get sc -o json| jq '.items[].metadata|select(.annotations."storageclass.kubernetes.io/is-default-class"=="true")|.name'
$ oc get sc -o json| jq '.items[].metadata|select(.annotations."storageclass.kubernetes.io/is-default-class"=="true")|.name'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于返回的每个存储类,运行以下命令来删除集群默认注解:
oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
$ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
设置新的默认存储类:
运行以下命令,将 virt-default 角色分配给存储类:
oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubevirt.io/is-default-virt-class": "true"}}}'
$ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubevirt.io/is-default-virt-class": "true"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,运行以下命令将集群默认角色分配给存储类:
oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
$ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3.2.2. 为引导源镜像配置存储类 复制链接链接已复制到粘贴板!
您可以在 HyperConverged
资源中配置特定的存储类。
为确保稳定的行为并避免不必要的重新导入,您可以在 HyperConverged
资源的 dataImportCronTemplates
部分中指定 storageClassName
。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
运行以下命令,在默认编辑器中打开
HyperConverged
CR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
dataImportCronTemplate
添加到HyperConverged
资源的 spec 部分,并设置storageClassName
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow For the custom image to be detected as an available boot source, the value of the `spec.dataVolumeTemplates.spec.sourceRef.name` parameter in the VM template must match this value.
For the custom image to be detected as an available boot source, the value of the `spec.dataVolumeTemplates.spec.sourceRef.name` parameter in the VM template must match this value.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 等待 HyperConverged Operator (HCO)和 Scheduling、Scale 和 Performance (SSP)资源完成协调。
运行以下命令,从
openshift-virtualization-os-images
命名空间中删除所有过时的DataVolume
和VolumeSnapshot
对象。oc delete DataVolume,VolumeSnapshot -n openshift-virtualization-os-images --selector=cdi.kubevirt.io/dataImportCron
$ oc delete DataVolume,VolumeSnapshot -n openshift-virtualization-os-images --selector=cdi.kubevirt.io/dataImportCron
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待所有
DataSource
对象都变为 "Ready - True" 状态。数据源可以引用 PersistentVolumeClaim (PVC) 或 VolumeSnapshot。要检查预期的源格式,请运行以下命令:oc get storageprofile <storage_class_name> -o json | jq .status.dataImportCronSourceFormat
$ oc get storageprofile <storage_class_name> -o json | jq .status.dataImportCronSourceFormat
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3.2.3. 为自定义引导源启用自动更新 复制链接链接已复制到粘贴板!
OpenShift Virtualization 默认自动更新系统定义的引导源,但不会自动更新自定义引导源。您必须通过编辑 HyperConverged
自定义资源 (CR) 手动启用自动更新。
先决条件
- 集群有一个默认存储类。
-
已安装 OpenShift CLI(
oc
)。
流程
运行以下命令,在默认编辑器中打开
HyperConverged
CR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
HyperConverged
CR,在dataImportCronTemplates
部分添加适当的模板和引导源。例如:自定义资源示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 对于将
volumeBindingMode
设置为WaitForFirstConsumer
的存储类来说,这个注解是必需的。 - 2
- 以 cron 格式指定的作业调度计划。
- 3
- 用于从 registry 源创建数据卷。使用默认
pod
pullMethod
而不是节点
pullMethod
,这基于节点
docker 缓存。当 registry 镜像通过Container.Image
可用时,节点
docker 缓存很有用,但 CDI 导入程序没有授权访问它。 - 4
- 要使自定义镜像被检测到为可用的引导源,镜像的
managedDataSource
的名称必须与模板的DataSource
的名称匹配,它在 VM 模板 YAML 文件中的spec.dataVolumeTemplates.spec.sourceRef.name
下找到。
- 保存该文件。
12.3.2.4. 启用卷快照引导源 复制链接链接已复制到粘贴板!
通过在与存储操作系统基础镜像的存储类关联的 StorageProfile
中设置参数来启用卷快照引导源。虽然 DataImportCron
最初被设计为只维护 PVC 源,但 VolumeSnapshot
源会比特定存储类型的 PVC 源更好地扩展。
从单个快照克隆时,在存储配置文件中使用卷快照可以更好地扩展。
先决条件
- 您必须有权访问带有操作系统镜像的卷快照。
- 存储必须支持快照。
-
已安装 OpenShift CLI(
oc
)。
流程
运行以下命令,打开与用于置备引导源的存储类对应的存储配置集对象:
oc edit storageprofile <storage_class>
$ oc edit storageprofile <storage_class>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
查看
StorageProfile
的dataImportCronSourceFormat
规格,以确认虚拟机是否默认使用 PVC 或卷快照。 如果需要,通过将
dataImportCronSourceFormat
规格更新为snapshot
来编辑存储配置文件。存储配置集示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
打开与用于置备引导源的存储类对应的存储配置集对象。
oc get storageprofile <storage_class> -oyaml
$ oc get storageprofile <storage_class> -oyaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
确认
StorageProfile
的dataImportCronSourceFormat
规格已设置为 'snapshot',DataImportCron
指向的任何DataSource
对象现在引用卷快照。
现在,您可以使用这些引导源来创建虚拟机。
12.3.3. 为单个引导源禁用自动更新 复制链接链接已复制到粘贴板!
您可以通过编辑 HyperConverged
自定义资源 (CR) 禁用单个引导源的自动更新,无论是自定义还是系统定义。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
运行以下命令,在默认编辑器中打开
HyperConverged
CR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
Copy 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.3.4. 验证引导源的状态 复制链接链接已复制到粘贴板!
您可以通过查看 HyperConverged
自定义资源(CR)来确定引导源是否为系统定义或自定义。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
运行以下命令,查看
HyperConverged
CR 的内容:oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o yaml
$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o yaml
Copy 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
字段的值为{}
,则它是一个自定义引导源。
-
如果字段包含