[如果有更适合的地方提出这个问题,请告诉我!]
1 我想要做什么?
我想libvirt
KVM
使用嵌套虚拟化如[1]和[2]中所述。但它不起作用。它曾经起作用(约 4 个月前),但现在不再起作用了。
我想要像这样的2个级别的虚拟化:
- L0 – 裸机主机,运行 KVM
Ubuntu 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 panic
或general 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 panic
或general 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(云图像)
感谢您花时间阅读!
尼科