使用Libvirt创建虚拟机

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

内容简介:参考总的来说,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/KVMubuntu下使用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 eth0sudo 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

然后重启系统。


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

查看所有标签

猜你喜欢:

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

The Creative Curve

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》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换