嵌套虚拟化—VMware+KVM

最近突然对嵌套虚拟化产生兴趣,并且想了解KVM和Qemu之间的关系,于是在本机的VMware中的Ubuntu尝试使用KVM和Qemu分别在Ubuntu虚拟机中再装Ubuntu。实现嵌套虚拟化的同时,在安装过程中了解KVM和Qemu的关系。

本文主要记录在VMware中使用KVM实现嵌套虚拟化的过程。

实验环境:win10主机系统 + VmwareWorkstation14 + Ubuntu18.04 + Ubuntu16.04

参考文章:

VMWare+Ubuntu+KVM+VNC虚拟机安装配置

Vmware上基于Ubuntu的kvm安装和Ubuntu的嵌套安装

Ubuntu14.04+KVM配置虚拟机桥接(bridge)

QEMU 使用的镜像文件:qcow2 与 raw

KVM/QEMU桥接网络设置及kvm资料

虚拟化之KVM virsh常用命令篇

目录结构:

  1. 配置KVM虚拟化环境(Ubuntu18.04)
  2. 使用KVM创建虚拟机(Ubuntu16.04)
  3. 配置桥接网络
  4. 问题与收获

一、配置KVM虚拟化环境(Ubuntu18.04)

1.1虚拟机配置

在Vmware Workstation的虚拟机Ubuntu18.04中,先将U不同怒18.04关机,然后再虚拟机的处理器选择里边将**”Intel VT-x/EPT或AMD-V/RVI**”选中;网络适配器修改为桥接模式

验证Ubuntu18.04是否支持虚拟化:grep vmx /proc/cpuinfo

结果出现vmx等关键词,说明系统可以支持虚拟化

1.2 KVM安装

一般在Ubuntu中都有kvm的支持,也就是说可以通过默认的安装软件进行安装,在Ubuntu中的默认的安装软件是apt-get,一般新安装的系统的apt-get的知识库还没有更新,建议先更新然后再查看是否有现成的安装包。

apt-get update						#更新apt-get
apt-cache search kvm | grep kvm		#查看是否具有现成的安装包
apt-get install qemu-kvm			#安装KVM以及QEMU的安装 
lsmod | grep kvm
#KVM是内核中的一个模块,所以安装完成之后需要查看内核是否加载了KVM模块
dpkg -l | grep qemu					#查看QEMU相关的包是否安装完成

1.3安装虚拟机管理软件

KVM和QEMU是用于虚拟化的软件,虚拟机管理软件用于高效的对相应的虚拟化的软件进行使用以及相应虚拟机的管理。

libvirt和virsh的安装。

apt-cache search libvirt | grep libvirt
apt-get install libvirt-bin
apt-cache search virtin | grep virtin
apt-get install virtinst	#我看另一个教程上用的是virt-manager

virt-manager - desktop application for managing virtual machines

virtinst - Programs to create and clone virtual machines

二、使用KVM创建虚拟机(Ubuntu16.04)

2.1创建虚拟磁盘

qemu-img create -f qcow2 ubuntu16.qcow2 10G

使用qcow给系统安装分配虚拟磁盘;如果没有这项的话,在Ubuntu16.04安装的时候会提示安装空间大小为0B。

2.2编辑虚拟机配置文件

新建一个ubuntu16.xml文件(目录无关),编辑内容如下:

<domain type='kvm'> 
<name>ubuntu14</name> 
<uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa</uuid> 
<memory>1048576</memory> 
<currentMemory>1048576</currentMemory> 
<vcpu>1</vcpu> 
<os> 
<type>hvm</type> // 配置虚拟机的启动方式 
<boot dev='cdrom'/> // 如果为虚拟机安装系统,那么配置此选项 
<boot dev='hd'/> // 虚拟机的系统已经安装完成,启动系统配置此选项 
<bootmenu enable='yes'/> 
</os> 
<features> 
<acpi/> 
<apic/> 
<pae/> 
</features> 
<clock offset='utc'/> 
<on_poweroff>destroy</on_poweroff> 
<on_reboot>restart</on_reboot> 
<on_crash>destroy</on_crash> 
<devices> 
<emulator>/usr/bin/kvm</emulator> 
<disk type="file" device="disk"> // 用于安装系统的虚拟磁盘 
<driver name="qemu" type="qcow2"/> 
<source file="/home/muhong/vm/img/ubuntu.qcow2"/> //修改为ubuntu16.qcow2的地址
<target dev="vda" bus="virtio"/> 
<address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/> 
</disk> 
<disk type="file" device="cdrom"> // 配置系统的iso文件的路径(绝对路径) 
<driver name="qemu" type="raw"/> 
<source file="/home/muhong/ubuntuimage/ubuntu-14.04.5-server-amd64.iso"/> //修改为ubuntu16的镜像地址
<target dev="hdc" bus="ide"/> 
<readonly/> 
<address type="drive" controller="0" bus="1" target="0" unit="0"/> 
</disk> 
<interface type='bridge'> 
<source bridge='br0'/> // 宿主机的桥接网络的名称 
<mac address="00:0c:29:b6:24:9c"/> // 这个地址是虚拟机的物理地址
<target dev='vnet0'/> 
<model type='virtio'/> 
<alias name='net0'/> 
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 
</interface> 
<controller type="ide" index="0"> 
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/> 
</controller> 
<input type='mouse' bus='ps2'/> // vnc远程连接的控制 
<graphics type='vnc' port='-1' autoport="yes" listen='0.0.0.0'/> 
<console type='pty'> 
<target port='0'/> 
</console> 
</devices> 
</domain>

说明

  • 安装系统前后修改项;每次只保留其中一行。安装之前;安装之后
  • 需要设置用于安装系统的虚拟磁盘路径;设置ISO文件路径。
  • 设置虚拟机的物理地址使用ifconfig查看

2.3启动虚拟机

virsh create ubuntuxx.xml

2.4查看Ubuntu16

使用virt-viewer监视ubuntu16

apt-get install virt-viewer
命令行直接使用  virt-viewer

三、配置桥接网络

为了能使得后面虚拟机的安装能被宿主机(ubuntu18.04)所在局域网的其他机器访问,所以需要在宿主机(ubuntu18.04)配置桥接网络,这样虚拟机通过桥接网络就可以分配到宿主机(ubuntu18.04)所在局域网的IP地址了,那么虚拟机也就可以被访问了。

配置kvm的网络有2种方法。

其一,默认方式为用户模式网络(Usermode Networking),数据包由NAT方式通过主机的接口进行传送。

其二,使用桥接方式(Bridged Networking),外部的机器可以直接联通到虚拟机,就像联通到你的主机一样。

  • 第一:用户模式
    虚拟机可以使用网络服务,但局域网中其他机器包括宿主机无法连接它。比如,它可以浏览网页,但外部机器不能访问架设在它里面的web服务器。
  • 第二:桥接模式
    这种模式允许虚拟机就像一台独立的主机一样拥有网络。这种模式需要网卡支持,一般的有线网卡都支持,绝大部分的无线网卡都不支持

所以,其实我认为不是一定要配置桥接网络的。但是为了了解大致内容,学习一下。

在本文中,此部分应该在Ubuntu18.04中进行,不要误以为在Ubuntu16.04。

3.1宿主机网络配置

首先:要停止网络服务
sudo /etc/init.d/networking stop
其次:修改网络配置文件
sudo gedit /etc/network/interfaces
最后:重新启动网络服务便可
sudo /etc/init.d/networking restart

3.2本人最后使用的网络配置文件

auto lo 
iface lo inet loopback 

auto br0 
iface br0 inet dhcp 
bridge_ports ens33 				#不知道为什么突然出现了ens33这个东西
bridge_stp off 
bridge_fd 0
dns-nameserver 202.98.98.68		#为什么是这个...

3.3查看是否配置成功

ifconfig	#查看是否配置成功,所以怎样算是成功了?

四、问题与收获

1.明明已经安装了qemu-kvm但是找不到模块:

Could not access KVM kernel module

How to fix error ‘Could not access KVM kernel module’ in Proxmox, Virtualizor, SolusVM, Redhat, CentOS and Ubuntu

没有开启CPU虚拟化:Intel VT-x/EPT或AMD-V/RVI

2.一些命令:

apt-cache search...
sudo lsb_release -a		#查看ubuntu的发行版本。

3.桥接网络

ubuntu下使用qemu安装虚拟机并配置桥接网络

KVM/QEMU桥接网络设置

4.挂载

在windows操作系统中,

挂载通常是指给磁盘分区(包括被虚拟出来的磁盘分区)分配一个盘符

这个操作可以通过“计算机管理”中的“磁盘管理”来进行。

第三方软件,如磁盘分区管理软件、虚拟磁盘软件等,通常也附带挂载功能。

在linux操作系统中,

挂载是一个非常重要的功能,使用非常频繁。

它指将一个设备(通常是存储设备)挂接到一个已存在的目录上。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐