KVM嵌套虚拟化起步¶
为了能够在一台物理主机(MacBook Pro)上能够模拟出OpenStack集群,即同时运行多个hypervisor,需要使用嵌套虚拟化(Nested Virtualization)。
备注
在支持 Intel VMCS 硬件加速的CPU上使用嵌套虚拟化可以得到较大性能的提升,在Hawwell核心之前的Intel处理器则使用软件方式实现嵌套虚拟化。
在 Enabling Virtual Machine Control Structure Shadowing On A Nested Virtual Machine With The Intel® Xeon® E5-2600 V3 Product Family 介绍了Haswell志强处理器平台激活VMCS Shadow特性来运行嵌套虚拟化的案例。
我所使用的 MacBook Pro上运行Ubuntu 使用的是等同于Haswell的 Intel Core i7-4850HQ处理器 处理器,所以也可以实现硬件加速的嵌套虚拟化。
检查系统内核是否激活嵌套虚拟化:
cat /sys/module/kvm_intel/parameters/nested
输入如果是 Y
就表示已经激活嵌套虚拟化,如果是 N
则执行下一步激活
(根据需要执行这一步)激活嵌套虚拟化步骤是通过重新加载KVM intel内核模块实现:
sudo rmmod kvm-intel sudo sh -c "echo 'options kvm-intel nested=y' >> /etc/modprobe.d/kvm_intel.conf" sudo modprobe kvm-intel
备注
在Ubuntu 18.10上,已经不需要执行这步–因为默认已经有配置文件 /etc/modprobe.d/qemu-system-x86.conf
配置文件激活了 kvm_intel
模块的嵌套虚拟化(内容如下):
options kvm_intel nested=1
并且通过检查 cat /sys/module/kvm_intel/parameters/nested
可以看到内核模块 kvm-intel
已经激活了嵌套虚拟化。
检查是否激活了 Intel VMCS Shadowing:
cat /sys/module/kvm_intel/parameters/enable_shadow_vmcs
备注
Intel VMCS 特性需要CPU硬件特性支持,必须是Haswell核心之后支持AVX2版本的处理器。如果CPU支持VMCS,则可以在 /etc/modprobe.d/kvm-intel.conf
配置文件中添加以下参数:
options kvm-intel nested=1
options kvm-intel enable_shadow_vmcs=1
然后重新启动物理主机或者重新加载 kvm-intel
模块。
将虚拟化扩展输出给虚拟机,例如 DevStack
virsh edit devstack
将内容:
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>Haswell-noTSX-IBRS</model>
</cpu>
修改成:
<cpu mode='host-passthrough'>
</cpu>
然后重启虚拟机,在虚拟机内部执行 lscpu
可以看到如下输出证明已经支持KVM虚拟化:
Virtualization: VT-x
Hypervisor vendor: KVM
Virtualization type: full
另外在虚拟机内部可以看到增加了设备文件 /dev/kvm
备注
详细请参考 Configure DevStack with KVM-based Nested Virtualization
这里我创建的第一个虚拟机 devstack
将作为Openstack的开发环境。
模拟物理服务器集群¶
为了在笔记本环境中通过嵌套虚拟化模拟出多个物理服务器,在实验环境中, 复制KVM虚拟机 创建的3台模拟物理服务器的主机 machine-1
, machine-2
和 machine-3
也请按照上述方法设置好嵌套虚拟化,后续测试将采用这3台主机部署OpenStack集群。
下一步¶
为了能够稳定运行 OpenStack Atlas 的开发测试环境 DevStack ,我们需要为 devstack
增加一块大容量的磁盘: