使用Libvirt创建虚拟机

栏目: 服务器 · 发布时间: 7年前

内容简介:参考总的来说,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进行连接,即可看到安装过程。

使用Libvirt创建虚拟机

卡在了安装界面:

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 ,所以启动很慢,请耐心等待。

使用Libvirt创建虚拟机

6、查看实例IP

登录cirros,然后查看IP、内存和硬盘

ip add
free -m
df -h

使用Libvirt创建虚拟机 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创建虚拟机

以上创建虚拟机的过程,其实并没有用到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

使用Libvirt创建虚拟机

无法使用vncviwer进行连接,然后卡在上图的界面,最后ctrl+c强制结束。配置文件位于/etc/libvirt/qemu/cirros.xml,如果要编辑它,使用 virsh edit cirros 命令。

2、显示vnc port

virsh vncdisplay cirros

3、显示实例列表

virsh list
使用Libvirt创建虚拟机

4、查看实例详情

virsh dominfo cirros
使用Libvirt创建虚拟机

问题来了,怎么访问这个实例呢?

5、查看实例网络

参考 Find the IP address of a virtual machine ,使用 arp -an 命令查看实例IP。

使用Libvirt创建虚拟机

然后,挨个ping一下192.168.122.0网段的IP,即可找到实例的IP,本次找到的IP为192.168.122.49。

6、访问实例

ssh cirros@192.168.122.49
使用Libvirt创建虚拟机

输入默认密码gocubsgo,即可登录实例。

7、测试网络

ping 8.8.8.8 -c3
使用Libvirt创建虚拟机

至此,大功告成,创建实例成功。

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

然后重启系统。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Mastering Bitcoin

Mastering Bitcoin

Andreas M. Antonopoulos / O'Reilly Media / 2014-12-20 / USD 34.99

Mastering Bitcoin tells you everything you need to know about joining one of the most exciting revolutions since the invention of the web: digital money. Bitcoin is the first successful digital curren......一起来看看 《Mastering Bitcoin》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具