内容简介:参考总的来说,QEMU是一个独立的虚拟化解决方案,并不依赖KVM(它本身自己可以做CPU和内存的模拟,只不过效率较低),而KVM是另一套虚拟化解决方案,对CPU进行虚拟效率较高(采用了硬件辅助虚拟化),但本身不提供其他设备的虚拟化,借用了QEMU的代码进行了定制,所以KVM方案一定要依赖QEMU。Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术。
参考 QEMU和QEMU-KVM的关系 ,可以了解到,KVM实现对CPU的底层虚拟化和内存的虚拟化,使 Linux 内核成为虚拟化层,需要x86架构的,支持虚拟化功能的硬件支持(比如Intel VT,AMD-V),是一种全虚拟化架构。QEMU是一套由Fabrice Bellard编写的模拟处理器的自由软件,它是一个完整的可以单独运行的软件,可以独立模拟出整台计算机,包括CPU,内存,IO设备,通过一个特殊的“重编译器”对特定的处理器的二进制代码进行翻译,从而具有了跨平台的通用性。
总的来说,QEMU是一个独立的虚拟化解决方案,并不依赖KVM(它本身自己可以做CPU和内存的模拟,只不过效率较低),而KVM是另一套虚拟化解决方案,对CPU进行虚拟效率较高(采用了硬件辅助虚拟化),但本身不提供其他设备的虚拟化,借用了QEMU的代码进行了定制,所以KVM方案一定要依赖QEMU。
Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术。
Libvirt主要由三个部分组成:API库,一个守护进程libvirtd和一个默认命令行管理工具 virsh。
更多内容参考 libvirt 介绍 。
实验环境
不能直接在OpenStack环境中实验,因为这样会破坏OpenStack。而且,使用kolla安装的OpenStack,没有virsh命令,libvirt是运行在容器中的。
所以,我们搭建一个新的实验环境:两个节点分别为node0和node1,ubuntu16系统,IP分别为192.168.56.200和192.168.56.201。
安装libvirt
参考 Ubuntu16.04安装QEMU与libvirt ,安装QEMU和libvirt。
1、切换到root用户
sudo -i
2、查看主机是否支持硬件虚拟化
egrep -c '(vmx|svm)' /proc/cpuinfo
因为我们的实验本身是在虚拟机中进行的,所以输出0,表示不支持硬件虚拟化。
3、安装QEMU和libvirt
apt install -y qemu libvirt-bin bridge-utils virt-manager virt-viewer
如果是支持硬件虚拟化,那么执行安装:
apt install -y kvm qemu-kvm libvirt-bin bridge-utils virt-manager virt-viewer
bridge-utils是网桥管理工具。 virt-manager 是一个通用的桌面管理工具。virt-viewer是一个用于显示虚拟机的图形控制台的最小工具。
4、检查安装
virsh --version virt-manager --version virt-viewer --version
5、查看网络
ip a brctl show virsh net-list
安装完成以后,默认是启用了桥接网络virbr0,IP为192.168.122.1/24。如果没有启用,那么参考 ubuntu16.04环境安装KVM 进行启用。
6、安装vncserver
apt-get install vnc4server
qemu创建虚拟机
参考 嵌套虚拟化—VMware+QEMU/KVM 、 ubuntu下使用qemu安装虚拟机并配置桥接网络 和 使用qemu安装虚拟机 ,进行虚拟机的创建。
1、创建磁盘
mkdir /opt/qemu cd /opt/qemu qemu-img create -f qcow2 cirros0.img 5g
qcow2是qemu最常使用的格式,该格式下可以采用来写时复制技术来优化性能;cirros0.img是磁盘名称;5g是指磁盘文件大小。
2、下载cirros系统
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
3、安装cirros到磁盘
qemu-system-x86_64 -hda cirros0.img -boot d -cdrom ./cirros-0.4.0-x86_64-disk.img -m 512 -vnc :1
如果是支持硬件虚拟化,那么执行安装:
qemu-system-x86_64 -enable-kvm -hda cirros0.img -boot d -cdrom ./cirros-0.4.0-x86_64-disk.img -m 512 -vnc :1
enable-kvm
使用KVM进行加速; hda
指定要使用的虚拟磁盘; boot d
指定启动位置,d表示从光盘启动; cdrom
指定镜像文件; m
指定虚拟机内存大小,默认单位是MB; vnc:1
通过vnc创建虚拟桌面。
出现警告:warning: TCG doesn’t support requested feature: CPUID.01H:ECX.vmx [bit 5]
没啥影响,不去管它。但是另外一个问题来了?怎么进行交互安装?
4、本地打开 vncviewer client ,输入ip:5901进行连接,即可看到安装过程。
卡在了安装界面:
Boot failed: could not read the boot disk No more network devices No bootable device
参考 Play with Libvirt/KVM 发现,cirros-0.4.0-x86_64-disk.img本身就是一个磁盘,尴尬。。。
5、启动实例
qemu-system-x86_64 -m 512 -smp 4 \ -drive file=cirros-0.4.0-x86_64-disk.img \ -vnc :1
本地打开 vncviewer client ,输入ip:5901进行连接,即可看到启动过程。因为没有 enable-kvm
,所以启动很慢,请耐心等待。
6、查看实例IP
登录cirros,然后查看IP、内存和硬盘
ip add free -m df -h
IP默认为10.0.2.15;内存512M,是指定的;硬盘默认256M。
当ctrl+c结束 qemu-system-x86_64
命令后,实例就被关闭了。再次使用 qemu-system-x86_64
命令启动实例,登录实例后使用 history
命令,发现之前的命令记录都还在,说明两次使用的都是同一块磁盘,也就是cirros-0.4.0-x86_64-disk.img。
7、设置IP
sudo vi /etc/network/interfaces
,eth0的配置修改为:
auto eth0 iface eth0 inet static address 192.168.122.100 netmask 255.255.255.0
然后重启网卡, sudo ifdown eth0
, sudo ifup eth0
。但是,无法ping通192.168.122.1,说明实例的网卡并没有和virbr0进行连接。
创建网络
实例有了,但是还不能连接外部网络。参考 访问qemu虚拟机的五种姿势 ,创建网络,重新启动实例。
1、创建网桥
brctl add virbr0 ifconfig virbr0 192.168.122.1 net mask 255.255.255.0 up
网桥已经存在,所以这一步不需要了。
2、创建tap接口,并添加到网桥
apt install uml-utilities tunctl -t tap0 ifconfig tap0 0.0.0.0 up brctl addif virbr0 tap0
3、让实例使用tap0作为网络设备启动
qemu-system-x86_64 -m 512 -smp 4 \ -drive file=cirros-0.4.0-x86_64-disk.img \ -netdev tap,id=tapnet,ifname=tap0,script=no \ -device rtl8139,netdev=tapnet \ -vnc :1
4、测试网络
登录实例, ping 192.168.122.1
,此时网络已经通了。
libvirt创建虚拟机
以上创建虚拟机的过程,其实并没有用到libvirt。下面参考 Play with Libvirt/KVM ,使用libvirt进行虚拟机的创建。
1、创建虚拟机
virt-install --connect=qemu:///system --name=cirros --ram=512 --vcpus=1 --disk path=cirros-0.4.0-x86_64-disk.img,format=qcow2 --import --network network:default --vnc
无法使用vncviwer进行连接,然后卡在上图的界面,最后ctrl+c强制结束。配置文件位于/etc/libvirt/qemu/cirros.xml,如果要编辑它,使用 virsh edit cirros
命令。
2、显示vnc port
virsh vncdisplay cirros
3、显示实例列表
virsh list
4、查看实例详情
virsh dominfo cirros
问题来了,怎么访问这个实例呢?
5、查看实例网络
参考 Find the IP address of a virtual machine ,使用 arp -an
命令查看实例IP。
然后,挨个ping一下192.168.122.0网段的IP,即可找到实例的IP,本次找到的IP为192.168.122.49。
6、访问实例
ssh cirros@192.168.122.49
输入默认密码gocubsgo,即可登录实例。
7、测试网络
ping 8.8.8.8 -c3
至此,大功告成,创建实例成功。
PS:销毁实例
virsh destroy cirros rm /etc/libvirt/qemu/cirros.xml virsh # undefine cirros # quit
后记
其实,虚拟机中安装的虚拟机,也可以支持KVM了,参考 KVM嵌套虚拟化 – 在虚拟机中创建虚拟机 和 Nested KVM ,开启嵌套虚拟化即可。
1、查看宿主机是否开启嵌套虚拟化
cat /sys/module/kvm_intel/parameters/nested
N代表没有开启。
2、开启嵌套虚拟化
echo 'options kvm_intel nested=1' >> /etc/modprobe.d/qemu-system-x86.conf
然后重启系统。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 创建一个虚拟教室环境
- PyCharm虚拟环境的创建!
- 创建Python虚拟环境——下
- Openstack虚拟机磁盘创建超时
- vmrun 批量创建VMware虚拟机
- 深入理解Java虚拟机(二)——对象的创建
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Creative Curve
Allen Gannett / Knopf Doubleday Publishing Group / 2018-6-12
Big data entrepreneur Allen Gannett overturns the mythology around creative genius, and reveals the science and secrets behind achieving breakout commercial success in any field. We have been s......一起来看看 《The Creative Curve》 这本书的介绍吧!
HTML 编码/解码
HTML 编码/解码
MD5 加密
MD5 加密工具