KVM的管理工具,一般都对qemu命令进行了封装和功能增强,提供了比原生的qemu命令行更加友好、高效的用户交互接口。
1. libvirt
libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口,而且一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和云计算框架平台(如OpenStack、ZStack、OpenNebula、Eucalyptus等)都在底层使用libvirt的应用程序接口。其主要作为连接底层Hypervisor和上层应用程序的一个中间适配层。
libvirt支持多种虚拟化方案,既支持包括KVM、QEMU、Xen、VMware、VirtualBox、Hyper-V等在内的平台虚拟化方案,也支持OpenVZ、LXC等Linux容器虚拟化系统,还支持用户态Linux(UML)的虚拟化。
libvirt对多种不同的Hypervisor的支持是通过一种基于驱动程序的架构来实现的。libvirt对不同的Hypervisor提供了不同的驱动。libvirt作为中间适配层,可以让底层Hypervisor对上层用户空间的管理工具是完全透明的,因为libvirt屏蔽了底层各种Hypervisor的细节,为上层管理工具提供了一个统一的、较稳定的接口(API)。通过libvirt,一些用户空间管理工具可以管理各种不同的Hypervisor和上面运行的客户机。
libvirt主要由3个部分组成,分别是:应用程序编程接口库、一个守护进程(libvirtd)和一个默认命令行管理工具(virsh)。应用程序接口是为其他虚拟机管理工具(如virsh、virt-manager等)提供虚拟机管理的程序库支持。libvirtd守护进程负责执行对节点上的域的管理工作,在用各种工具对虚拟机进行管理时,这个守护进程一定要处于运行状态中。
libvirt的核心价值和主要目标就是提供一套管理虚拟机的、稳定的、高效的应用程序接口(API)。libvirt API本身是用C语言实现的,主要包括8个部分:连接Hypervisor相关的API、域管理的API、节点管理的API、网络管理的API、存储卷管理的API、存储池管理的API、事件管理的API、数据流管理的API。
2. virsh
virsh是用于管理虚拟化环境中的客户机和Hypervisor的命令行工具,通过调用libvirt API来实现虚拟化的管理的。virsh是完全在命令行文本模式下运行的用户态工具,它是系统管理员通过脚本程序实现虚拟化自动部署和管理的理想工具之一。
在使用virsh命令行进行虚拟化管理操作时,可以使用两种工作模式:交互模式和非交互模式。交互模式,是连接到相应的Hypervisor上,然后输入一个命令得到一个返回结果,直到用户使用“quit”命令退出连接。非交互模式,是直接在命令行中在一个建立连接的URI之后添加需要执行的一个或多个命令,执行完成后将命令的输出结果返回到当前终端上,然后自动断开连接。
3. virt-manager
virt-manager是用于管理虚拟机的图形化的桌面用户接口,目前仅支持在Linux或其他类UNIX系统中运行。virt-manager项目选择使用Python语言开发其应用程序部分,使用GNU AutoTools(包括autoconf、automake等工具)进行项目的构建。virt-manager是一个完全开源的软件,使用Linux界广泛采用的GNU GPL许可证发布。virt-manager依赖的一些程序库主要包括Python(用于应用程序逻辑部分的实现)、GTK+PyGTK(用于UI界面)和libvirt(用于底层的API)。
virt-manager工具在图形界面中实现了一些易用且丰富的虚拟化管理功能。已经为用户提供的功能如下:
对虚拟机(即客户机)生命周期的管理,如创建、修改、启动、暂停、恢复和停止虚拟机,还包括虚拟快照、动态迁移等功能。
对运行中客户机实时性能、资源利用率等监控,统计结果的图形化展示。
对创建客户机的图形化的引导,对客户机的资源分配和虚拟硬件的配置和调整等功能也提供了图形化的支持。
内置了一个VNC和SPICE客户端,可以用于连接到客户机的图形界面进行交互。
支持本地或远程管理KVM、Xen、QEMU、LXC、ESX等Hypervisor上的客户机。
4. virt-viewer
virt-viewer是“Virtual Machine Viewer”(虚拟机查看器)工具的软件包和命令行工具名称,它是一个显示虚拟化客户机的图形界面的工具。virt-viewer使用GTK-VNC或SPICE-GTK作为它的显示能力,使用libvirt API去查询客户机的VNC或SPICE服务器端的信息。virt-viewer经常用于替换传统的VNC客户端查看器,因为后者通常不支持x509认证授权的SSL/TLS加密,而virt-viewer是支持的。
virt-viewer连接到的客户机可以通过客户机的名称、域ID、UUID等表示来唯一指定。virt-viewer还支持“-c URI”或“–connection URI”参数来指定连接到远程宿主机上的一个客户机,当然远程连接时一些必要的认证还是必需的。关于virt-viewer工具更多详细的参数和解释,可以通过“man virt-viewer”命令查看使用手册。
5. virt-install
virt-install是“Virt Install”工具的命令名称和软件包名称。virt-install命令行工具为虚拟客户机的安装提供了一个便捷易用的方式,它也是用libvirt API来创建KVM、Xen、LXC等各种类型的客户机,同时,它也为virt-manager的图形界面创建客户机提供了安装系统的API。virt-install工具使用文本模式的串口控制台和VNC(或SPICE)图形接口,可以支持基于文本模式和图形界面的客户机安装。virt-install中使用到的安装介质(如光盘、ISO文件)可以存放在本地系统上,也可以存放在远程的NFS、HTTP、FTP服务器上。virt-install支持本地的客户机系统,也可以通过“–connect URI”(或“-c URI”)参数来支持在远程宿主机中安装客户机。
6. virt-top
virt-top是一个用于展示虚拟化客户机运行状态和资源使用率的工具,它与Linux系统上常用的“top”工具类似,而且它的许多快捷键和命令行参数的设置都与“top”工具相同。virt-top也是使用libvirt API来获取客户机的运行状态和资源使用情况的,所以只要是libvirt支持的Hypervisor,就可以用virt-top监控该Hypervisor上的客户机状态。
7. libguestfs
libguestfs是用于访问和修改虚拟机的磁盘镜像的一组工具集合。libguestfs提供了访问和编辑客户机中的文件、脚本化修改客户机中的信息、监控磁盘使用和空闲的统计信息、P2V、V2V、创建客户机、克隆客户机、备份磁盘内容、格式化磁盘、调整磁盘大小等非常丰富的功能。libguestfs支持大部分的主流客户机操作系统,如:CentOS、Fedora、Ubuntu、Windows等操作系统;libguestfs除了支持KVM虚拟机,它甚至支持VMware、Hyper-V等非开源的虚拟机。同时,libguestfs还提供了一套C库以方便被链接到自己用C/C++开发的管理程序之中。它还有对其他很多流程编程语言(如:Python)的绑定,让开发者可以方便地使用libgeustfs提供的功能构建自己的虚拟机磁盘镜像管理程序。
libguestfs-tools提供了很多工具,可以分别对应不同的功能和使用场景,如:virt-ls用于列出虚拟机中的文件,virt-copy-in用于往虚拟机中复制文件或目录,virt-copy-out用于从虚拟机往外复制文件或目录,virt-resize用于调整磁盘大小,virt-cat用于显示虚拟机中的一个文件的内容,virt-edit用于编辑虚拟机中的文件,virt-df用于查看虚拟机中文件系统空间使用情况,等等。