通过libvirt创建虚拟机

Posted by Shi Hai's Blog on February 20, 2024

一、工具准备

我们可以使用云上的虚拟机来安装libvirt,如果没有云上虚拟机也可以选择安装一个virtualBox来创建桌面级的虚拟机。

1.1 安装VirtualBox

VirtualBox下载地址,如有需要请自行下载和安装。

二、调用libvirt

2.1 开启硬件辅助虚拟化

虚拟化技术有很多种:软件模拟、全虚拟化(KVM、VMWare)、半虚拟化(Xen)、硬件辅助虚拟化(Intel推出对CPU进行改造的硬件辅助虚拟化方案:VT-x)和容器虚拟化(Docker)。
如果我们要调用libvirt创建KVM类型的虚拟机就需要打开硬件的硬件辅助虚拟化,这个开关没打开就需要打开。 任务管理器种看虚拟化开关是否打开 另外,如果我们通过VirtualBox创建一个虚拟机,我们还需要在创建出来的虚拟机的设置上看嵌套虚拟化VT-x的开关是否打开,如果没打开就需要手动打开。 未开启嵌套虚拟化 我们无法在VirtualBox上打开此开关,只能在Windows DOS系统上执行:

# 进入VirtualBox安装路径
D:\
cd "Program Files\Oracle\VirtualBox"
# 查询虚拟机清单
.\VBoxManage.exe list vms
# 打开嵌套虚拟化开关
.\VBoxManage.exe modifyvm "Centos-7" --nested-hw-virt on

打开VirtualBox嵌套虚拟化开关后的配置: 开启嵌套虚拟化 然后在我们的虚拟机内执行lscpu查看是否已经支持嵌套虚拟化,如果已经有Virtulization: VT-x则表示已经支持嵌套虚拟化: 虚拟机已经支持VT-x 另外,我们还需要在虚拟机种打开嵌套虚拟化开关:

# 确认是否开启嵌套虚拟化 Y:是,N:否
cat /sys/module/kvm_intel/parameters/nested

# 启用嵌套虚拟化
# 创建配置文件
vi /etc/modprobe.d/kvm-nested.conf

# 将以下信息贴入kvm-nested.conf文件
options kvm-intel nested=1
options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=1
options kvm-intel ept=1

# 重新加载kvm模块
modprobe -r kvm_intel
modprobe -a kvm_intel

# 再次判断是否已经支持嵌套虚拟化
cat /sys/module/kvm_intel/parameters/nested

2.2 安装libvirt

最后,我们安装好libvirt相关组件模块就可以使用了。

yum install libvirt libvirt-python libguestfs-tools qemu-kvm virt-install bridge-utils virt-viewer –y

2.3 通过libvirt命令行创建虚拟机

创建KVM虚拟化类型的虚拟机:

# 创建命令
# 本文使用的虚拟机镜像来自阿里云镜像:https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/
# virt-type指定虚拟化方式,没有打开硬件虚拟化,就无法选择kvm
# /libvirt/disk、/libvirt/iso都是自己创建出来的路径
virt-install \
--name=test-vm \
--virt-type=kvm \
--os-type=Linux --os-variant=rhel7 --ram=1024 --vcpus=1 \
--disk path=/libvirt/disk/test-vm.img,size=10 \
--location /libvirt/iso/CentOS-7-x86_64-Minimal-2009.iso \
--graphics vnc,password=kvm,listen=::,port=5900 \
--network bridge=virbr0 \
--autostart \
--force

创建KVM虚拟机 当然,如果我们不打开硬件辅助虚拟化,但我们还是指定--virt-type=kvm参数创建虚拟机的话,就会收到一个不支持创建该KVM格式虚拟机错误。当我们不开启硬件辅助虚拟化的话,我们还是可以创建出qemu虚拟机。 最后我们可以通过virsh来查询虚拟机列表: 创建KVM虚拟机 另外,我们也可以使用客户端来查询虚拟机清单: 创建KVM虚拟机

2.4 使用libvirt test driver

libvirt社区通过使用test driver进行单元测试。libvirt提供了本地、远端两种配置连接方式,另外配置文件可以是默认或者自定义配置文件。

2.4.1 使用默认配置文件

默认的配置文件里面已经内置了一个叫test的虚拟机。另外,需要注意的是,我们无法通过命令行方式virsh --connect方式来创建虚拟机,否则会遇到一个Segmentation fault错误,该错误原因暂时还不清楚。 使用默认测试配置

2.4.2 使用自定义配置文件

我们还可以通过自定义配置文件来定义仿真各种虚拟机,可以参考社区的单元测试自定义配置使用自定义测试配置

三、参考文档