9.3. 管理自动引导源更新


您可以为以下引导源管理自动更新:

通过引导源,可让虚拟机 (VM) 的创建更容易和高效。如果启用了自动引导源更新,Containerized Data Importer (CDI) 导入、轮询和更新镜像,以便为新虚拟机克隆它们。默认情况下,CDI 自动更新红帽引导源。

9.3.1. 管理红帽引导源更新

您可以通过禁用 enableCommonBootImageImport 功能门,选择对所有系统定义的引导源的自动更新。如果您禁用这个功能门,则所有 DataImportCron 对象都会被删除。这不会删除之前导入存储操作系统镜像的引导源对象,但管理员可以手动删除它们。

当禁用 enableCommonBootImageImport 功能门时,DataSource 对象会被重置,以便它们不再指向原始引导源。管理员可以通过为 DataSource 对象创建新的持久性卷声明(PVC)或卷快照来手动提供引导源,然后使用操作系统镜像填充它。

9.3.1.1. 为所有系统定义的引导源管理自动更新

禁用自动引导源导入和更新可能会降低资源使用量。在断开连接的环境中,禁用自动引导源更新可防止 CDIDataImportCronOutdated 警报填满日志。

要禁用所有系统定义的引导源的自动更新,请通过将值设为 false 来关闭 enableCommonBootImageImport 功能门。将此值设置为 true 可重新启用功能门并重新打开自动更新。

注意

自定义引导源不受此设置的影响。

流程

  • 通过编辑 HyperConverged 自定义资源 (CR) 为自动引导源更新切换功能门。

    • 要禁用自动引导源更新,请将 HyperConverged CR 中的 spec.featureGates.enableCommonBootImageImport 字段设置为 false。例如:

      $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
        --type json -p '[{"op": "replace", "path": \
        "/spec/featureGates/enableCommonBootImageImport", \
        "value": false}]'
    • 要重新启用自动引导源更新,请将 HyperConverged CR 中的 spec.featureGates.enableCommonBootImageImport 字段设置为 true。例如:

      $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
        --type json -p '[{"op": "replace", "path": \
        "/spec/featureGates/enableCommonBootImageImport", \
        "value": true}]'

9.3.2. 管理自定义引导源更新

不是由 OpenShift Virtualization 提供的自定义引导源不受功能门控制。您必须通过编辑 HyperConverged 自定义资源 (CR) 来单独管理它们。

重要

您必须配置存储类。否则,集群无法接收自定义引导源的自动更新。详情请参阅定义一个存储类

9.3.2.1. 为自定义引导源更新配置存储类

您可以通过编辑 HyperConverged 自定义资源 (CR) 来覆盖默认存储类。

重要

引导源使用默认存储类从存储创建。如果您的集群没有默认存储类,则必须在为自定义引导源配置自动更新前定义一个。

流程

  1. 运行以下命令,在默认编辑器中打开 HyperConverged CR:

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 通过在 storageClassName 字段中输入值来定义新的存储类:

    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
          schedule: "0 */12 * * *" 2
          managedDataSource: <data_source> 3
    # ...
    1
    定义存储类。
    2
    必需:以 cron 格式指定的作业调度。
    3
    必需:要使用的数据源。
    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.
  3. 从当前的默认存储类中删除 storageclass.kubernetes.io/is-default-class 注解。

    1. 运行以下命令,检索当前默认存储类的名称:

      $ oc get storageclass

      输出示例

      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
      在本例中,当前的默认存储类名为 hostpath-csi-basic
    2. 运行以下命令,从当前默认存储类中删除注解:

      $ oc patch storageclass <current_default_storage_class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}' 1
      1
      <current_default_storage_class> 替换为默认存储类的 storageClassName 值。
  4. 运行以下命令,将新存储类设置为默认值:

    $ oc patch storageclass <new_storage_class> -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' 1
    1
    <new_storage_class> 替换为添加到 HyperConverged CR 中的 storageClassName 值。

9.3.2.2. 为自定义引导源启用自动更新

OpenShift Virtualization 默认自动更新系统定义的引导源,但不会自动更新自定义引导源。您必须通过编辑 HyperConverged 自定义资源 (CR) 手动启用自动更新。

先决条件

  • 集群有一个默认存储类。

流程

  1. 运行以下命令,在默认编辑器中打开 HyperConverged CR:

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 编辑 HyperConverged CR,在 dataImportCronTemplates 部分添加适当的模板和引导源。例如:

    自定义资源示例

    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
          labels:
            instancetype.kubevirt.io/default-preference: centos.7
            instancetype.kubevirt.io/default-instancetype: u1.medium
        spec:
          schedule: "0 */12 * * *" 2
          template:
            spec:
              source:
                registry: 3
                  url: docker://quay.io/containerdisks/centos:7-2009
              storage:
                resources:
                  requests:
                    storage: 30Gi
          garbageCollect: Outdated
          managedDataSource: centos7 4

    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 下找到。
  3. 保存该文件。

9.3.2.3. 启用卷快照引导源

通过在与存储操作系统基础镜像的存储类关联的 StorageProfile 中设置参数来启用卷快照引导源。虽然 DataImportCron 最初被设计为只维护 PVC 源,但 VolumeSnapshot 源会比特定存储类型的 PVC 源更好地扩展。

注意

从单个快照克隆时,在存储配置文件中使用卷快照可以更好地扩展。

先决条件

  • 您必须有权访问带有操作系统镜像的卷快照。
  • 存储必须支持快照。

流程

  1. 运行以下命令,打开与用于置备引导源的存储类对应的存储配置集对象:

    $ oc edit storageprofile <storage_class>
  2. 查看 StorageProfiledataImportCronSourceFormat 规格,以确认虚拟机是否默认使用 PVC 或卷快照。
  3. 如果需要,通过将 dataImportCronSourceFormat 规格更新为 snapshot 来编辑存储配置文件。

    存储配置集示例

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
    # ...
    spec:
      dataImportCronSourceFormat: snapshot

验证

  1. 打开与用于置备引导源的存储类对应的存储配置集对象。

    $ oc get storageprofile <storage_class>  -oyaml
  2. 确认 StorageProfiledataImportCronSourceFormat 规格已设置为 'snapshot',DataImportCron 指向的任何 DataSource 对象现在引用卷快照。

现在,您可以使用这些引导源来创建虚拟机。

9.3.3. 为单个引导源禁用自动更新

您可以通过编辑 HyperConverged 自定义资源 (CR) 禁用单个引导源的自动更新,无论是自定义还是系统定义。

流程

  1. 运行以下命令,在默认编辑器中打开 HyperConverged CR:

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 通过编辑 spec.dataImportCronTemplates 字段来禁用单个引导源的自动更新。

    自定义引导源
    • spec.dataImportCronTemplates 字段删除引导源。在默认情况下,自定义引导源禁用了自动更新。
    系统定义的引导源
    1. 将引导源添加到 spec.dataImportCronTemplates

      注意

      对于系统定义的引导源,默认启用自动更新,但除非添加它们,否则这些引导源不会在 CR 中列出。

    2. dataimportcrontemplate.kubevirt.io/enable 注解的值设置为 'false'

      例如:

      apiVersion: hco.kubevirt.io/v1beta1
      kind: HyperConverged
      metadata:
        name: kubevirt-hyperconverged
      spec:
        dataImportCronTemplates:
        - metadata:
            annotations:
              dataimportcrontemplate.kubevirt.io/enable: 'false'
            name: rhel8-image-cron
      # ...
  3. 保存该文件。

9.3.4. 验证引导源的状态

您可以通过查看 HyperConverged 自定义资源(CR)来确定引导源是否为系统定义或自定义。

流程

  1. 运行以下命令,查看 HyperConverged CR 的内容:

    $ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -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
    表示系统定义的引导源。
    2
    表示自定义引导源。
  2. 通过查看 status.dataImportCronTemplates.status 字段来验证引导源的状态。

    • 如果字段包含 commonTemplate: true,则它是一个系统定义的引导源。
    • 如果 status.dataImportCronTemplates.status 字段的值为 {},则它是一个自定义引导源。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.