6.2. 从自定义镜像创建虚拟机


6.2.1. 从自定义镜像创建虚拟机概述

您可以使用以下方法之一从自定义操作系统镜像创建虚拟机(VM):

Containerized Data Importer (CDI) 使用数据卷将镜像导入到 PVC 中。您可以使用 Red Hat OpenShift Service on AWS Web 控制台或命令行将 PVC 添加到虚拟机。

重要

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

您还必须在 Windows 虚拟机上安装 VirtIO 驱动程序

QEMU 客户机代理包含在红帽镜像中。

6.2.2. 使用容器磁盘创建虚拟机

您可以使用从操作系统镜像构建的容器磁盘创建虚拟机 (VM)。

您可以为容器磁盘启用自动更新。详情请参阅管理自动引导源更新

重要

如果容器磁盘较大,I/O 流量可能会增加,并导致 worker 节点不可用。您可以修剪 DeploymentConfig 对象来解决这个问题:

您可以通过执行以下步骤从容器磁盘创建虚拟机:

  1. 将操作系统镜像构建到容器磁盘中,并将其上传到容器注册表
  2. 如果您的容器 registry 没有 TLS,请将您的环境配置为为您的 registry 禁用 TLS
  3. 使用 Web 控制台命令行使用容器磁盘创建虚拟机作为磁盘源。
重要

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

6.2.2.1. 构建和上传容器磁盘

您可以将虚拟机(VM)镜像构建到容器磁盘中,并将其上传到 registry。

容器磁盘的大小受托管容器磁盘的 registry 的最大层大小的限制。

注意

对于 Red Hat Quay,您可以通过编辑首次部署 Red Hat Quay 时创建的 YAML 配置文件来更改最大层大小。

先决条件

  • 必须安装 podman
  • 您必须具有 QCOW2 或 RAW 镜像文件。

流程

  1. 创建 Dockerfile 以将虚拟机镜像构建到容器镜像中。虚拟机镜像必须由 QEMU 所有,其 UID 为 107,并放置在容器内的 /disk/ 目录中。/disk/ 目录的权限必须设为 0440

    以下示例在第一阶段使用 Red Hat Universal Base Image(UBI)来处理这些配置更改,并使用第二阶段中的最小 scratch 镜像存储结果:

    $ cat > Dockerfile << EOF
    FROM registry.access.redhat.com/ubi8/ubi:latest AS builder
    ADD --chown=107:107 <vm_image>.qcow2 /disk/ 1
    RUN chmod 0440 /disk/*
    
    FROM scratch
    COPY --from=builder /disk/* /disk/
    EOF
    1
    其中 <vm_image> 是 QCOW2 或 RAW 格式的镜像。如果使用远程镜像,请将 <vm_image>.qcow2 替换为完整的 URL。
  2. 构建和标记容器:

    $ podman build -t <registry>/<container_disk_name>:latest .
  3. 将容器镜像推送到 registry:

    $ podman push <registry>/<container_disk_name>:latest

6.2.2.2. 为容器 registry 禁用 TLS

您可以通过编辑 HyperConverged 自定义资源的 insecureRegistries 字段来禁用一个或多个容器 registry 的 TLS(传输层安全)。

先决条件

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

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 将不安全的 registry 列表添加到 spec.storageImport.insecureRegistries 字段中。

    HyperConverged 自定义资源示例

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      storageImport:
        insecureRegistries: 1
          - "private-registry-example-1:5000"
          - "private-registry-example-2:5000"

    1
    将此列表中的示例替换为有效的 registry 主机名。

6.2.2.3. 使用 Web 控制台从容器磁盘创建虚拟机

您可以使用 Red Hat OpenShift Service on AWS web 控制台从容器 registry 中导入容器磁盘来创建虚拟机(VM)。

流程

  1. 在 web 控制台中进入到 Virtualization Catalog
  2. 点没有可用引导源的模板标题。
  3. Customize VirtualMachine
  4. Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 Registry (creates PVC)
  5. 输入容器镜像 URL。示例:https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2
  6. 设置磁盘大小。
  7. 点击 Next
  8. Create VirtualMachine

6.2.2.4. 使用命令行从容器磁盘创建虚拟机

您可以使用命令行从容器磁盘创建虚拟机 (VM)。

创建虚拟机 (VM) 时,容器磁盘的数据卷将导入到持久性存储中。

先决条件

  • 您必须具有包含容器磁盘的容器 registry 的访问凭证。

流程

  1. 如果容器 registry 需要身份验证,请创建一个 Secret 清单,指定凭证,并将其保存为 data-source-secret.yaml 文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: data-source-secret
      labels:
        app: containerized-data-importer
    type: Opaque
    data:
      accessKeyId: "" 1
      secretKey:   "" 2
    1
    指定以 Base64 编码的密钥 ID 或用户名。
    2
    指定以 Base64 编码的 secret 密钥或密码。
  2. 运行以下命令来应用 Secret 清单:

    $ oc apply -f data-source-secret.yaml
  3. 如果虚拟机必须与没有由系统 CA 捆绑包签名的证书的服务器通信,请在与虚拟机相同的命名空间中创建一个配置映射:

    $ oc create configmap tls-certs 1
      --from-file=</path/to/file/ca.pem> 2
    1
    指定配置映射名称。
    2
    指定 CA 证书的路径。
  4. 编辑 VirtualMachine 清单,并将它保存为 vm-fedora-datavolume.yaml 文件:

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      creationTimestamp: null
      labels:
        kubevirt.io/vm: vm-fedora-datavolume
      name: vm-fedora-datavolume 1
    spec:
      dataVolumeTemplates:
      - metadata:
          creationTimestamp: null
          name: fedora-dv 2
        spec:
          storage:
            resources:
              requests:
                storage: 10Gi 3
            storageClassName: <storage_class> 4
          source:
            registry:
              url: "docker://kubevirt/fedora-cloud-container-disk-demo:latest" 5
              secretRef: data-source-secret 6
              certConfigMap: tls-certs 7
        status: {}
      running: true
      template:
        metadata:
          creationTimestamp: null
          labels:
            kubevirt.io/vm: vm-fedora-datavolume
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: datavolumedisk1
            machine:
              type: ""
            resources:
              requests:
                memory: 1.5Gi
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: fedora-dv
            name: datavolumedisk1
    status: {}
    1
    指定虚拟机的名称。
    2
    指定数据卷的名称。
    3
    指定为数据卷请求的存储大小。
    4
    可选:如果您没有指定存储类,则会使用默认存储类。
    5
    指定容器 registry 的 URL。
    6
    可选:如果您为容器 registry 访问凭证创建 secret,请指定 secret 名称。
    7
    可选:指定一个 CA 证书配置映射。
  5. 运行以下命令来创建虚拟机:

    $ oc create -f vm-fedora-datavolume.yaml

    oc create 命令创建数据卷和虚拟机。CDI 控制器创建一个带有正确注解和导入过程的底层 PVC。导入完成后,数据卷状态变为 Succeeded。您可以启动虚拟机。

    数据卷置备在后台进行,因此无需监控进程。

验证

  1. importer pod 从指定的 URL 下载容器磁盘,并将其存储在置备的持久性卷中。运行以下命令,查看 importer pod 的状态:

    $ oc get pods
  2. 运行以下命令监控数据卷,直到其状态为 Succeeded

    $ oc describe dv fedora-dv 1
    1
    指定您在 VirtualMachine 清单中定义的数据卷名称。
  3. 通过访问其串行控制台来验证置备是否已完成,以及虚拟机是否已启动:

    $ virtctl console vm-fedora-datavolume

6.2.3. 通过从网页导入镜像来创建虚拟机

您可以通过从 web 页面导入操作系统镜像来创建虚拟机 (VM)。

重要

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

6.2.3.1. 使用 Web 控制台从网页上的镜像创建虚拟机

您可以使用 Red Hat OpenShift Service on AWS web 控制台从网页中导入镜像来创建虚拟机(VM)。

先决条件

  • 您必须有权访问包含镜像的网页。

流程

  1. 在 web 控制台中进入到 Virtualization Catalog
  2. 点没有可用引导源的模板标题。
  3. Customize VirtualMachine
  4. Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 URL (creates PVC)
  5. 输入镜像 URL。示例:https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software
  6. 输入容器镜像 URL。示例:https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2
  7. 设置磁盘大小。
  8. 点击 Next
  9. Create VirtualMachine

6.2.3.2. 使用命令行从网页上的镜像创建虚拟机

您可以使用命令行从网页中的镜像创建虚拟机 (VM)。

创建虚拟机 (VM) 时,带有镜像的数据卷将导入到持久性存储中。

先决条件

  • 您必须有包含镜像的网页的访问凭证。

流程

  1. 如果网页需要身份验证,请创建一个 Secret 清单,指定凭证,并将其保存为 data-source-secret.yaml 文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: data-source-secret
      labels:
        app: containerized-data-importer
    type: Opaque
    data:
      accessKeyId: "" 1
      secretKey:   "" 2
    1
    指定以 Base64 编码的密钥 ID 或用户名。
    2
    指定以 Base64 编码的 secret 密钥或密码。
  2. 运行以下命令来应用 Secret 清单:

    $ oc apply -f data-source-secret.yaml
  3. 如果虚拟机必须与没有由系统 CA 捆绑包签名的证书的服务器通信,请在与虚拟机相同的命名空间中创建一个配置映射:

    $ oc create configmap tls-certs 1
      --from-file=</path/to/file/ca.pem> 2
    1
    指定配置映射名称。
    2
    指定 CA 证书的路径。
  4. 编辑 VirtualMachine 清单,并将它保存为 vm-fedora-datavolume.yaml 文件:

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      creationTimestamp: null
      labels:
        kubevirt.io/vm: vm-fedora-datavolume
      name: vm-fedora-datavolume 1
    spec:
      dataVolumeTemplates:
      - metadata:
          creationTimestamp: null
          name: fedora-dv 2
        spec:
          storage:
            resources:
              requests:
                storage: 10Gi 3
            storageClassName: <storage_class> 4
          source:
            http:
              url: "https://mirror.arizona.edu/fedora/linux/releases/35/Cloud/x86_64/images/Fedora-Cloud-Base-35-1.2.x86_64.qcow2" 5
            registry:
              url: "docker://kubevirt/fedora-cloud-container-disk-demo:latest" 6
              secretRef: data-source-secret 7
              certConfigMap: tls-certs 8
        status: {}
      running: true
      template:
        metadata:
          creationTimestamp: null
          labels:
            kubevirt.io/vm: vm-fedora-datavolume
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: datavolumedisk1
            machine:
              type: ""
            resources:
              requests:
                memory: 1.5Gi
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: fedora-dv
            name: datavolumedisk1
    status: {}
    1
    指定虚拟机的名称。
    2
    指定数据卷的名称。
    3
    指定为数据卷请求的存储大小。
    4
    可选:如果您没有指定存储类,则会使用默认存储类。
    5 6
    指定网页的 URL。
    7
    可选:如果您为 Web 页面访问凭证创建了 secret,请指定 secret 名称。
    8
    可选:指定一个 CA 证书配置映射。
  5. 运行以下命令来创建虚拟机:

    $ oc create -f vm-fedora-datavolume.yaml

    oc create 命令创建数据卷和虚拟机。CDI 控制器创建一个带有正确注解和导入过程的底层 PVC。导入完成后,数据卷状态变为 Succeeded。您可以启动虚拟机。

    数据卷置备在后台进行,因此无需监控进程。

验证

  1. importer pod 从指定的 URL 下载镜像,并将其存储在置备的持久性卷上。运行以下命令,查看 importer pod 的状态:

    $ oc get pods
  2. 运行以下命令监控数据卷,直到其状态为 Succeeded

    $ oc describe dv fedora-dv 1
    1
    指定您在 VirtualMachine 清单中定义的数据卷名称。
  3. 通过访问其串行控制台来验证置备是否已完成,以及虚拟机是否已启动:

    $ virtctl console vm-fedora-datavolume

6.2.4. 通过上传镜像来创建虚拟机

您可以通过从本地机器上传操作系统镜像来创建虚拟机 (VM)。

您可以通过上传 Windows 镜像到 PVC 来创建 Windows 虚拟机。然后,在创建虚拟机时克隆 PVC。

重要

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

您还必须在 Windows 虚拟机上安装 VirtIO 驱动程序

6.2.4.1. 使用 Web 控制台从上传的镜像创建虚拟机

您可以使用 Red Hat OpenShift Service on AWS web 控制台从上传的操作系统镜像创建虚拟机(VM)。

先决条件

  • 您必须有一个 IMGISOQCOW2 镜像文件。

流程

  1. 在 web 控制台中进入到 Virtualization Catalog
  2. 点没有可用引导源的模板标题。
  3. Customize VirtualMachine
  4. Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 Upload (Upload a new file to a PVC)
  5. 浏览到本地机器上的镜像并设置磁盘大小。
  6. Customize VirtualMachine
  7. Create VirtualMachine
6.2.4.1.1. 常规调整虚拟机镜像

在使用镜像创建金级镜像(虚拟机)前,您可以对 Red Hat Enterprise Linux (RHEL)镜像进行常规化,以删除所有特定于系统的配置数据。您可以使用金级镜像来部署新虚拟机。

您可使用 virtctlguestfsvirt-sysprep 工具对 RHEL 虚拟机进行常规化。

先决条件

  • 您有一个 RHEL 虚拟机(VM)作为基本虚拟机。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 virtctl 工具。

流程

  1. 输入以下命令停止 RHEL 虚拟机(如果它正在运行):

    $ virtctl stop <my_vm_name>
  2. 可选:克隆虚拟机,以避免丢失原始虚拟机中的数据。然后您可以对克隆的虚拟机进行常规化。
  3. 运行以下命令,检索为虚拟机存储根文件系统的 dataVolume

    $ oc get vm <my_vm_name> -o jsonpath="{.spec.template.spec.volumes}{'\n'}"

    输出示例

    [{"dataVolume":{"name":"<my_vm_volume>"},"name":"rootdisk"},{"cloudInitNoCloud":{...}]

  4. 运行 followimg 命令,检索与列出的 dataVolume 匹配的持久性卷声明(PVC):

    $ oc get pvc

    输出示例

    NAME            STATUS   VOLUME  CAPACITY   ACCESS MODES  STORAGECLASS     AGE
    <my_vm_volume> Bound  …

    注意

    如果集群配置没有允许您克隆虚拟机,为了避免从原始虚拟机丢失数据,您可以将 VM PVC 克隆到数据卷中。然后,您可以使用克隆的 PVC 创建金级镜像。

    如果您要通过克隆 PVC 创建金级镜像,请使用克隆的 PVC 继续后续步骤。

  5. 运行以下命令,使用 libguestfs-tools 部署新的交互式容器,并将 PVC 附加到其中:

    $ virtctl guestfs <my-vm-volume> --uid 107

    此命令会打开一个 shell,供您运行下一个命令。

  6. 运行以下命令删除所有特定于您的系统的配置:

    $ virt-sysprep -a disk.img
  7. 在 Red Hat OpenShift Service on AWS 控制台中点 Virtualization Catalog
  8. 单击 Add volume
  9. Add volume 窗口中:

    1. Source type 列表中,选择 Use existing Volume
    2. Volume project 列表中,选择您的项目。
    3. Volume name 列表中,选择正确的 PVC。
    4. Volume name 字段中输入新金级镜像的名称。
    5. Preference 列表中,选择您使用的 RHEL 版本。
    6. Default Instance Type 列表中,为您之前选择的 RHEL 版本选择具有正确 CPU 和内存要求的实例类型。
    7. 点击 Save

新卷会出现在 Select volume to boot from 列表中。这是您的新金级镜像。您可以使用这个卷创建新虚拟机。

用于常规化虚拟机的其他资源

6.2.4.2. 创建 Windows 虚拟机

您可以通过上传 Windows 镜像到持久性卷声明(PVC)来创建 Windows 虚拟机,然后在使用 Red Hat OpenShift Service on AWS web 控制台创建虚拟机时克隆 PVC。

先决条件

流程

  1. 将 Windows 镜像上传为新 PVC:

    1. 在 web 控制台中进入到 Storage PersistentVolumeClaims
    2. Create PersistentVolumeClaim With Data upload form
    3. 浏览 Windows 镜像并选择它。
    4. 输入 PVC 名称,选择存储类和大小,然后点 Upload

      Windows 镜像上传到 PVC。

  2. 通过克隆上传的 PVC 来配置新虚拟机:

    1. 进入到 Virtualization Catalog
    2. 选择 Windows 模板标题并点 Customize VirtualMachine
    3. Disk source 列表中选择 Clone (clone PVC)
    4. 选择 PVC 项目、Windows 镜像 PVC 和磁盘大小。
  3. 将回答文件应用到虚拟机:

    1. Customize VirtualMachine 参数
    2. Scripts 选项卡的 Sysprep 部分,点 Edit
    3. 浏览到 autounattend.xml 回答文件,然后点保存
  4. 设置虚拟机的 run 策略:

    1. 清除 Start this VirtualMachine after creation,以便虚拟机不会立即启动。
    2. Create VirtualMachine
    3. YAML 标签页中,将 running:false 替换为 runStrategy: RerunOnFailure,点 Save
  5. 点选项菜单 kebab 并选择 Start

    虚拟机从包含 autounattend.xml 回答文件的 sysprep 磁盘引导。

6.2.4.2.1. 常规化 Windows 虚拟机镜像

在使用镜像创建新虚拟机前,您可以常规化 Windows 操作系统镜像删除所有特定于系统的配置数据。

在常规调整虚拟机前,您必须确保 sysprep 工具在无人值守的 Windows 安装后无法检测到应答文件。

先决条件

  • 正在运行的 Windows 虚拟机安装有 QEMU 客户机代理。

流程

  1. 在 Red Hat OpenShift Service on AWS 控制台中,点 Virtualization VirtualMachines
  2. 选择 Windows 虚拟机以打开 VirtualMachine 详情页。
  3. Configuration Disks
  4. sysprep 磁盘 kebab 旁边的 Options 菜单并选择 Detach
  5. 单击 Detach
  6. 重命名 C:\Windows\Panther\unattend.xml 以避免 sysprep 工具对其进行检测。
  7. 运行以下命令启动 sysprep 程序:

    %WINDIR%\System32\Sysprep\sysprep.exe /generalize /shutdown /oobe /mode:vm
  8. sysprep 工具完成后,Windows 虚拟机将关闭。VM 的磁盘镜像现在可作为 Windows 虚拟机的安装镜像使用。

现在,您可以对虚拟机进行特殊化。

6.2.4.2.2. 特殊化 Windows 虚拟机镜像

特殊化 Windows 虚拟机 (VM) 配置从常规化 Windows 镜像到虚拟机中的计算机特定信息。

先决条件

  • 您必须有一个通用的 Windows 磁盘镜像。
  • 您必须创建一个 unattend.xml 回答文件。详情请查看 Microsoft 文档

流程

  1. 在 Red Hat OpenShift Service on AWS 控制台中点 Virtualization Catalog
  2. 选择 Windows 模板并点 Customize VirtualMachine
  3. Disk source 列表中选择 PVC(clone PVC)。
  4. 选择通用 Windows 镜像的 PVC 项目和 PVC 名称。
  5. Customize VirtualMachine 参数
  6. Scripts 选项卡。
  7. Sysprep 部分中,点 Edit,浏览到 unattend.xml 回答文件,然后点保存
  8. Create VirtualMachine

在初次启动过程中,Windows 使用 unattend.xml 回答文件来专注于虚拟机。虚拟机现在可供使用。

6.2.4.3. 使用命令行从上传的镜像创建虚拟机

您可使用 virtctl 命令行工具上传操作系统镜像。您可以使用现有数据卷,或为镜像创建新数据卷。

先决条件

  • 您必须有一个 ISOIMGQCOW2 操作系统镜像文件。
  • 为获得最佳性能,请使用 virt-sparsify 工具或 xzgzip 工具压缩镜像文件。
  • 已安装 virtctl
  • 客户端机器必须配置为信任 Red Hat OpenShift Service on AWS 路由器的证书。

流程

  1. 运行 virtctl image-upload 命令上传镜像:

    $ virtctl image-upload dv <datavolume_name> \ 1
      --size=<datavolume_size> \ 2
      --image-path=</path/to/image> \ 3
    1
    数据卷的名称。
    2
    数据卷的大小。例如: --size=500Mi, --size=1G
    3
    镜像的文件路径。
    注意
    • 如果您不想创建新数据卷,请省略 --size 参数,并包含 --no-create 标志。
    • 将磁盘镜像上传到 PVC 时,PVC 大小必须大于未压缩的虚拟磁盘的大小。
    • 若要在使用 HTTPS 时允许不安全的服务器连接,请使用 --insecure 参数。当您使用 --insecure 标志时,不会验证上传端点的真实性。
  2. 可选。要验证数据卷是否已创建,运行以下命令来查看所有数据卷:

    $ oc get dvs

6.2.5. 克隆虚拟机

您可以克隆虚拟机(VM)或从快照创建新虚拟机。

6.2.5.1. 使用 Web 控制台克隆虚拟机

您可以使用 Web 控制台克隆现有虚拟机。

流程

  1. 在 web 控制台中进入到 Virtualization VirtualMachines
  2. 选择一个虚拟机以打开 VirtualMachine 详情页。
  3. Actions
  4. 选择 Clone
  5. Clone VirtualMachine 页面中,输入新虚拟机的名称。
  6. (可选)选择 Start cloned VM 复选框来启动克隆的虚拟机。
  7. 单击 Clone

6.2.5.2. 使用 Web 控制台从现有快照创建虚拟机

您可以通过复制现有快照来创建新虚拟机。

流程

  1. 在 web 控制台中进入到 Virtualization VirtualMachines
  2. 选择一个虚拟机以打开 VirtualMachine 详情页。
  3. Snapshots 标签页。
  4. 对于您要复制的快照,点操作菜单 kebab
  5. 选择 Create VirtualMachine
  6. 输入虚拟机的名称。
  7. (可选)选择 Start this VirtualMachine after creation 来启动新的虚拟机。
  8. Create

6.2.5.3. 其他资源

6.2.6. 通过克隆 PVC 创建虚拟机

您可以通过使用自定义镜像克隆现有持久性卷声明 (PVC) 来创建虚拟机 (VM)。

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

您可以通过创建一个引用源 PVC 的数据卷来克隆 PVC。

6.2.6.1. 关于克隆

在克隆数据卷时,Containerized Data Importer (CDI)选择以下 Container Storage Interface (CSI)克隆方法之一:

  • CSI 卷克隆
  • 智能克隆

CSI 卷克隆和智能克隆方法都非常高效,但使用它们会有一定的要求。如果没有满足要求,CDI 将使用主机辅助克隆。主机辅助克隆是最慢且效率最低的克隆方法,但使用它的要求比其它两种克隆方法要少。

6.2.6.1.1. CSI 卷克隆

Container Storage Interface (CSI) 克隆使用 CSI 驱动程序功能更有效地克隆源数据卷。

CSI 卷克隆有以下要求:

  • 支持持久性卷声明(PVC)的存储类的 CSI 驱动程序必须支持卷克隆。
  • 对于 CDI 无法识别的置备程序,对应的存储配置集必须将 cloneStrategy 设置为 CSI Volume Cloning。
  • 源和目标 PVC 必须具有相同的存储类和卷模式。
  • 如果创建数据卷,则必须有在源命名空间中创建 datavolumes/source 资源的权限。
  • 源卷不能在使用中。
6.2.6.1.2. 智能克隆

当有快照功能的 Container Storage Interface (CSI) 插件时,Containerized Data Importer (CDI) 会从快照创建一个持久性卷声明 (PVC),然后允许有效地克隆额外的 PVC。

智能克隆有以下要求:

  • 与存储类关联的快照类必须存在。
  • 源和目标 PVC 必须具有相同的存储类和卷模式。
  • 如果创建数据卷,则必须有在源命名空间中创建 datavolumes/source 资源的权限。
  • 源卷不能在使用中。
6.2.6.1.3. 主机辅助克隆

当没有满足 Container Storage Interface (CSI) 卷克隆或智能克隆的要求时,主机辅助克隆将用作回退方法。主机辅助克隆比其他两个克隆方法之一更高效。

主机辅助克隆使用源 pod 和目标 pod 将数据从源卷复制到目标卷。目标持久性卷声明 (PVC) 使用回退原因标注,该原因解释了使用主机辅助克隆的原因,并创建事件。

PVC 目标注解示例

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    cdi.kubevirt.io/cloneFallbackReason: The volume modes of source and target are incompatible
    cdi.kubevirt.io/clonePhase: Succeeded
    cdi.kubevirt.io/cloneType: copy

事件示例

NAMESPACE   LAST SEEN   TYPE      REASON                    OBJECT                              MESSAGE
test-ns     0s          Warning   IncompatibleVolumeModes   persistentvolumeclaim/test-target   The volume modes of source and target are incompatible

6.2.6.2. 使用 Web 控制台从 PVC 创建虚拟机

您可以使用 Red Hat OpenShift Service on AWS web 控制台从网页中导入镜像来创建虚拟机(VM)。您可以使用 Red Hat OpenShift Service on AWS web 控制台克隆持久性卷声明(PVC)来创建虚拟机(VM)。

先决条件

  • 您必须有权访问包含镜像的网页。
  • 您必须有权访问包含源 PVC 的命名空间。

流程

  1. 在 web 控制台中进入到 Virtualization Catalog
  2. 点没有可用引导源的模板标题。
  3. Customize VirtualMachine
  4. Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 PVC (clone PVC)
  5. 输入镜像 URL。示例:https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software
  6. 输入容器镜像 URL。示例:https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2
  7. 选择 PVC 项目和 PVC 名称。
  8. 设置磁盘大小。
  9. 点击 Next
  10. Create VirtualMachine

6.2.6.3. 使用命令行从 PVC 创建虚拟机

您可以使用命令行克隆现有虚拟机的持久性卷声明 (PVC) 来创建虚拟机 (VM)。

您可以使用以下选项之一克隆 PVC:

  • 将 PVC 克隆到新数据卷中。

    这个方法会创建一个独立于原始虚拟机的数据卷。删除原始虚拟机不会影响新数据卷或者关联的 PVC。

  • 通过使用 dataVolumeTemplates 小节创建 VirtualMachine 清单来克隆 PVC。

    这个方法会创建一个数据卷,其生命周期取决于原始虚拟机。删除原始虚拟机会删除克隆的数据卷及其关联的 PVC。

6.2.6.3.1. 将 PVC 克隆到数据卷中

您可以使用命令行将现有虚拟机 (VM) 磁盘的持久性卷声明 (PVC) 克隆到数据卷中。

您可以创建一个引用原始源 PVC 的数据卷。新数据卷的生命周期独立于原始虚拟机。删除原始虚拟机不会影响新数据卷或者关联的 PVC。

主机辅助克隆支持在不同卷模式间进行克隆,如从块持久性卷 (PV) 克隆到文件系统 PV,只要源和目标 PV 属于 kubevirt 内容类型。

先决条件

  • 带有源 PVC 的虚拟机必须被关闭。
  • 如果将 PVC 克隆到不同的命名空间中,则必须具有在目标命名空间中创建资源的权限。
  • smart-cloning 的额外先决条件:

    • 您的存储供应商必须支持快照。
    • 源和目标 PVC 必须具有相同的存储供应商和卷模式。
    • VolumeSnapshotClass 对象的 driver 键的值必须与 StorageClass 对象的 provisioner 键的值匹配,如下例所示:

      VolumeSnapshotClass 对象示例

      kind: VolumeSnapshotClass
      apiVersion: snapshot.storage.k8s.io/v1
      driver: openshift-storage.rbd.csi.ceph.com
      # ...

      StorageClass 对象示例

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      # ...
      provisioner: openshift-storage.rbd.csi.ceph.com

流程

  1. 如以下示例所示创建 DataVolume 清单:

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: <datavolume> 1
    spec:
      source:
        pvc:
          namespace: "<source_namespace>" 2
          name: "<my_vm_disk>" 3
      storage: {}
    1
    指定新数据卷的名称。
    2
    指定源 PVC 的命名空间。
    3
    指定源 PVC 的名称。
  2. 运行以下命令来创建数据卷:

    $ oc create -f <datavolume>.yaml
    注意

    数据卷可防止虚拟机在 PVC 准备好前启动。您可以创建一个在克隆 PVC 时引用新数据卷的虚拟机。

6.2.6.3.2. 使用数据卷模板从克隆的 PVC 创建虚拟机

您可以创建一个虚拟机 (VM) 来使用数据卷模板克隆现有虚拟机的持久性卷声明 (PVC)。

这个方法会创建一个数据卷,其生命周期取决于原始虚拟机。删除原始虚拟机会删除克隆的数据卷及其关联的 PVC。

先决条件

  • 带有源 PVC 的虚拟机必须被关闭。

流程

  1. 如以下示例所示,创建一个 VirtualMachine 清单:

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: vm-dv-clone
      name: vm-dv-clone 1
    spec:
      running: false
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm-dv-clone
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: root-disk
            resources:
              requests:
                memory: 64M
          volumes:
          - dataVolume:
              name: favorite-clone
            name: root-disk
      dataVolumeTemplates:
      - metadata:
          name: favorite-clone
        spec:
          storage:
            accessModes:
            - ReadWriteOnce
            resources:
              requests:
                storage: 2Gi
          source:
            pvc:
              namespace: <source_namespace> 2
              name: "<source_pvc>" 3
    1
    指定虚拟机的名称。
    2
    指定源 PVC 的命名空间。
    3
    指定源 PVC 的名称。
  2. 使用 PVC 克隆的数据卷创建虚拟机:

    $ oc create -f <vm-clone-datavolumetemplate>.yaml

6.2.7. 安装 QEMU 客户机代理和 VirtIO 驱动程序

QEMU 客户机代理是在虚拟机 (VM) 上运行的守护进程,并将信息传递给有关虚拟机、用户、文件系统和从属网络的信息。

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理。

6.2.7.1. 安装 QEMU 客户机代理

6.2.7.1.1. 在 Linux 虚拟机上安装 QEMU 客户机代理

qemu-guest-agent 广泛可用,默认在 Red Hat Enterprise Linux (RHEL) 虚拟机 (VM) 中可用。安装代理并启动服务。

注意

要为具有最高完整性的在线(Running 状态)虚拟机创建快照,请安装 QEMU 客户机代理。

QEMU 客户机代理通过尝试静止虚拟机的文件系统来尽可能取一个一致的快照,具体取决于系统工作负载。这样可确保在进行快照前将 in-flight I/O 写入磁盘。如果没有客户机代理,则无法静止并生成最佳快照。执行快照的条件反映在 web 控制台或 CLI 中显示的快照声明中。

流程

  1. 使用控制台或 SSH 登录虚拟机。
  2. 运行以下命令来安装 QEMU 客户机代理:

    $ yum install -y qemu-guest-agent
  3. 确保服务持久并启动它:

    $ systemctl enable --now qemu-guest-agent

验证

  • 运行以下命令,以验证 AgentConnected 是否列在 VM spec 中:

    $ oc get vm <vm_name>
6.2.7.1.2. 在 Windows 虚拟机上安装 QEMU 客户机代理

对于 Windows 虚拟机,QEMU 客户机代理包含在 VirtIO 驱动程序中。您可以在 Windows 安装过程中或现有 Windows 虚拟机上安装驱动程序。

注意

要为具有最高完整性的在线(Running 状态)虚拟机创建快照,请安装 QEMU 客户机代理。

QEMU 客户机代理通过尝试静止虚拟机的文件系统来尽可能取一个一致的快照,具体取决于系统工作负载。这样可确保在进行快照前将 in-flight I/O 写入磁盘。如果没有客户机代理,则无法静止并生成最佳快照。执行快照的条件反映在 web 控制台或 CLI 中显示的快照声明中。

流程

  1. 在 Windows 客户机操作系统中,使用 File Explorer 进入到 virtio-win CD 驱动器中的 guest-agent 目录。
  2. 运行 qemu-ga-x86_64.msi 安装程序。

验证

  1. 运行以下命令来获取网络服务列表:

    $ net start
  2. 验证输出是否包含 QEMU 客户机代理

6.2.7.2. 在 Windows 虚拟机上安装 VirtIO 驱动程序

VirtIO 驱动程序是 Microsoft Windows 虚拟机在 OpenShift Virtualization 中运行时所需的半虚拟化设备驱动程序。驱动程序由其余镜像提供,不需要单独下载。

必须将 container-native-virtualization/virtio-win 容器磁盘作为 SATA CD 驱动器附加到虚拟机,以启用驱动程序安装。您可以在安装过程中安装 VirtIO 驱动程序,或添加到现有 Windows 安装中。

安装驱动程序后,可从虚拟机中移除 container-native-virtualization/virtio-win 容器磁盘。

表 6.3. 支持的驱动程序
驱动程序名称硬件 ID描述

viostor

VEN_1AF4&DEV_1001
VEN_1AF4&DEV_1042

块驱动程序。有时在 Other devices 组中被标记为 SCSI Controller

viorng

VEN_1AF4&DEV_1005
VEN_1AF4&DEV_1044

熵源(entropy)驱动程序。有时在 Other devices 组中被标记为 PCI 设备。

NetKVM

VEN_1AF4&DEV_1000
VEN_1AF4&DEV_1041

网络驱动程序。有时,在 Other devices 组中被标记为 Ethernet Controller。仅在配置了 VirtIO NIC 时可用。

6.2.7.2.1. 在安装过程中将 VirtIO 容器磁盘附加到 Windows 虚拟机

您必须将 VirtIO 容器磁盘附加到 Windows 虚拟机,以安装必要的 Windows 驱动程序。这可以在创建虚拟机时完成。

流程

  1. 从模板创建 Windows 虚拟机时,点 Customize VirtualMachine
  2. 选择 Mount Windows 驱动程序磁盘
  3. Customize VirtualMachine 参数
  4. Create VirtualMachine

创建虚拟机后,virtio-win SATA CD 磁盘将附加到虚拟机。

6.2.7.2.2. 将 VirtIO 容器磁盘附加到现有的 Windows 虚拟机

您必须将 VirtIO 容器磁盘附加到 Windows 虚拟机,以安装必要的 Windows 驱动程序。这可以对现有的虚拟机完成。

流程

  1. 导航到现有的 Windows 虚拟机,然后点 Actions Stop
  2. 进入 VM Details Configuration Disks,然后点 Add disk
  3. 从容器源添加 windows-driver-disk,将 Type 设置为 CD-ROM,然后将 Interface 设置为 SATA
  4. 点击 Save
  5. 启动虚拟机并连接到图形控制台。
6.2.7.2.3. 在 Windows 安装过程中安装 VirtIO 驱动程序

您可以在虚拟机 (VM) 上安装 Windows 时安装 VirtIO 驱动程序。

注意

该流程使用通用方法安装 Windows,且安装方法可能因 Windows 版本而异。有关您要安装的 Windows 版本,请参阅相关文档。

先决条件

  • 包含 virtio 驱动程序的存储设备必须附加到虚拟机。

流程

  1. 在 Windows 操作系统中,使用 File Explorer 进入到 virtio-win CD 驱动器。
  2. 双击该驱动器为您的虚拟机运行适当的安装程序。

    对于 64 位 vCPU,请选择 virtio-win-gt-x64 安装程序。不再支持 32 位 vCPU。

  3. 可选:在安装程序的 Custom Setup 步骤中,选择您要安装的设备驱动程序。推荐的驱动程序集会被默认选择。
  4. 安装完成后,选择 Finish
  5. 重启虚拟机。

验证

  1. 在 PC 上打开系统磁盘。这通常是 C:
  2. 进入到 Program Files Virtio-Win

如果 Virtio-Win 目录存在并包含每个驱动程序的子目录,则安装可以成功。

6.2.7.2.4. 在现有 Windows 虚拟机上从 SATA CD 驱动器安装 VirtIO 驱动程序

您可以从现有 Windows 虚拟机(VM)上的 SATA CD 驱动器安装 VirtIO 驱动程序。

注意

该流程使用通用方法为 Windows 添加驱动。有关具体安装步骤,请参阅您的 Windows 版本安装文档。

先决条件

  • 包含 virtio 驱动程序的存储设备必须作为 SATA CD 驱动器附加到虚拟机。

流程

  1. 启动虚拟机并连接到图形控制台。
  2. 登录 Windows 用户会话。
  3. 打开 Device Manager 并展开 Other devices 以列出所有 Unknown device

    1. 打开 Device Properties 以识别未知设备。
    2. 右击设备并选择 Properties
    3. 单击 Details 选项卡,并在 Property 列表中选择 Hardware Ids
    4. Hardware IdsValue 与受支持的 VirtIO 驱动程序相比较。
  4. 右击设备并选择 Update Driver Software
  5. 点击 Browse my computer for driver software 并浏览所附加的 VirtIO 驱动程序所在 SATA CD 驱动器。驱动程序将按照其驱动程序类型、操作系统和 CPU 架构分层排列。
  6. 点击 Next 以安装驱动程序。
  7. 对所有必要 VirtIO 驱动程序重复这一过程。
  8. 安装完驱动程序后,点击 Close 关闭窗口。
  9. 重启虚拟机以完成驱动程序安装。
6.2.7.2.5. 从添加为 SATA CD 驱动器的容器磁盘安装 VirtIO 驱动程序

您可以从作为 SATA CD 驱动器添加到 Windows 虚拟机(VM)的容器磁盘中安装 VirtIO 驱动程序。

提示

从红帽生态系统目录 下载 container-native-virtualization/virtio-win 容器磁盘不是必须的,因为如果集群中不存在容器磁盘,则会从红帽 registry 下载容器磁盘。但是,下载可减少安装时间。

先决条件

  • 您必须在受限环境中访问红帽 registry 或下载的 container-native-virtualization/virtio-win 容器磁盘。

流程

  1. 通过编辑 VirtualMachine 清单将 container-native-virtualization/virtio-win 容器磁盘添加为 CD 驱动器:

    # ...
    spec:
      domain:
        devices:
          disks:
            - name: virtiocontainerdisk
              bootOrder: 2 1
              cdrom:
                bus: sata
    volumes:
      - containerDisk:
          image: container-native-virtualization/virtio-win
        name: virtiocontainerdisk
    1
    OpenShift Virtualization 按照 VirtualMachine 清单中定义的顺序引导虚拟机磁盘。您可以定义在 container-native-virtualization/virtio-win 容器磁盘前引导的其他虚拟机磁盘,或使用可选的 bootOrder 参数来确保虚拟机从正确的磁盘启动。如果为磁盘配置引导顺序,您必须为其他磁盘配置引导顺序。
  2. 应用更改:

    • 如果虚拟机没有运行,请运行以下命令:

      $ virtctl start <vm> -n <namespace>
    • 如果虚拟机正在运行,重启虚拟机或运行以下命令:

      $ oc apply -f <vm.yaml>
  3. 虚拟机启动后,从 SATA CD 驱动器安装 VirtIO 驱动程序。

6.2.7.3. 更新 VirtIO 驱动程序

6.2.7.3.1. 更新 Windows 虚拟机上的 VirtIO 驱动程序

使用 Windows Update 服务更新 Windows 虚拟机(VM)上的 virtio 驱动程序。

先决条件

  • 集群必须连接到互联网。断开连接的集群无法访问 Windows Update 服务。

流程

  1. 在 Windows Guest 操作系统中,点 Windows 密钥并选择 Settings
  2. 进入到 Windows Update Advanced Options Optional Updates
  3. 安装 Red Hat, Inc. 的所有更新。
  4. 重启虚拟机。

验证

  1. 在 Windows 虚拟机上,进入到 设备管理器
  2. 选择一个设备。
  3. 选择 Driver 选项卡。
  4. Driver Details,并确认 virtio 驱动程序详情显示了正确的版本。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.