1 我想要做什么?

1 我想要做什么?

[如果有更适合的地方提出这个问题,请告诉我!]

1 我想要做什么?

我想libvirt KVM使用嵌套虚拟化如[1]和[2]中所述。但它不起作用。它曾经起作用(约 4 个月前),但现在不再起作用了。

我想要像这样的2个级别的虚拟化:

  • L0 – 裸机主机,运行 KVMUbuntu 16.04
  • L1 –Ubuntu 16.04在 L0 上运行的 VM;也称为“来宾虚拟机管理程序”——因为它本身能够运行 KVM
  • L2 –Ubuntu 16.04在 L1 上运行的虚拟机,也称为“嵌套客户机”

[1]https://docs.fedoraproject.org/en-US/quick-docs/using-nested-virtualization-in-kvm/

[2]https://www.linux-kvm.org/page/Nested_Guests

我的目标是在虚拟机之上而不是在裸机主机上部署OpenStack环境,以方便进行实验室实验。因此,OpenStack 节点是 L1 虚拟机。计算节点是 L1 虚拟机,使用计算节点创建OpenStack并在计算节点上运行的虚拟机是 L2 虚拟机。

2 我的问题是什么?

我可以不是运行我的第二级虚拟化:

  • L0 很好:正在运行Ubuntu 16.04.5 LTS,已安装.iso图像
  • L1:我在 L0 上安装libvirt+ KVM。我可以Ubuntu16.04在 L0 上运行类似云映像的虚拟机。
  • L2:我也在 L1 上安装了libvirt+ 。但我KVM不能在 L1 上运行虚拟机:我得到kernel panicgeneral protection fault

但如果我对 Ubuntu18.04 做同样的事情而不是Ubuntu16.04,它运行正常。我没有更改配置或virt-install scripts(除了使用 18.04 .iso 和云映像)。

3 详细信息

有关 L0 Ubuntu 16.04 裸机主机的详细信息

L0 正在运行Ubuntu 16.04.5 LTS并安装 .iso。

核心 user@L0:~$ uname -a Linux L0 4.4.0-137-generic #163-Ubuntu SMP Mon Sep 24 13:14:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

libvirt 版本在L0上运行 user@L0:~$ virsh version Compiled against library: libvirt 4.0.0 Using library: libvirt 4.0.0 Using API: QEMU 4.0.0 Running hypervisor: QEMU 2.11.1

KVM加速 user@L0:~$ kvm-ok INFO: /dev/kvm exists KVM acceleration can be used

嵌套参数 user@L0:~$ cat /sys/module/kvm_intel/parameters/nested Y

CPU 数量 user@L0:~$ egrep -c '(vmx|svm)' /proc/cpuinfo 48

有关 L1 Ubuntu 16.04 VM 的详细信息

L1 中的 VM(在 L0 上运行)Ubuntu 16.04.5 LTS由云映像安装运行。

核心 user@L0:~$ uname -a Linux L1 4.4.0-137-generic #163-Ubuntu SMP Mon Sep 24 13:14:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

libvirt 版本在 L1 VM 上运行 user@L1-VM:~$ sudo virsh version Compiled against library: libvirt 4.0.0 Using library: libvirt 4.0.0 Using API: QEMU 4.0.0 Running hypervisor: QEMU 2.11.1

KVM加速 user@L1-VM:~$ kvm-ok INFO: /dev/kvm exists KVM acceleration can be used

嵌套参数 user@L1-VM:~$ cat /sys/module/kvm_intel/parameters/nested Y

CPU 数量,这是 L0 分配给 L1 VM 的 vCPU,我分配给了 20 个 vCPU。 user@L1-VM:~$ egrep -c '(vmx|svm)' /proc/cpuinfo 20

有关 L2 VM 的详细信息

我想Ubuntu 16.04.5 LTS在我的 L1 VM 中创建一个由云映像 VM 安装的 L2 VM KVM。但无论我做什么,我的 L2 VM 都会在完成实例化之前崩溃。我得到kernel panicgeneral protection fault

然而Cirros OS 映像可以在 L1 VM 上运行!

4 个想法

我认为这是Ubuntu16.04或中的一个错误libvirt。我libvir KVM使用 OpenStack 团队的自定义存储库 [3] 在 L0 和 L1 中安装,因为此存储库中的 libvirt 版本比 16.04 官方存储库中的版本新,并且与 Ubuntu18 中的版本匹配libvirt

[3]https://wiki.ubuntu.com/OpenStack/CloudArchive

Ubuntu 18.04如果我对.iso 和云图像执行相同操作,它就可以工作。

它的工作原理是:

  • L0 = Ubuntu18.04 (.iso)
  • L1 = Ubuntu18.04(云镜像)
  • L2 = Ubuntu18.04(云镜像)

如果满足以下条件,它也有效:

  • L0 = Ubuntu18.04 (.iso)
  • L1 = Ubuntu18.04(云镜像)
  • L2 = Ubuntu16.04(云图像)

感谢您花时间阅读!

尼科

相关内容