Red Hat Training

A Red Hat training course is available for RHEL 8

第 18 章 创建嵌套虚拟机

在 RHEL 8 及之后的版本中,可以创建嵌套虚拟机(VM)。这意味着,在 RHEL 8 物理主机上(0 L0)运行的 RHEL 8 虚拟机(也称为级别 1L1)可以充当虚拟机监控程序并创建自己的虚拟机(2L2)。

换句话说,L0 主机可以运行 L1 虚拟机(VM),每个 L1 虚拟机都可以托管自己的 L2 虚拟机。请注意,在这种情况下,L0 和 L1 主机都必须是 RHEL 8 系统,而 L2 虚拟机可以是任何支持的 RHEL 或 Windows 系统。

警告

红帽当前仅作为 技术预览 提供嵌套虚拟化,因此不受支持。

另外,红帽不推荐在生产环境中使用嵌套虚拟化,因为 功能有各种限制。嵌套虚拟化主要用于开发和测试场景,例如:

  • 在受限环境中调试虚拟机监控程序
  • 在有限的物理资源中测试较大的虚拟部署

也可以在多个构架中创建嵌套虚拟机,如 IntelAMDIBM POWER9IBM Z。请注意,无论使用了什么架构,嵌套都是 技术预览,因此红帽不支持。

18.1. 在 Intel 上创建嵌套虚拟机

按照以下步骤在 Intel 主机中启用和配置嵌套虚拟化。

警告

当前,嵌套虚拟化仅作为 Intel 架构的一个 技术预览 提供,因此不受支持。

先决条件

  • 运行 L1 虚拟机(VM)的 L0 RHEL8 主机。
  • 管理程序 CPU 必须支持嵌套虚拟化。要验证,使用 L0 hypervisor 上的 cat /proc/cpuinfo 命令。如果命令的输出包含 vmxept 标记,则可以创建 L2 虚拟机。通常在 Intel Xeon v3 内核及之后的版本中的情况。
  • 确定在 L0 主机上启用了嵌套虚拟化:

    # cat /sys/module/kvm_intel/parameters/nested
    • 如果命令返回 1,则代表启用该功能,您可以执行以下步骤。
    • 如果该命令返回 0 或者 N,而您的系统支持嵌套虚拟化,则使用以下步骤启用该功能。

      1. 卸载 kvm_intel 模块:

        # modprobe -r kvm_intel
      2. 激活嵌套功能:

        # modprobe kvm_intel nested=1
      3. 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,在 /etc/modprobe.d/kvm.conf 文件中添加以下行:

        options kvm_intel nested=1

流程

  1. 为嵌套虚拟化配置 L1 虚拟机。

    1. 打开虚拟机的 XML 配置。以下示例打开 Intel-L1 虚拟机的配置:

      # virsh edit Intel-L1
    2. 在配置中添加以下行:

      <cpu mode='host-passthrough'/>

      如果虚拟机的 XML 配置文件已经包含 <cpu> 元素,重写它。

  2. 在 L1 虚拟机中创建 L2 虚拟机。要做到这一点,请遵循创建 L1 虚拟机的相同步骤。

18.2. 在 AMD 上创建嵌套虚拟机

按照以下步骤在 AMD 主机中启用和配置嵌套虚拟化。

警告

当前,嵌套虚拟化仅作为 AMD64 架构的一个 技术预览 提供,因此不受支持。

先决条件

  • 运行 L1 虚拟机(VM)的 L0 RHEL8 主机。
  • 管理程序 CPU 必须支持嵌套虚拟化。要验证,使用 L0 hypervisor 上的 cat /proc/cpuinfo 命令。如果该命令的输出包含 svmnpt 标记,则可以创建 L2 虚拟机。这通常是在 AMD EPYC 内核中和之后的版本。
  • 确定在 L0 主机上启用了嵌套虚拟化:

    # cat /sys/module/kvm_amd/parameters/nested
    • 如果命令返回 Y1,则代表启用了该功能,您可以执行以下步骤。
    • 如果命令返回 0N,请使用以下步骤启用该功能。

      1. 在 L0 主机上停止所有运行的虚拟机。
      2. 卸载 kvm_amd 模块:

        # modprobe -r kvm_amd
      3. 激活嵌套功能:

        # modprobe kvm_amd nested=1
      4. 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,在 /etc/modprobe.d/kvm.conf 文件中添加以下内容:

        options kvm_amd nested=1

流程

  1. 为嵌套虚拟化配置 L1 虚拟机。

    1. 打开虚拟机的 XML 配置。以下示例将打开 AMD-L1 虚拟机的配置:

      # virsh edit AMD-L1
    2. 将虚拟机的 CPU 配置为使用 host-passthrough 模式。

      <cpu mode='host-passthrough'/>

      如果您要求虚拟机使用特定 CPU 而不是 host-passthrough,在 CPU 配置中添加 <feature policy='require' name='vmx'/> 行。例如:

      <cpu mode ='custom' match ='exact' check='partial'>
      <model fallback='allow'>Haswell-noTSX</model>
      <feature policy='require' name='vmx'/>
  2. 在 L1 虚拟机中创建 L2 虚拟机。要做到这一点,请遵循创建 L1 虚拟机的相同步骤。

18.3. 在 IBM Z 上创建嵌套虚拟机

按照以下步骤在 IBM Z 主机中启用和配置嵌套虚拟化。

警告

当前,嵌套虚拟化仅作为 IBM Z 架构中的一个 技术预览 提供,因此不受支持。

先决条件

  • 运行 L1 虚拟机(VM)的 L0 RHEL8 主机。
  • 管理程序 CPU 必须支持嵌套虚拟化。要验证情况,请使用 L0 hypervisor 中的 cat /proc/cpuinfo 命令。如果该命令的输出中包含 sie 标记,则可以创建 L2 虚拟机。
  • 确定在 L0 主机上启用了嵌套虚拟化:

    # cat /sys/module/kvm/parameters/nested
    • 如果命令返回 Y1,则代表启用了该功能,您可以执行以下步骤。
    • 如果命令返回 0N,请使用以下步骤启用该功能。

      1. 在 L0 主机上停止所有运行的虚拟机。
      2. 卸载 kvm 模块:

        # modprobe -r kvm
      3. 激活嵌套功能:

        # modprobe kvm nested=1
      4. 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,在 /etc/modprobe.d/kvm.conf 文件中添加以下行:

        options kvm nested=1

流程

  • 在 L1 虚拟机中创建 L2 虚拟机。要做到这一点,请遵循创建 L1 虚拟机的相同步骤。

18.4. 在 IBM POWER9 上创建嵌套虚拟机

按照以下步骤在 IBM POWER9 主机中启用和配置嵌套虚拟化。

警告

当前,嵌套虚拟化仅作为 IBM POWER9 架构中的一个 技术预览 提供,因此不受支持。另外,在以前的 IBM POWER 系统版本中无法创建嵌套虚拟机(VM),如 IBM POWER8。

先决条件

  • L0 RHEL8 主机正在运行 L1 虚拟机。L1 虚拟机使用 RHEL 8 作为客户机操作系统。
  • 在 L0 主机上启用嵌套虚拟化:

    # cat /sys/module/kvm_hv/parameters/nested
    • 如果命令返回 Y1,则代表启用了该功能,您可以执行以下步骤。
    • 如果命令返回 0N,请使用以下步骤启用该功能:

      1. 在 L0 主机上停止所有运行的虚拟机。
      2. 卸载 kvm 模块:

        # modprobe -r kvm_hv
      3. 激活嵌套功能:

        # modprobe kvm_hv nested=1
      4. 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,在 /etc/modprobe.d/kvm.conf 文件中添加以下行:

        options kvm_hv nested=1

流程

  1. 为确保 L1 虚拟机可以创建 L2 虚拟机,将 cap-nested-hv 参数添加到 L1 虚拟机的机器类型中。要做到这一点,使用 virsh edit 命令修改 L1 虚拟机的 XML 配置,并在 <features> 部分的以下行:

    <nested-hv state='on'/>
  2. 在 L1 虚拟机中创建 L2 虚拟机。要做到这一点,请遵循创建 L1 虚拟机的相同步骤。

    为了显著提高 L2 虚拟机的性能,红帽建议在 L2 虚拟机的 XML 配置中添加'cap-nested-hv' 参数。具体步骤请查看上一步。

附加信息

  • 请注意,使用 IBM POWER8 作为 L2 虚拟机的架构目前无法正常工作。

18.5. 嵌套虚拟化的限制

在使用嵌套虚拟化时请记住以下限制。

警告

红帽目前不支持嵌套虚拟化,仅提供嵌套作为 技术预览功能

支持的构架

  • L0 主机必须是 Intel、AMD、IBM POWER9 或 IBM Z 系统。嵌套虚拟化目前无法在其它构架中使用。

支持的客户端操作系统

  • 要创建嵌套虚拟机,您必须使用以下客户端操作系统(OS):

    • L0 主机 上 - RHEL 8.2 及更新的版本
    • L1 虚拟机 上 - RHEL 7.8 及更新的版本,或 RHEL 8.2 及更新的版本

      注意

      这个支持不适用于在 L1 虚拟机中使用基于 RHEL 7 和 RHEL 8 的虚拟化服务。它们是:

      • Red Hat Virtualization
      • Red Hat OpenStack Platform
      • OpenShift Virtualization
    • L2 虚拟机 上 - 您必须使用以下操作系统之一:

      • RHEL 7.8 及更新的版本
      • RHEL 8.2 及更新的版本
      • Microsoft Windows Server 2016
      • Microsoft Windows Server 2019
  • 另外,在 IBM POWER9 上,嵌套虚拟化目前仅在以下情况下工作:

    • L0 主机和 L1 虚拟机都使用 RHEL 8
    • L2 虚拟机使用带有 rhel-alt 内核的 RHEL 8 或 RHEL 7。
    • L1 VM 和 L2 虚拟机没有在 POWER8 兼容模式下运行。

虚拟机监控程序限制

  • 目前,红帽只支持在 RHEL-KVM 中嵌套。当 RHEL 用作 L0 hypervisor 时,您可以使用 RHEL 8 或 Windows 用于 WSL 2 作为 L1 hypervisor。
  • 当在非 KVM L0 hypervisor(如 VMware ESXi 或 Amazon Web Services(AWS)中使用 L1 RHEL 8 虚拟机时,在 RHEL 8 客户机操作系统中创建 L2 虚拟机可能会正常工作,但不被支持。

功能限制

  • 使用 L2 虚拟机作为虚拟机监控器并创建 L3 虚拟机还没有经过正确测试,因此无法正常工作。
  • 如果在 L0 主机上启用了嵌套虚拟化,则迁移虚拟机目前无法在 AMD 系统上工作。
  • 在 IBM Z 系统中,巨页后端存储和嵌套虚拟化不能同时使用。

    # modprobe kvm hpage=1 nested=1
    modprobe: ERROR: could not insert 'kvm': Invalid argument
    # dmesg |tail -1
    [90226.508366] kvm-s390: A KVM host that supports nesting cannot back its KVM guests with huge pages
  • L0 主机中的一些特性可能不适用于 L1 管理程序。

    例如,在 IBM POWER 9 硬件上,外部中断虚拟化引擎(XIVE)无法正常工作。但是,L1 虚拟机可以使用模拟的 CloudFormVE 中断控制器来启动 L2 虚拟机。


为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。