找回密码
 立即注册
搜索
热搜: SDN 云计算 H3C
查看: 2166|回复: 0

[CentOS] KVM嵌套虚拟化-实现虚拟机中创建虚拟机

[复制链接]

16

主题

4

精华

0

回帖

注册会员

体力
78 卡
贡献
37 个
金币
80 枚
注册时间
2019-8-24
最后登录
2020-7-15

活跃会员灌水之王突出贡献最佳新人

发表于 2019-8-25 00:35:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Jason 于 2019-8-25 01:26 编辑

嵌套虚拟化
一般情况下,我们是无法在KVM虚拟机里面再去创建虚拟机的,因为我们的KVM虚拟机的CPU默认情况下并不支持虚拟化功能,对于Inter的CPU来说,如果要支持虚拟化功能,必须要有一个叫vmx的特性,以下是一个物理服务器的CPU信息:
在CPU特性(flags)中包含了vmx这个特性,说明这台服务器是支持虚拟化功能的,也就是说我们可以在这台服务器上创建虚拟机。我们再看看以这台服务器作为宿主机,创建的虚拟机的CPU特性:
我们可以看到虚拟机的CPU特性(flags)相比起宿主机来说要少很多,并且没有vmx这个特性,所以我们是无法在这台虚拟机上创建虚拟机的。
那么,我们如何让创建出来的虚拟机的CPU也带有vmx特性呢?这就要用到所谓的嵌套虚拟化的功能了。当宿主机开启嵌套虚拟化功能时,我们在该宿主机上创建的虚拟机的CPU也可以获得vmx特性,从而可以在该虚拟机中再去创建虚拟机:

检查宿主机机是否开启了嵌套虚拟化功能:
cat /sys/module/kvm_intel/parameters/nested        //结果为Y时表示宿主机支持嵌套虚拟化,为N为不支持。
如何开启宿主机的嵌套虚拟化功能可参考这篇文章:http://www.cnblogs.com/jython/p/4458807.html

创建支持虚拟化功能的虚拟机
当我们有了支持KVM嵌套虚拟化的宿主机后,便可以创建支持虚拟化功能的虚拟机了。我们使用libvirt来创建虚拟机,虚拟机的配置文件可以参考下面的vm01.xml文件:<domain type = 'kvm'>
    <name>vm01</name>
    <memory>2096576</memory>
    <vcpu>2</vcpu>
    <os>
        <type arch = 'x86_64' machine = 'rhel6.0.0'>hvm</type>
        <boot dev = 'hd'/>
    </os>
    <features>
        <acpi/>
        <apic/>
        <pae/>
    </features>
<domain type = 'kvm'>
    <name>vm01</name>
    <memory>2096576</memory>
    <vcpu>2</vcpu>
    <os>
        <type arch = 'x86_64' machine = 'rhel6.0.0'>hvm</type>
        <boot dev = 'hd'/>
    </os>
    <features>
        <acpi/>
        <apic/>
        <pae/>
    </features>
    <cpu mode='host-model'> <!--使虚拟机也支持虚拟化 -->
        <model fallback='allow'/>
        <topology sockets='1' cores='2' threads='1'/>
    </cpu>
    <clock offset = 'localtime'/>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>
    <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type = 'file' device = 'disk'>
            <driver name = 'qemu' type = 'qcow2'/>
            <source file = '/var/lib/libvirt/images/CentOS7.2-20180708.qcow2'/>
            <target dev = 'hda' bus = 'ide'/>
        </disk>
        <interface type='bridge'>
                <source bridge='virbr0'/>   <!--宿主机的网桥,virbr0为kvm模块提供给连接在该网桥上面的guest使用NAT方式访问外网 -->
                <target dev='vnet001'/>   <!-- 在virbr0网桥上增加的网口 -->
                <model type='virtio'/>
                <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        <input type ='tablet' bus='usb'/>
        <input type = 'mouse' bus = 'ps2'/>
        <graphics type = 'vnc' port = '-1' listen = '0.0.0.0' autoport = 'yes'/>
        <console type='pty'>  <!-- 加上这行设置,否则无法使用virsh console连上虚拟机-->
              <target port='0'/>
         </console>
    </devices>
</domain>
————————————————


使用以下命令创建虚拟机:

virsh define vm01.xml
virsh start vm01
1
2
进入虚拟机,查看CPU特性,可以看到此时虚拟机的CPU已经支持vmx特性:

我们再参考上面的方式在这个虚拟机中使用libvirt再创建一台虚拟机:

可以看到虚拟机成功创建出来了。
————————————————

版权声明:本文为CSDN博主「巴拉拉小星星」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012124304/article/details/80955753



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表