本文内容部分取自《KVM实战 —— 原理、进阶与性能调优》的“4.1.1 libvirt简介”。这本书是非常好的一本书。

1. 概述

提到KVM的管理工具,首先必须要介绍的无疑是大名鼎鼎的libvirt。libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口。并且,一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager、virt-viewer等)和云计算框架平台(如OpenStack、ZStack、OpenNebula、Eucayptus等)都在底层使用libvirt的应用程序接口。

libvirt是为了更方便地管理平台虚拟化技术而设计的开放源代码(开源)的应用程序接口、守护进程和管理工具。它不仅提供了对虚拟化客户机的管理,也提供了对虚拟化网络和存储的管理。libvirt支持多种虚拟化方案,既支持包括KVM、QEMU、Xen、VMWare、VirtualBox、Hyper-V等在内的平台虚拟化方案,也支持OpenVZ、LXC等Linyx容器虚拟化系统,还支持用户态Linux(UML)的虚拟化。libvirt是一个免费的开源的软件,使用的许可证是LGPL(GNU宽松的通用公共许可证),这表明使用libvirt库进行链接的软件不一定要选择开源和遵守GPL许可证。

和KVM、Xen等开源项目类似,libvirt也有自己的开发者社区,而且随着虚拟化、云计算等成为近年来的技术热点,libvirt项目的社区也比较活跃。目前,libvirt的开发主要由Redhat公司作为强大的支持。由于红帽公司在虚拟化方面逐渐偏向于支持KVM(而不是Xen),故libvirt对QEMU/KVM的支持是非常成熟和稳定的。当然,IBM、Novell等公司以及众多的个人开发者对libvirt项目的代码贡献量也是非常大的。

libvirt本身提供了一套较为稳定的C语言应用程序接口。目前,在其它一些流行的编程语言中也提供了对libvirt的绑定,在Python、Perl、Java、Ruby、PHP、OCaml等高级编程语言中已经有libvirt的程序库可以直接使用。libvirt还提供了为基于AMQP(高级消息队列协议)的消息系统(如Apache Qpid)提供QMF代理,这可以让云计算管理系统中宿主机与客户机、客户机与客户机之间的消息通信变得更易于实现。libvirt还为安全地远程管理虚拟客户机提供了加密和认证等安全措施。正是由于 libvirt拥有这些强大的功能和较为稳定的应用程序接口,而且其许可证(License)也比较宽松,所以libvirt的应用程序接口已被广泛地用在基于虚拟化和云计算的解决方案中,主要作为连接底层Hypervisor和上层应用程序的一个中间适配层。

libvirt对多种不同的Hypervisor的支持是通过一种基于驱动程序的架构来实现的。libvirt对不同的Hypervisor提供了不同的驱动:对Xen有Xen的驱动、对QEMU/KVM有QEMU驱动、对VMware有VMware驱动。在libvirt源代码中,可以很容易找到qemu_driver.c、xen_driver.c、xenapi_driver.c、VMware_driver.c、vbox_driver.c这样的驱动程序源代码文件。

libvirt作为中间适配层,可以让底层Hypervisor对上层用户空间的管理工具是完全透明的,因为libvirt屏蔽了底层各种Hypervisor的细节,为上层管理工具提供了一个统一的、较稳定的接口(API)。通过libvirt,一些用户空间管理工具可以管理各种不同的Hypervisor和其上运行的客户机。

用户空间管理工具、libvirt、各种Hypervisor之间的基本交互框架如下图所示:

2. 重要概念

libvirt中涉及以下几个重要的概念,解释如下:

  • 结点(Node)

一个物理机器,上面可能运行着多个虚拟客户机。Hypervisor和Domain都运行在结点上。

  • 虚拟机监控器(Hypervisor)

Hypervisor也称虚拟机监控器(VMM),如KVM、Xen、VMware、Hyper-V等,是虚拟化中的一个底层软件层,它可以虚拟化一个结点,让其运行多个虚拟客户机(不同客户机可以有不同的配置和操作系统)。

  • 域(Domain)

在Hypervisor上运行的一个客户机操作系统实例。域也被称为实例(instance)、客户机操作系统(guest OS)、虚拟机(virtual machine),它们都是指同一个概念。

Node、Hypervisor和Domain的关系简图如下所示:

3. 组成部分

libvirt主要由3部分组成,分别是:应用程序编程接口库、一个守护进程(libvirtd)和一个默认命令行管理工具(virsh)。

  • 应用程序接口

为其它虚拟机管理工具(如virsh、virt-manager等)提供虚拟机管理的程序库支持。

  • libvirtd守护进程

负责执行对结点上的域的管理工作。在用各种工具对虚拟机进行管理时,这个守护进程一定要处于运行状态中。守护进程可以分为两种:一种是root权限的libvirtd,其权限较大,可以完成所有支持的管理工作;另一种是普通用户权限的libvirtd,只能完成比较受限的管理工作。

  • virsh

virsh是libvirt项目中默认的对虚拟机进行管理的一个命令行工具。

4. 目标和管理功能

libvirt的目标用一句话概括,那就是:为了安全高效地管理(既包括本地的管理也包括远程的 管理)结点上的各个域而提供一个公共稳定的软件层。

具体来讲,libvirt的管理功能主要包含以下5个部分:

  • 域管理
  • 远程结点管理
  • 存储管理
  • 网络管理
  • 提供一个稳定、可靠、高效的应用程序接口,以便可以完成前面的4个管理功能

libvirt零知识学习1 —— libvirt简介相关推荐

  1. libvirt零知识学习6 —— libvirt源码编译安装(4)

    接前一篇文章libvirt零知识学习5 -- libvirt源码编译安装(3) 上一篇文章中解决了YAJL包的编译时依赖问题.但是在解决后再次执行meson build时又遇到了新的错误"E ...

  2. libvirt零知识学习3 —— libvirt源码编译安装(1)

    接前一篇文章libvirt零知识学习2 -- libvirt源码下载 上一篇文章中详细介绍了libvirt的源码下载过程,下载了libvirt-8.10.tar.xz并解压.本文在前文的基础上进行源码 ...

  3. libvirt零知识学习4 —— libvirt源码编译安装(2)

    接前一篇文章libvirt零知识学习3 -- libvirt源码编译安装(1) 上一篇文章中讲到执行以下构建命令时出现了错误"ERROR: Problem encountered: YAJL ...

  4. libvirt零知识学习2 —— libvirt源码下载

    1. libvirt官网主页 libvirt的官网地址为: https://libvirt.org/ 主页如下图所示: 2. libvirt官网下载主页 libvirt的官网下载页地址为(在主页中点击 ...

  5. SELinux零知识学习六、swig源码下载、编译和安装

    接前一篇文章:SELinux零知识学习五.libcap-ng源码下载.编译和安装 在前篇文章中编译libcap-ng源码时,出现了如下错误: swig -o capng_wrap.c -python ...

  6. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图 ...

  7. DL:深度学习(神经网络)的简介、基础知识(神经元/感知机、训练策略、预测原理)、算法分类、经典案例应用之详细攻略

    DL:深度学习(神经网络)的简介.基础知识(神经元/感知机.训练策略.预测原理).算法分类.经典案例应用之详细攻略 目录 深度学习(神经网络)的简介 1.深度学习浪潮兴起的三大因素 深度学习(神经网络 ...

  8. 深度学习及TensorFlow简介

    深度学习及TensorFlow简介 深度学习目前已经被应用到图像识别,语音识别,自然语言处理,机器翻译等场景并取得了很好的行业应用效果.至今已有数种深度学习框架,如TensorFlow.Caffe.T ...

  9. SELinux零知识学习四、Audit应用层源码下载、编译和安装

    接前一篇文章:SELinux零知识学习三.SELinux应用层源码下载.编译和安装 在前篇文章中编译SELinux源码时,出现了如下错误: seusers_local.c:11:10: 致命错误:li ...

最新文章

  1. 「Java基本功」一文读懂Java内部类的用法和原理
  2. 数据绑定控件之Repeater
  3. 每个程序员都应该知道的8个Linux命令
  4. C++下关于XML开源库的使用
  5. javascript showModalDialog,open取得父窗口的方法
  6. SpringBoot-Security 具体案例、 实现安全框架、权限控制、aop切入
  7. .Net 实用技术收藏!!!
  8. mysql.h 动态编译命令_Linux环境编译动态库和静态库总结
  9. php截取字符串后编码不对,php截取字符串出现中文乱码问题的解决
  10. java 分布式任务队列_cerely-分布式异步任务队列
  11. docker入门2---docker的初体验
  12. 计算机游戏41,Win7玩游戏提示“无法启动此程序,计算机中丢失d3dx9-41.dll”怎么办...
  13. mysql native筛选_Navicat远程连接MySQL8,必知防坑策略
  14. 用C#.NET编写软件注册机
  15. 唐人笔+手写板连接到计算机usb端口+错误,汉王唐人笔如意驱动
  16. Windows server2012R2 企业内部搭建虚拟专用网络服务
  17. Python 获取LOL所有英雄的传说
  18. iPhone 开发常用工具
  19. oppoa11android版本是什么,oppoa11x处理器是什么?oppoA11x配置介绍
  20. 输出数值类型的算法评价指标

热门文章

  1. 可塑性记忆——写在大一之后
  2. 当年的试用期周工作心得
  3. 来述说为啥我要学linux系统?
  4. mysql是怎样工作的_六星教育揭秘一个真实的MySQL,述说它能给工作带来怎样的便利?...
  5. 移动开发工具包Mobile Toolkit Volum 2发布
  6. (编曲乐理)用理性思维学乐理(一)—入门基础乐理
  7. 编译工具之makefile的常用函数
  8. 记一次坎坷的调试|Mosquitto通过TLS连接EMQ时阻塞的问题
  9. 建设移动统一消息管理中心
  10. unfold用于图像分割