使用Libvirt创建虚拟机 | 您所在的位置:网站首页 › qemu和libvirt › 使用Libvirt创建虚拟机 |
前言 本文中,我们学习一下qemu和libvirt,分别使用它们创建一个cirros虚拟机,并配置好网络。 宿主机node0的系统为ubuntu16,IP为192.168.56.200。 qemu和libvirt简介QEMU是一套由Fabrice Bellard编写的模拟处理器的自由软件,它是一个完整的可以单独运行的软件,可以独立模拟出整台计算机,包括CPU,内存,IO设备,通过一个特殊的“重编译器”对特定的处理器的二进制代码进行翻译,从而具有了跨平台的通用性。 总的来说,QEMU是一个独立的虚拟化解决方案,并不依赖KVM,它本身自己可以做CPU和内存的模拟,只不过效率较低。 KVM(Kernel-based Virtual Machine)是另一套虚拟化解决方案,实现对CPU的底层虚拟化和内存的虚拟化,使Linux内核成为虚拟化层,需要x86架构的、支持虚拟化功能的硬件支持(比如Intel VT,AMD-V),所以虚拟效率较高,是一种全虚拟化架构。 但是KVM本身不提供其他设备的虚拟化,借用了QEMU的代码进行了定制,所以KVM方案一定要依赖QEMU。 而Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX、QEMU和其他虚拟化技术。 Libvirt主要由三个部分组成:API库,一个守护进程libvirtd和一个默认命令行管理工具 virsh。 参考文档: QEMU和QEMU-KVM的关系libvirt 介绍安装qemu和libvirt参考Ubuntu16.04安装QEMU与libvirt,安装QEMU和libvirt。 1、切换到root用户 123sudo -i#orsudo su2、查看主机是否支持硬件虚拟化 1egrep -c '(vmx|svm)' /proc/cpuinfo因为我们的实验本身是在虚拟机中进行的,所以输出0,表示不支持硬件虚拟化。 3、安装QEMU和libvirt 123apt install -y qemu libvirt-bin bridge-utils virt-manager virt-viewer# 如果是支持硬件虚拟化,那么执行安装apt install -y kvm qemu-kvm libvirt-bin bridge-utils virt-manager virt-viewerbridge-utils是网桥管理工具。virt-manager是一个通用的桌面管理工具。virt-viewer是一个用于显示虚拟机的图形控制台的最小工具。4、检查安装 123virsh --versionvirt-manager --versionvirt-viewer --version5、查看网络 123ip abrctl showvirsh net-list安装完成以后,默认是启用了桥接网络virbr0,IP为192.168.122.1/24。如果没有启用,那么参考ubuntu16.04环境安装KVM进行启用。 安装vncserver安装vncserver,方便远程查看虚拟机的安装过程 1apt-get install vnc4serverqemu创建虚拟机参考文档: 嵌套虚拟化—VMware+QEMU/KVMubuntu下使用qemu安装虚拟机并配置桥接网络使用qemu安装虚拟机下载系统镜像下载cirros系统镜像 1wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img创建磁盘123mkdir /opt/qemucd /opt/qemuqemu-img create -f qcow2 cirros0.img 5g参数说明: qcow2是qemu最常使用的磁盘格式,该格式下可以采用写时复制技术来优化性能cirros0.img是磁盘名称5g是指磁盘文件大小安装系统到磁盘123qemu-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]没啥影响,不去管它。 查看安装过程怎样查看安装过程?怎样在安装时进行配置?答:使用VNC。本地打开vncviewer client,输入ip:5901进行连接,即可看到安装过程。 安装卡在了安装界面: 123Boot failed: could not read the boot diskNo more network devicesNo bootable device参考Play with Libvirt/KVM发现,cirros-0.4.0-x86_64-disk.img本身就是一个磁盘,尴尬。。。 启动虚拟机123qemu-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,所以启动很慢,请耐心等待。 1、查看虚拟机IP登录cirros(默认用户名cirros,密码gocubsgo),然后查看IP、内存和硬盘 123ip addfree -mdf -h
当ctrl+c结束qemu-system-x86_64命令后,虚拟机就被关闭了。再次使用qemu-system-x86_64命令启动虚拟机,登录虚拟机后使用history命令,发现之前的命令记录都还在,说明两次使用的都是同一块磁盘,也就是cirros-0.4.0-x86_64-disk.img。 2、设置IP 1vim /etc/network/interfaceseth0的配置修改为: 1234auto eth0iface eth0 inet staticaddress 192.168.122.100netmask 255.255.255.03、重启网卡 12ifdown eth0ifup eth0但是,无法ping通192.168.122.1,说明虚拟机的网卡并没有和virbr0进行连接。 创建网络虚拟机有了,但是还不能连接外部网络。我们需要创建网络,重新启动虚拟机,详情参考访问qemu虚拟机的五种姿势。 1、创建网桥 12brctl add virbr0ifconfig virbr0 192.168.122.1 net mask 255.255.255.0 up网桥已经存在,所以这一步不需要了。 2、创建tap接口,并添加到网桥 1234apt install uml-utilitiestunctl -t tap0ifconfig tap0 0.0.0.0 upbrctl addif virbr0 tap03、让虚拟机使用tap0作为网络设备启动 12345qemu-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 :14、登录虚拟机,测试网络 1ping 192.168.122.1此时网络已经通了。 以上创建虚拟机的过程,其实并没有用到libvirt,下面使用下面使用libvirt进行虚拟机的创建。参考文档Play with Libvirt/KVM 1、创建虚拟机 1virt-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 1virsh vncdisplay cirros3、显示虚拟机列表 1virsh list4、查看虚拟机详情 12virsh dominfo cirrosvirsh domstate cirros问题来了,怎么访问这个虚拟机呢?最简单的方法是使用virsh console cirros命令打开控制台,使用ctrl+]关闭控制台,另外就是通过ssh或者vnc。 5、查看虚拟机网络(mac地址和ip地址) 12virsh dumpxml frontend1 | grep macarp -an
6、访问虚拟机 1ssh [email protected]
7、测试网络 1ping 8.8.8.8 -c3
以上我们知道,可以使用arp -an命令查看虚拟机IP,如果查看到的IP都不能访问呢?这时就需要我们来手动配置。参考文档: 给libvirt创建的虚拟机指定固定IPlinux初学者-网络桥接篇Documentation/Networking1、查看libvirt网络 1virsh net-list --all2、查看虚拟机的网络 1virsh domiflist cirros查看到mac地址为52:54:00:7f:0e:77。 3、修改libvirt网络配置 1virsh net-edit default如下修改: 1234567891011121314 default cc522162-7487-41dc-82ee-63df0df4003e以上,给cirros虚拟机配置了静态IP为192.168.122.100。 4、重启网络 1234virsh net-destroy defaultvirsh net-start default#virsh --connect qemu:///system net-destroy default#virsh --connect qemu:///system net-start default5、重启虚拟机 12virsh shutdown cirrosvirsh start cirroslibvirt配置VNC某些情况下,无法通过IP访问虚拟机,这时就需要配置vnc,详情参考kvm虚拟机VNC的配置。 1、配置vnc 1virsh edit cirros找到 1修改为: 1232、重启虚拟机 12virsh shutdown cirrosvirsh start cirros3、vnc访问本地打开vncviewer client,输入ip:5901进行连接。登录虚拟机后,也可以设置静态IP,这样就不用通过virsh net-edit default修改了。 后记其实,虚拟机中安装的虚拟机,也可以支持KVM了,开启嵌套虚拟化即可。详情参考: KVM嵌套虚拟化 – 在虚拟机中创建虚拟机Nested KVM1、查看宿主机是否开启嵌套虚拟化 1cat /sys/module/kvm_intel/parameters/nestedN代表没有开启。 2、开启嵌套虚拟化 1echo 'options kvm_intel nested=1' >> /etc/modprobe.d/qemu-system-x86.conf然后重启系统。 |
CopyRight 2018-2019 实验室设备网 版权所有 |