一、libvirt-qemu-kvm平台是什么
- 简单来说,是一套虚拟机平台,是目前很多云平台的底层软件支撑,如云平台openstack底层就使用了这套软件,qemu-guest-agent是里面的一个工具。
- 严格来说,这套平台是由3部分组成的,正如名称所示,是由libvirt,qemu,kvm组成。
按官网的介绍来说,libvirt是
- 管理虚拟化主机的工具集
- 可以通过多种编程语言访问(也就是调用),如C、Python、Perl、Java,从而使用这些编程语言就可以管理物理主机与虚拟机
- 以开源许可协议方式授权
- 致力于支持多平台:Linux、FreeBSD、Windows、OS-X
- 被许多应用软件使用
上面这些没有说的是,libvirt提供API供其它程序调用,支持管理多种虚拟机hypervisor,例如Xen,qemu-kvm
(二) qemu是什么?
- 模拟器:
运行为其它平台编译的程序或OS,如在X86 PC上运行arm平台的程序
- 虚拟机:
运行与本地平台相同类型的虚拟机。可以在xen环境下运行,也可以基于KVM运行。当基于KVM时,qemu可以虚拟化X86、基于PowerPC的服务器和嵌入式系统、S390、ARM等。
(三) KVM是什么?
- 英文全称为:Kernel-Based Virtual Machine,翻译为中文为“基于内核的虚拟机”。
- 是Linux内核的一个可加载模块,通过调用Linux本身内核功能,实现对CPU的虚拟化和内存的虚拟化,使Linux内核成为虚拟化层。KVM需要硬件支持虚拟化,比如vmx(intel),svm(amd)。
(四)分工
- libvirt提供管理工具
- qemu-kvm实现虚拟机,这其中,qemu实现除CPU和内存外的其它设备,如磁盘,网卡的虚拟化;KVM实现内存和CPU的虚拟化。
二、qga介绍
- qemu-guest-agent,简称qga,是虚拟机内部的守护进程,用来接收物理主机发出的命令,对虚拟机进行注入操作或获取虚拟机信息。
- qga有很多命令,比如查看虚拟机CPU信息的guest-get-vcpus子命令。使用命令guest-info可以查看qga中可以调用的子命令列表。
- 在qga执行子命令guest-info后,可以发现有很多命令。但这些命令,都是功能固定的,即一条子命令只能实现一种特定的功能,如子命令guest-file-write只能实现将数据写入虚拟机中文件的功能。这样一来,导致qga虽然命令很多,而我们却无法对虚拟机进行更多的控制。
- 好在qga是开源的,我们能够获取到源码。有了源码后,我们可以直接修改源码,定制出一款满足需求的qga。
三、定制前的准备工作
在进行定制前,先进行一些准备工作,例如测试的方法,如何制作软件包。
3.1 测试新命令的方法
先说明如何测试新的qga命令。接下来的示例中,都可以用这一方法来测试
测试环境(X86):
vm : CentOS Linux release 7.2.1511
qga : qemu-guest-agent-2.3.0-4.el7
host : CentOS Linux release 7.3.1611
virsh : 3.2.0
qemu-kvm :qemu-kvm-1.5.3-141.el7_4.6
(1) 首先,虚拟机XML配置文件中要存在如下内容:
<channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
(2) 使用virsh命令启动虚拟机,假设虚拟机名字为live-centos7.2
virsh start live-centos7.2
(3) 在主机上执行命令的方法:
virsh qemu-agent-command live-dwcentos7.2 --cmd '{"execute":"guest-info"}'
输出内容如下:
证明qga命令可以正常使用。
3.2 如何制作rpm包
使用的是centos的系统,在安装定制化的qga时,使用rpm方式安装比较好。下面介绍一下创建qga安装包的方法(以qemu-guest-agent-2.3.0-4.el7为例)。
3.2.1 安装源码包
- 先下载源码包qemu-guest-agent-2.3.0-4.el7.src.rpm
- 使用命令安装:
rpm -i qemu-guest-agent-2.3.0-4.el7.src.rpm