KVM虚拟化解决方案系列之KVM管理工具-libvirt介绍篇

KVM作为后起之秀,在公有云Hytervisor市场中占主宰地位,如一大批基于OpenStack二次开发的云厂商。而老牌的商业VMware则在私有云Hytervisor市场中占主宰地位,仍然是各大中小企业搭建私有云的首选,不过目前也受到Hyper-V的挑战。

Hypervisor虚拟化技术有很多种实现方式,如KVM、QEMU、VMware、XEN、HyperV等,而不同的技术也使得他们提供的驱动和API也是多样化的,各不尽相同。如此众多的Hypervisor,有没有一种工具提供一个统一的API接口来统一管理这些Hypervisor,这是云能力的关键。

计算机科学家大卫·惠勒(David Wheeler)有一句名言:“计算机科学中的任何问题都可以通过增加一个中间层来解决。”那么,我们是不是可以通过增加一个中间层,对底层Hypervisor的技术差异进行屏蔽,对上层管理工具提供统一API接口呢。答案是可以的。

Libvirt正是这样的一个工具,Libvirt通过在底层Hypervisor和上层管理工具之间提供一个中间层。Libvirt作为一个中间层,对底层统一封装不同虚拟机,对上层管理工具提供统一的API,从而方便地实现了对虚拟机的管理,其体系架构如图1所示。

KVM虚拟化解决方案系列之KVM管理工具-libvirt介绍篇_第1张图片

图1. Libvirt体系架构

为避免使用的术语产生歧义,以下是 libvirt 文档中使用的一些特定概念的定义:

概念 定义
节点(Node) 是指一台物理机,Hypervisor和域都运行在节点上;
Hypervisor 是指虚拟化软件层,也称为虚拟机监控器,通过虚拟化一个节点,让其可以运行多个虚拟机;
域(Domain) 是一个运行在Hypervisor上的操作系统实例,通常是指虚拟机;

节点、Hypervisor和域之间的关系可以简单地使用图2来表示。

KVM虚拟化解决方案系列之KVM管理工具-libvirt介绍篇_第2张图片

图2. 节点、Hypervisor和域之间的关系

1. Libvirt简介

1.1. Libvirt开源软件

Libvirt是一个免费的开源的软件,使用的许可证是LGPL,使用libvirt API库进行调用的软件程序不一定要选择开源和遵守GPL许可证。

Libvirt是一组软件集合,是用于管理虚拟化平台的API、守护进程和管理工具。

Libvirt可实现对虚拟机管理,对虚拟化网络和存储的管理。

1.2. libvirt主要目标

Libvirt的主要目标是为底层各种Hypervisor提供一套统一的API,让上层的管理工具可以用一种单一的方式来管理多种不同的虚拟化技术。

1.3. libvirt主要组成

Libvirt的主要组成有三部分,包括一个长期稳定的C语言API库、一个守护进程(libvirtd)和一个默认命令行工具(virsh)。

Libvirt API是为其他虚拟机管理工具(如virsh、virt-manager等)提供虚拟机管理的软件库支持。

Libvirtd守护进程负责执行对节点上的域的管理工作,virsh、virt-manager等管理工具都需要依靠libvirtd守护进程来间接访问Hypervisor及配置文件,所以这个守护进程一定要处于运行状态,如果关闭这个进程,那么virsh、virt-manager等管理工具将不能使用。

Virsh是libvirt开源项目中默认的对虚拟机管理的一个命令行工具,后续章节中将会详细介绍。

1.4. libvirt主要功能

Libvirt 的主要功能包含如下五个部分:

  1. 域的管理,各种虚拟机生命周期的操作,如:启动、停止、暂停、保存、恢复和迁移等;多种不同类型设备的热插拔操作,包括磁盘、网络接口、内存、CPU等。
  2. 远程连接,libvirt的所有功能都可以在运行着libvirtd守护进程的机器上执行,包括远程的物理节点。libvirt支持多种远程网络连接方式,如SSH、TCP套字、TLS的加密传输等。
  3. 存储管理,任何运行libvirtd守护进程的节点都可以通过libvirt来管理不同类型的存储,如创建不同类型的文件镜像(qcow2,vmdk,raw,qde,vmdk等),挂载NFS共享,查看现有LVM卷组,创建新的LVM卷组和逻辑卷,对磁盘设备分区,挂载iSCSI共享,使用Ceph系统支持的RDB远程存储等等。在libvirt中,对存储的管理也是支持远程管理方式的。
  4. 网络管理,任何运行libvirtd守护进程的节点都可以通过libvirt来管理物理的和逻辑的网络接口,查看现有网络接口,配置网络接口,网桥管理、VLAN管理以及端口绑定等。
  5. 基于虚拟NAT和路由的网络,任何运行libvirtd守护进程的节点都可以通过libvirt来管理和创建虚拟网络。libvirt虚拟网络使用防火墙规则实现一个路由器,为虚拟机提供到主机网络的透明访问。

1.5. libvirt语言绑定

Libvirt支持多种语言包,包括C、C++、C#、Go、Java、OCaml、Perl、PHP、Python、Ruby、D-Bus等语言,非常方便开发集成。

1.6. libvirt支持的虚拟化

Libvirt支持多种虚拟化技术,包括KVM、QEMU、Xen、VMware、VirtualBox、Hyper-V等平台虚拟化,也包括OpenVZ、LXC等容器虚拟化。

1.7. libvirt支持的操作系统

Libvirt支持多种操作系统,包括Linux,FreeBSD,Windows和OS-X等操作系统。

2. Libvirt管理工具介绍

Libvirt目前已被业界广泛使用,基于Libvirt API的管理工具包括命令行工具、图形化工具、Web管理工具、云管理平台工具等,如图1所示。

2.1. 基于libvirt API的命令行工具

根据libvirt官方网站的显示,基于libvirt API的命令行工具统计如表1所示。

表1. 基于libvirt API的命令行工具

名称 释义
guestfish Guestfish是一个交互式shell和命令行工具,用于检查和修改虚拟机文件系统。它使用libvirt来查找虚拟机及其关联的磁盘。
virsh Virsh是交互式shell和批处理脚本化工具,可用于域、网络和存储的管理工作,是libvirt核心发行版的一部分。
virt-clone 允许克隆现有虚拟机的磁盘映像和配置以形成新的虚拟机。它自动将数据复制到新的磁盘映像,并更新配置中的 UUID、MAC 地址和名称。
virt-df 检查虚拟机中每个文件系统的利用率。此工具查看虚拟机磁盘并确定使用了多少空间,它可以处理常见的Linux文件系统和LVM卷。
virt-image 提供一种部署虚拟设备的方法。在libvirt中,虚拟机(即域)的配置是采用一种可移植的XML格式来描述的,在部署时,虚拟机的配置被转换为XML格式。
virt-install 为虚拟机的安装提供了一个便捷易用的方式,支持通过光盘、ISO镜像的本地配置方式,也支持通过NFS、HTTP和FTP的远程配置方式。
virt-top 是一个用于展示虚拟机运行状态和资源使用率的工具,如CPU、内存、网络和磁盘利用率等。
virt-what 用于检测虚拟化平台类型的shell脚本,可以检测出 QEMU/KVM、VMware、Hyper-V、VirtualBox、OpenVZ/Virtuozzo、Xen、LXC、IBM PowerVM 以及 Parallels 等平台类型。
stap SystemTap 是监控和跟踪运行中的Linux 内核的操作的动态方法,从2.4版本开始,前端应用程序stap可以通过libvirt去搜集虚拟机的数据
vagrant-libvirt Vagrant-Libvirt是一个Vagrant插件,它通过libvirt来管理虚拟机,它是面向开发人员的命令行工具,可以非常快速和轻松地部署和重新部署虚拟机环境。
virt-lightning Virt-Lightning通过libvirt、cloud-init和libguestfs来允许任何人快速启动新的虚拟机,它非常像容器CLI,但带有虚拟机。

2.2. 基于libvirt API的迁移工具

根据libvirt官方网站的显示,基于libvirt API的迁移工具统计如表2所示。

表2. 基于libvirt API的迁移工具

名称 释义
virt-p2v P2V迁移是物理机到虚拟机的迁移。则virt-p2v迁移是物理机到KVM虚拟机的迁移,virt-p2v这个工具包含在 libguestfs 中。
virt-v2v V2V迁移是不同虚拟化环境之间的迁移。则virt-v2v迁移是虚拟机(Xen、VMware)->KVM虚拟机,virt-p2v这个工具包含在 libguestfs 中。
vmware2libvirt 作为virt-goodies包的一部分,vmware2libvirt 是一个 Python 脚本,用于将 vmware 映像迁移到 libvirt。

2.3. 基于libvirt API的图形化工具

根据libvirt官方网站的显示,基于libvirt API的图形化工具统计如表3所示。

表3. 基于libvirt API的图形化工具

名称 释义
virt-manager 是一个通用桌面管理工具,能够跨本地和远程访问管理虚拟机,它主要针对个人和小型办公室场景使用,最多可管理10-20台主机及主机的虚拟机。
virt-v2v V2V迁移是不同虚拟化环境之间的迁移。则virt-v2v迁移是虚拟机(Xen、VMware)->KVM虚拟机,virt-p2v这个工具包含在 libguestfs 中。
virt-viewer 是一个显示虚拟机的图形化界面工具,使用GTK-VNC或SPICE-GTK协议,使用libvirt API去查询虚拟机的VNC或SPICE服务器端信息。常用于替换传统的VNC客户端查看器,因为后者通常不支持x509认证授权的SSL/TLS加密,而virt-viewer是支持的。
qt-virt-manager 用于创建和控制 VM、另一个虚拟实体(又名网络、存储、接口、机密、网络过滤器)的Qt GUI。集成了LXC/SPICE/VNC 的查看器,用于访问与虚拟机或容器关联的文本控制台。
qt-remote-viewer 用于访问远程桌面或虚拟机的Qt VNC/SPICE查看器。

2.4. IaaS云计算管理平台工具

根据libvirt官方网站的显示,基于libvirt API的IaaS云计算管理平台工具统计如表4所示。

表4. 基于libvirt API的IaaS云计算管理平台工具

名称 释义
Cracow Cloud One CC1系统为私有云计算提供了完整的解决方案。带有管理模块和简单安装程序的直观Web访问界面使您可以轻松受益于私有云计算技术。
Eucalyptus Eucalyptus 是一个开源的,与AWS兼容的,本地部署的IaaS云软件平台。Eucalyptus使用libvirt 虚拟化 API直接与 Xen 和 KVM 管理程序交互。
Nimbus Nimbus是一个开源工具包,专注于为科学界提供IaaS功能,它使用libvirt与所有KVM和Xen虚拟机进行通信。
Snooze Snooze是一个开源的、可扩展的、自动化的、节能的虚拟机管理框架,主要用于私有云。Snooze使用libvirt API实现虚拟机的监控、实时迁移和生命周期管理。
OpenStack CC1系统为私有云计算提供了完整的解决方案。带有管理模块和简单安装程序的直观Web访问界面使您可以轻松受益于私有云计算技术。
Cracow Cloud One OpenStack是一个“云操作系统”,可用于公共云和私有云。它的各个部分负责计算、存储和网络资源,并使用仪表板与用户交互。计算部分使用libvirt来实现 虚拟机的监控、生命周期等的管理。
KubeVirt KubeVirt是个Kubernetes的一个虚拟机管理插件,使其在原本调度容器之余能够并行调度传统虚拟机。
Cherrypop Cherrypop是一个去中心化的云软件,节点自动检测其他节点并自动分配虚拟机和工作负载,宿主机也没有最低限制,非常适合在低端服务器架设云。
ZStack ZStack是一款开源IaaS软件,旨在通过使用API自动管理数据中心内的所有资源(计算、存储、网络等),从而符合软件定义数据中心的原则。ZStack 在管理方面的主要优势是可扩展性、性能和快速、用户友好的部署。

2.5. 软件库工具

根据libvirt官方网站的显示,基于libvirt API的软件库工具统计如表5所示。

表5. 基于libvirt API的库工具

名称 释义
libguestfs Libguestfs是用于访问和修改虚拟机磁盘镜像的一组工具集,它提供了访问和编辑虚拟机中的文件、脚本化修改虚拟机中的信息、监控磁盘使用和空闲的统计信息、P2V、V2V等丰富的功能。
libvirt-sandbox 一个库和命令行工具,用于简化虚拟化沙箱的创建,目前支持 KVM、QEMU 或 LXC 作为后端,与 systemd 的集成有助于对 apache 等系统服务进行沙箱化。
Ruby Libvirt Object bindings 允许使用简单的 ruby 对象来操作管理程序、访客、存储、网络等。它基于本地 ruby 绑定。

2.6. 监控工具

根据libvirt官方网站的显示,基于libvirt API的监控工具统计如表6所示。

表6. 基于libvirt API的监控工具

名称 释义
collectd Libvirt-plugin是collectd的一部分,并收集统计虚拟机操作系统信息。通过这种方式,可以搜集每个虚拟机的CPU、网络接口和块设备使用情况,而无需在虚拟机系统上安装collectd。
host sFlow Host sFlow是一个在KVM管理程序上运行的轻量级代理,它链接到libvirt库并导出所有虚拟机的标准化CPU、内存、网络和磁盘指标。
munin Guido Günther提供的插件允许使用Munin监控各种事物,例如网络和阻止 I/O。
nagios-virt Nagios-virt是一个配置工具,用于向Nagios添加对虚拟化域的监控。您可以使用此工具为Xen或QEMU/KVM虚拟机设置新的Nagios安装,或者与现有的Nagios 安装集成。
PCP PCP libvirt PMDA(插件)是PCP工具包的一部分,提供虚拟机管理程序和虚拟机信息以及完整的虚拟机性能指标集。它支持每个虚拟机的pCPU、vCPU、内存、块设备、网络接口和性能事件指标。

2.7. Web管理工具

根据libvirt官方网站的显示,基于libvirt API的Web管理工具统计如表7所示。

表7. 基于libvirt API的Web管理工具

名称 释义
AbiCloud AbiCloud是一个开源云平台管理器,允许在您的数据中心轻松部署私有云。AbiCloud的主要区别之一是用于管理基础架构的丰富的网络界面,您只需拖放 虚拟机即可部署新服务。
Kimchi Kimchi是一个基于HTML5的KVM管理工具。它旨在尽可能简单地使用KVM并创建您的第一个虚拟机。Kimchi通过libvirt管理KVM虚拟机,使用支持HTML5的浏览器通过Web访问管理界面。
oVirt oVirt是一个私有云平台软件,提供了中型规模集群主机管理能力,可做服务器虚拟化,也可桌面虚拟化。
VMmanager VMmanager是一种用于虚拟化管理的软件解决方案,可用于托管虚拟机和构建云。VMmanager不仅可以管理一台服务器,还可以管理大型虚拟机管理程序集群。它提供了许多功能,例如允许在集群节点之间进行负载平衡的实时迁移、监控 CPU、内存。
mist.io Mist.io是一个开源项目和服务,可以帮助您以统一的方式管理您的虚拟机,为您的所有基础架构(多个公共云提供商、基于OpenStack的公共/私有云、Docker 服务器、裸机服务器和现在的 KVM 管理程序)。
Ravada Ravada是用于管理虚拟桌面基础架构(VDI)的开源工具。它非常容易安装和使用。按照文档,您将在几分钟内准备好部署虚拟机。对用户的唯一要求是Web浏览器和轻量级远程查看器。

3. Libvirt API介绍

Libvirt的核心功能就是提供一套统一的API用来管理虚拟机,libvirt API主要划分为五个大类,如图3所示。

KVM虚拟化解决方案系列之KVM管理工具-libvirt介绍篇_第3张图片

图3. libvirt API类型

  • virConnectPtr
    表示与Hypervisor建立连接,通过调用virConnectOpen函数实现与Hypervisor建立连接,建立连接之后,就可以对该Hypervisor的虚拟机进行管理操作。连接Hypervisor的API是其他所有API使用的前提条件。
  • virConnectPtr
    代表一个活动的或定义的域(即作为永久配置文件和存储存在,但当前未在该节点上运行)。要管理域,首先要获取virConnectPtr这个域对象,然后才能对域进行操作。获取到virConnectPtr这个域对象之后,就可以进行域查询、域生命周期控制等操作。
  • virNetworkPtr
    代表一个活动的或定义的网络(即作为永久配置文件和存储存在但当前未激活)。libvirt首先需要创建virNetworkPtr对象,然后才能查询或控制虚拟网络。
  • virStorageVolPtr
    表示一个存储卷,通常用域的块设备,即镜像文件。libvirt对存储卷(volume)的管理主要是对域的镜像文件的管理,这些镜像文件的格式包括raw、qcow2、vmdk、qed等。libvirt对存储卷的管理,首先需要创建virStorageVolPtr这个存储卷对象,然后才能对其进行查询或控制操作。
  • virStoragePoolPtr
    代表一个存储池,它是一个用于分配和存储存储卷的逻辑区域。libvirt对存储池(pool)的管理包括对本地的基本文件系统、普通网络共享文件系统、iSCSI共享文件系统、LVM分区等的管理。libvirt需要基于virStoragePoolPtr这个存储池对象才能进行查询和控制操作。

你可能感兴趣的:(Linux虚拟化随笔,linux,云计算)