libvirt是用来管理虚拟机或虚拟化功能的软件集合,主要包括:libvirt API,libvirtd进程和virsh工具集三部分。最初的目的是为不同的hypervisor提供统一的管理接口。
The goal of libvirt: to provide a common and stable layer sufficient to securely manage domains on a node, possibly remote。
1. Libvirt API
不同版本的API具体参见:http://libvirt.org/hvsupport.html,主要为不同的虚拟化技术方案对外提供统一的接口,其设计思想为:
(1)isolation from HV API changes - 隔离底层硬件虚拟化接口对上层的影响
(2)portable across HV - 支持多种os,如linux,windows,solairs等
(3)rapid application development - 提供封装的API,加快软件开发的过程
(4)TLS, SASL, SSH, PolicyKit - 提供各种加密协议,保证了上层应用对下层资源的安全访问
通过封装最原始的C库,实现了多种编程语言的接口:Perl, Python, OCaml, Java, Ruby,C#, Php,并对目前在应用层编程中常用的协议进行封装,形成不同的协议库,方便在应用层编程中调用,目前主要支持:
(1)Mapping to CIM/DMTF: libvirt-cim
公共信息模型CIM,是一个与具体实现无关的、用于描述管理信息的概念性模型。
(2)Mapping to AMQP/QMF: libvirt-qmf
AMQP是一个提供统一消息服务的应用层标准协议,是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。
基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。
(3)Mapping to SNMP: libvirt-snmp
该库使得libvirt具备SNMP的功能,开发人员能够通过SNMP来监控和设置每个node上不同domain的信息
(4)Mapping to GObject: libvirt-glib
2. daemon进程(libvirtd )
该后台进程主要实现以下功能:
(1)远程代理
所有remote client发送来的命令,由该进程监测执行
(2)本地环境初始化
libvirt服务的启停,用户connection的响应等
(3)根据环境注册各种Driver(qemu, xen, storage…)的实现
不同虚拟化技术以Driver的形式实现,由于libvirt对外提供的是统一的接口,所以各个Driver就是实现这些接口, 即将Driver注册到libvirt中
3. virsh 工具集
即将libvirt API封装,以Command Line Interface提供的对外接口。
4. libvirt层次体系结构
为了便于理解,将libvirt分为三个层次结构,具体参见下图。
参照上图,来理一下通过virsh命令或接口创建虚拟机实例的代码执行路径:
(1)virsh命令或API接口c创建虚拟机 -- 接口层
virsh create vm.xml 或者 virDomainPtr virDomainCreateXML (virConnectPtr conn, const char * xmlDesc, unsigned int flags)
(2)调用libvirt提供的统一接口 -- 抽象驱动层
conn->driver->domainCreateXML(conn, xmlDesc, flags); //此处的domainCreateXML即抽象的统一接口,这里并不需要关心底层的driver是kvm,还是xen
(3)调用底层的相应虚拟化技术的接口 -- 具体驱动层
domainCreateXML = qemuDomainCreateXML; //如果driver=qemu,那么此处即调用的qemu注册到抽象驱动层上的函数qemuDomainCreateXML
(4)拼装shell命令,并执行
以qemu为例,qemuDomainCreateXML首先会拼装一条创建虚拟机的命令,比如qemu -hda disk.img,然后创建一个新的线程来执行
回过头来思考,libvirt通过4步,将最底层的直接在shell中输入命令来完成的操作进行了抽象封装,给应用程序开发人员提供了统一的,易用的接口。
5. 抽象驱动层
目前,libvirt以下几种类型的抽象驱动,每一种类型的驱动代表某以功能模块的抽象封装:
(1)虚拟化驱动(virDriverPtr)
(2)虚拟网络驱动(virNetworkDriverPtr)
(3)物理网卡驱(virInterfaceDriverPtr)
(4)存储驱动(virStorageDriverPtr)
(5)监控驱动(virDeviceMonitorPtr)
(6)安全驱动(virSecretDriverPtr)
(7)过滤驱动(virNWFilterDriverPtr)
(8)状态驱动(virStateDriverPtr)
分享到:
相关推荐
Qemu KVM and Libvirt Qemu KVM 和 Libvirt 是虚拟化领域中的三个重要概念,分别是虚拟机监控器、内核模块和虚拟机管理工具。本文将对这三个概念进行解析,并探讨它们之间的关系。 虚拟化的基本类型 虚拟化可以...
### Libvirt Qemu KVM 教程大全 #### 虚拟化基本概念与类型 虚拟化技术允许在单一物理主机上运行多个操作系统实例(即虚拟机),这为资源的有效利用提供了新的途径。虚拟化的基本类型包括无虚拟化、半虚拟化、非...
Libvirt是一个强大的开源库,用于管理和控制虚拟化平台,如KVM、Xen、QEMU等。这个PHP管理器利用Libvirt的API来执行各种操作,使非专业用户也能方便地进行虚拟机的日常维护。 该管理系统的核心功能包括: 1. **...
Libvirt虚拟化技术介绍 Libvirt虚拟化技术是当前使用最广泛的对KVM虚拟机进行管理的工具和应用程序接口。Libvirt支持多种虚拟化方案,既支持包括KVM、QEMU、Xen、VMware、VirtualBox等在内的平台虚拟化方案,又支持...
libvirt是Linux下管理虚拟化资源的开放源代码API,它支持KVM、Xen和VMware等虚拟化技术。本文档是《libvirt C语言应用开发指南》的摘录,介绍了如何利用libvirt开发应用程序。文档详细说明了libvirt的架构、对象模型...
《深入理解libvirt-java 0.4.7:构建虚拟化世界的桥梁》 在IT行业中,虚拟化技术已经成为云计算和数据中心基础设施的重要组成部分。libvirt是一个强大的开源库,它为多种虚拟化平台提供了一致的API接口,使得开发者...
**libvirt-snmp 网络管理接口** libvirt-snmp 是一个专为虚拟化环境设计的网络管理接口工具,它允许用户通过简单网络管理协议(SNMP)来监控和管理虚拟机网络流量。该工具提供了对libvirt库的扩展,使SNMP支持成为...
本文档是关于libvirt开发的资料,主要内容涉及使用Python搭建和维护虚拟机环境。libvirt是一个开源API库,它提供了对虚拟化技术如KVM, Xen和QEMU等进行管理的接口。在IT行业中,libvirt库被广泛用于开发和管理虚拟化...
### libvirt-test-API #### 概述 "libvirt-test-API" 是一个专注于虚拟化管理的测试套件项目,主要用于对 `libvirt` 的功能进行回归测试。该项目使用 Python 编写,旨在通过 Python 绑定接口来尽可能覆盖 `libvirt`...
本文档是一份针对使用Python语言进行libvirt应用程序开发的指南。libvirt是一个开源的API,它提供了对虚拟化技术的管理功能。本文将详细介绍libvirt的应用架构、对象模型、驱动模型以及远程管理等关键知识点。读者...
《深入理解libvirt:KVM虚拟化关键技术剖析》 libvirt是开源社区开发的一个强大而灵活的工具,它为管理虚拟化技术提供了一个统一的API接口。libvirt支持多种虚拟化平台,包括KVM(Kernel-based Virtual Machine)、...
《深入解析libvirt0.9.4:虚拟化管理的核心技术》 在IT领域,虚拟化技术已经成为现代数据中心和云计算的基础。libvirt作为一款强大的开源虚拟化管理工具,为多种虚拟化平台提供了统一的API接口,让开发者可以方便地...
在IT行业中,虚拟化技术是不可或缺的一部分,Libvirt作为一个开源的API库,为管理不同虚拟化平台(如KVM、Xen、QEMU等)提供了统一的接口。本篇文章将聚焦于Libvirt创建虚拟机时XML配置文件中的“Domain vcpu numa”...
在IT行业中,libvirt是一个非常重要的工具,它提供了一个API来管理虚拟化平台,如KVM、Xen、QEMU等。Ruby-libvirt是libvirt的Ruby语言绑定,允许开发者用Ruby编写与libvirt交互的程序。然而,在非Linux操作系统上,...
### Libvirt应用开发指南:使用Python #### 一、引言与概述 在《Version-1.1-Libvirt Application Development Guide Using Python-en-US》这一文档中,作者们提供了全面的指南来帮助开发者们理解如何利用Python...
Libvirt 是一个开源项目,提供了一组 API、工具和库,用于管理和控制虚拟化平台。在 OpenStack 环境中,Libvirt 是一个至关重要的组件,它为各种虚拟化技术(如 KVM、Xen、QEMU 和 LXC)提供了统一的接口,使得 ...
**Python库libvirt_vmcfg-0.0.3-py2.py3-none-any.whl详解** `libvirt_vmcfg`是一个针对Python的库,主要用于处理与虚拟化管理相关的配置任务。它允许开发者通过Python接口与libvirt库进行交互,从而实现对虚拟机的...
libvirt-client-0.10.2-62.el6.x86_64.rpm libvirt-client-0.10.2-62.el6.x86_64.rpm
**libvirt源码详解** Libvirt是一个开源的API、库和工具集合,它为管理和配置虚拟化技术提供了统一的接口。这个源码包是版本0.9.11,适用于安装和开发基于libvirt的应用程序。在深入研究libvirt源码之前,我们需要...