一、工具准备
我们可以使用云上的虚拟机来安装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
则表示已经支持嵌套虚拟化:
另外,我们还需要在虚拟机种打开嵌套虚拟化开关:
# 确认是否开启嵌套虚拟化 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
当然,如果我们不打开硬件辅助虚拟化,但我们还是指定--virt-type=kvm
参数创建虚拟机的话,就会收到一个不支持创建该KVM格式虚拟机错误。当我们不开启硬件辅助虚拟化的话,我们还是可以创建出qemu虚拟机。
最后我们可以通过virsh
来查询虚拟机列表:
另外,我们也可以使用客户端来查询虚拟机清单:
2.4 使用libvirt test driver
libvirt社区通过使用test driver进行单元测试。libvirt提供了本地、远端两种配置连接方式,另外配置文件可以是默认或者自定义配置文件。
2.4.1 使用默认配置文件
默认的配置文件里面已经内置了一个叫test的虚拟机。另外,需要注意的是,我们无法通过命令行方式virsh --connect
方式来创建虚拟机,否则会遇到一个Segmentation fault
错误,该错误原因暂时还不清楚。
2.4.2 使用自定义配置文件
我们还可以通过自定义配置文件来定义仿真各种虚拟机,可以参考社区的单元测试自定义配置。
三、参考文档
- 虚拟机创建流程-libvirt篇(上)
- 虚拟机创建流程-libvirt篇(下)
- libvirt API of domain
- libvirt API of event
- [libvirt] Help needed in simulating libvirt
- 在 CentOS 7.x 和 RHEL 7.x 安装 KVM 管理程序
- 阿里云 Centos源
- Install and Configure KVM Hypervisor on CentOS/RHEL
- Linux虚拟化入门(四)KVM 创建一个 Centos 实例
- VirtualBox 创建 Centos 7 虚拟机
- Virtualbox打开嵌套虚拟化
- KVM嵌套虚拟化使用
- 配置VirtualBox虚拟机访问外网,并于宿主机互联互通
- virsh命令详解「建议收藏」
- [libvirt-users] Help needed in simulating libvirt
- 虚拟化技术,你了解几个?