三、KVM 管理工具
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 用于查看虚拟机中文件系统空间使用情况,等等。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/75d02bf5b24874fc4e8d51701】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论