kvm虚拟化的嵌套

       嵌套虚拟化是指在虚拟化的客户机中运行一个Hypervisor,从而再虚拟化运行一个客户机。 嵌套虚拟化不仅包括相同Hypervisor的嵌套(如KVM嵌套KVM、Xen嵌套Xen等),也包括不同Hypervisor的相互嵌套(如KVM嵌套嵌套Xen等)根据嵌套虚拟化的概念可知,其不仅包括两层嵌套(如KVM嵌套KVM),还包括多层的嵌套(如KVM嵌套KVM再嵌套KVM) 。

嵌套虚拟化的五大应用场景。

1)IaaS类型的云计算提供商 :如果有了嵌套虚拟化功能的支持,就可以为其客户提供让客户可以自己运行所需Hypervisor和客户机的能力。

2)为测试和调试Hypervisor带来了非常大的便利:了嵌套虚拟化的支持,被调试Hypervisor运行在更底层的Hypervisor之上,遇到被调试Hypervisor的系统崩溃,也只需要在底层的Hypervisor上重启被调试系统即可。

3)在一些为了起到安全作用的带有Hypervisor的固件上:如果有嵌套虚拟化的支持,则在它上面不仅可以运行一些普通的负载,还可以运行一些Hypervisor启动另外的客户机。

4)嵌套虚拟化的支持,对虚拟机系统的动态迁移也提供了新的功能:从而可将一个Hypervisor及其上面运行的客户机作为单一的节点进行动态迁移,这对服务器的负载均衡及灾难恢复等有积极意义。

5)嵌套虚拟化的支持,对于系统隔离性、安全性方面也提供更多的实施方案。

       KVM嵌套KVM,既是在KVM上面运行的第一级客户机中再加载kvm和kvm_intel(或kvm_amd)模块,然后在第一级的客户机中用qemu-kvm启动带有kvm加速的第二级客户机。“KVM嵌套KVM”的基本架构示意图如下:

         “KVM嵌套KVM”的基本架构示意图中低层是具有Intel VT或AMD-V特性的硬件系统,硬件层之上就是底层的宿主机系统(Level 0,即L0);        在L0 宿主机中可以运行加载有KVM模块的客户及(Level 1 第一级,即L1);       在L1客户机中通过QEMU/KVM启动一个普通的客户机(Level 2 第二级,即L2);       如果KVM还可以做多级的嵌套虚拟化,各个级别的操作系统被依次称为:L0、L1、L2、L3、L4........,其中L0向L1提供硬件虚拟化环境(Intel VT 或 AMD-V),L1向L2提供硬件虚拟化环境,依次类推。
         KVM对“KVM嵌套KVM”的支持从2010年就开始了,目前已经比较成熟了。“KVM嵌套KVM”功能的配置和使用,有如下几个步骤:

1)在进行虚拟机的嵌套时需要在底层的宿主机中打开kvm嵌套kvm的功能方法为在进行虚拟机的kvm模块加载的时候进行一些设定和使用qemu-system-x86_64的时候进行一些参数的设定具体如下()这是kvmL0

root@ubuntu:~# rmmod kvm_intel                            ----此时kvm_intel模块已经加载需要将其删除才能进行参数设定

root@ubuntu:~# lsmod | grep kvm

kvm                   451511  0 

root@ubuntu:~# modprobe kvm_intel nested=1

root@ubuntu:~# cat /sys/module/kvm_intel/parameters/nested 

Y

Y则表示kvm嵌套kvm的功能已经打开了

root@ubuntu:~# lsmod | grep kvm

kvm_intel             143060  6 

kvm                   451511  1 kvm_intel

2) 使用qemu打开一个虚拟机在启动命令上加上“-cpu host”“-cpu qemu64,+vmx”

如下面所示:

root@ubuntu:~/qemu# qemu-system-x86_64 -enable-kvm -m 1024 -smp 4 -hda ubuntu.raw -cpu host -net nic -net tap,ifname=tap1 -monitor stdio

在开启的虚拟机中查看kvm 模块的加载情况,如下图所示:


因为我的CPU为奔腾处理器所以在执行cat /proc/cpuinfo | grep ‘vmx|svm’的时候,依旧什么都没有。

此时L1已经具备作为一个宿主机的功能,现在安装qemu开始进行虚拟机的创建。此时的L 1相当与一个宿主机了。此处我使用的是mount挂载nfs在挂载的地方放上需要使用的镜像文件直接使用以前的镜像文件而没有从新制作。如下图所示:


我通过我的Windows端进行vnc连接如下图:

此时虚拟化的嵌套就此完成。






 

你可能感兴趣的:(ubuntu,kvm,嵌套虚拟化)