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

2023-05-16

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所示。

在这里插入图片描述

图1. Libvirt体系架构

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

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

节点、Hypervisor和域之间的关系可以简单地使用图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的命令行工具

名称释义
guestfishGuestfish是一个交互式shell和命令行工具,用于检查和修改虚拟机文件系统。它使用libvirt来查找虚拟机及其关联的磁盘。
virshVirsh是交互式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 等平台类型。
stapSystemTap 是监控和跟踪运行中的Linux 内核的操作的动态方法,从2.4版本开始,前端应用程序stap可以通过libvirt去搜集虚拟机的数据
vagrant-libvirtVagrant-Libvirt是一个Vagrant插件,它通过libvirt来管理虚拟机,它是面向开发人员的命令行工具,可以非常快速和轻松地部署和重新部署虚拟机环境。
virt-lightningVirt-Lightning通过libvirt、cloud-init和libguestfs来允许任何人快速启动新的虚拟机,它非常像容器CLI,但带有虚拟机。

2.2. 基于libvirt API的迁移工具

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

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

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

2.5. 软件库工具

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

表5. 基于libvirt API的库工具

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

2.6. 监控工具

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

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

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

2.7. Web管理工具

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

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

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

3. Libvirt API介绍

Libvirt的核心功能就是提供一套统一的API用来管理虚拟机,libvirt API主要划分为五个大类,如图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这个存储池对象才能进行查询和控制操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 如何求两个正整数最大公约数和最小公倍数。

    面试题目 xff1a 输入两个正整数 m 和 n xff0c 求其最大公约数和最小公倍数 在循环中 xff0c 只要除数不等于 0 xff0c 用较大数除以较小的数 xff0c 将小的一个数作为下一轮循环的大数 xff0c 取得的余数作为下
  • windows远程登录 ubuntu Linux 系统及互连共享桌面

    预备工作 开启防火墙端口 sudo ufw allow 3389 安装ssh sudo apt get install openssh server 一 windows直连Ubuntu16 04共享桌面 1 打开终端 xff0c 安装xrd
  • windows soci库编译

    SOCI SOCI是一个C 43 43 库 xff0c 用来访问数据库 githu链接点击这里 这个库需要通过源码编译 xff0c 有对数据库client的依赖 xff0c 所以本地需要安装了的需要的数据库client SOCI支持的数据库
  • 使用冒泡法对十个整数进行排序

    输入10个整数 xff0c 将它们从小到大排序后输出 xff0c 使用冒泡排序算法 span class token macro property span class token directive hash span span clas
  • c++ new运算符是如何调用构造函数的

    文章目录 内存申请和对象构造placement new答案很简单参考链接 内存申请和对象构造 本文内容简短 xff0c 只为记录下一次思考过程 xff0c 事情起源于一句话 xff0c new操作符会调用operator new分配内存再调
  • VS2015报错LNK2001 "public: virtual struct QMetaObject const...

    在VS2015中C 43 43 项目会出现报错 xff0c 我的错误是以下三个外部命令 1 LNK2001 34 public virtual struct QMetaObject const cdecl UTMUI metaObject
  • VS2015报错 无法打开python37_d.lib文件

    这个问题百度了很多次 xff0c 为了解决走了完了 xff0c 也让我更了解VS的Release和Debug VS的2015的Debug需要在属性 链接器 输入 附加依赖器里面写的是python37 d lib 而Relase里写的是pyt
  • ASM1053E ASM1153E对比

    转自https www chiphell com thread 1586025 1 1 html 市面上的SATA转USB3 0解决方案五花八门 xff0c 作为消费者有时候被厂家的宣传搞得晕头转向 xff0c 而一个核心主控好坏直接决定产
  • 普通门禁卡及各类复制卡相关知识

    转自 xff1a https nfctool cn 42 本文带你了解M1卡的数据结构 xff0c 为以后的破解提供理论基础 同时带你了解各种IC卡 xff0c 让你对破解和复制有更清晰的目标 请注意 xff0c ID卡没有密码 xff0c
  • NVIDIA Jetson TX2 更新软件源

    1 xff0c 确定系统版本 ubuntu14 04是trusty xff0c ubuntu16 04是xenial 2 xff0c 先备份原文件sources list xff0c 防止误操作后无法恢复 将原来的内容使用 符号全部注释掉
  • 查看上次安装 Archlinux 的日期

    0x00 前言 刚刚接触到 Archlinux 的时候 xff0c 大家都说这个系统容易挂 xff0c 然而用到现在我也没重装过几回 如何查看上次安装 Archlinux 是什么时候呢 xff1f 下面给出几种方法 0x01 方法 查看文件
  • Ubuntu中文字符显示问题

    文件夹名字无法显示中文 我也不知道到底怎么解决的 xff0c 大概最后是执行了以下 xff0c 就莫名其妙好了 sudo apt install ttf mscorefonts installer y sudo dpkg configure
  • 用户不在sudoers文件中的解决方法&…

    在使用Linux系统过程中 xff0c 通常情况下 xff0c 我们都会使用普通用户进行日常操作 xff0c 而root用户只有在权限分配及系统设置时才会使用 xff0c 而root用户 的密码也不可能公开 普通用户执行到系统程序时 xff
  • Proxmox VE与常见的虚拟化平台比较

    1 Proxmox VE的简要介绍 Proxmox VE的简要介绍 根据Proxmox VE的官网介绍 xff0c Proxmox Virtual Environment xff08 简称Prxomox VE或PVE xff09 由位于奥地
  • Proxmox VE与常见的私有云方案比较(中)

    2 2 SmartX私有云解决方案 SmartX这家公司挺有意思的 xff0c SmartX 是番文的叫法 xff0c 这家公司好像不愿意或者是有意不让人知道他的中文名称叫啥 xff0c 不知道这是不是传说中的卑于内而媚于外 你翻遍了Sma
  • Proxmox VE 7.0的高级安装及系统盘分区-ZFS(中)

    2 2 ZFS文件系统安装方式 从Proxmox VE 3 4开始 xff0c Proxmox VE增加了ZFS文件系统作为可选的文件系统和根文件系统 Proxmox VE官方提供的ISO镜像已经集成了ZFS所需的软件包 xff0c 用户无
  • Proxmox VE逻辑卷管理LVM详解(1-4)

    Proxmox VE基于Debian Linux操作系统 xff0c 也就是说Linux操作系统的逻辑卷管理LVM在Proxmox VE也是适用的 当我们在使用Proxmox VE的时候 xff0c 如果发现某个分区的容量不够用了 xff0
  • KVM虚拟化解决方案系列之KVM部署篇(4-4)

    5 2 Ubuntu上安装虚拟机 Ubuntu上安装虚拟机的过程与CentOS上类似 xff0c 这里我也简单讲一下 第一步 xff0c 创建虚机镜像文件 使用命令 qemu img 创建一个空白的虚拟机镜像 xff0c 格式为qcow2
  • KVM虚拟化解决方案系列之KVM管理工具-绪论篇

    我们在 KVM虚拟化解决方案系列之KVM架构篇 有讲到两个重要的内容 xff0c 一个内容是 要实现一个可运行 可运维的KVM虚拟化解决方案 xff0c 需要解决两个问题 xff0c 第一个是虚拟化技术实现问题 xff0c 第二个是集群虚拟
  • KVM虚拟化解决方案系列之KVM管理工具-libvirt介绍篇

    KVM作为后起之秀 xff0c 在公有云Hytervisor市场中占主宰地位 xff0c 如一大批基于OpenStack二次开发的云厂商 而老牌的商业VMware则在私有云Hytervisor市场中占主宰地位 xff0c 仍然是各大中小企业