一、libvirt简介
libvirt 是一个管理 hypervisor 的上层软件,它通过不同的驱动统一管理不同类型的 hypervisor ,并对外提供统一、稳定的应用程序接口。
在云场景中,业内广泛使用 libvirt 管理大规模的虚拟机。为了方便地对大规模的 StratoVirt 虚拟机进行部署、编排和管理,StratoVirt 标准虚拟化支持对接 libvirt,打通了 libvirt 北向接口。用户可以通过 libvirt 对应的 XML 文件描述一个虚拟机,包括虚拟机名称、CPU、磁盘等。
libvirt是目前使用最为广泛的对kvm虚拟机进行管理的工具和应用程序接口,而且一些常用的虚拟机管理工具(如virsh,virt-install,virt-manager等)和云计算框架平台(QpenStack,OpenNebula,Eucalyptus等)都在底层使用libvirt的应用程序接口。
尽管libvirt项目最初是为Xen支持也是非常得好,libvirt支持多种虚拟化方案,即支持包括KVM,QEMU,Xen,VMware,VirtualBox等在内的平台虚拟化方案,又支持QpenVZ,LXC等linux容器虚拟化系统,还支持用户态linux(UML)的虚拟化。
libvirt提供的要素:
- 它提供统一、稳定、开放的源代码的应用程序接口(API)、守护进程 (libvirtd)和和一个默认命令行管理工具(virsh)。
- 它提供了对虚拟化客户机和它的虚拟化设备、网络和存储的管理。
- 它提供了一套较为稳定的C语言应用程序接口。目前,在其他一些流行的编程语言中也提供了对libvirt的绑定,在Python、Perl、Java、Ruby、PHP、OCaml等高级编程语言中已经有libvirt的程序库可以直接使用。
- 它对多种不同的 Hypervisor 的支持是通过一种基于驱动程序的架构来实现的。libvirt 对不同的 Hypervisor 提供了不同的驱动,包括 Xen 的驱动,对QEMU/KVM 有 QEMU 驱动,VMware 驱动等。在 libvirt 源代码中,可以很容易找到 qemu_driver.c、xen_driver.c、xenapi_driver.c、vmware_driver.c、vbox_driver.c 这样的驱动程序源代码文件。
- 它作为中间适配层,让底层 Hypervisor 对上层用户空间的管理工具是可以做到完全透明的,因为 libvirt 屏蔽了底层各种 Hypervisor 的细节,为上层管理工具提供了一个统一的、较稳定的接口(API)。
- 它使用 XML 来定义各种虚拟机相关的受管理对象。
主要提供的功能:
- 虚拟机生命周期管理:包括不同的领域生命周期操作,比如:启动、停止、暂停、保存、恢复和迁移。支持多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU。
- 本地&&远程访问:通过在本地运行libvirt daemon,本机和远程机器,都可以访问并使用libvirt的功能。远程一般通过简单配置SSH即可。
- 存储管理:除了虚拟机管理,任何运行了libvirt daemon的主机都可以用来管理不同类型的存储:创建不同格式的文件镜像(qcow2、vmdk、raw等)、挂接NFS共享、列出现有的LVM卷组、创建新的LVM卷组和逻辑卷、对未处理过的磁盘设备分区、挂接iSCSI共享等。
- 虚拟网络管理:可以用来管理和创建虚拟网络,管理物理和逻辑的网络接口。
二、libvirt简单架构原理介绍
libvirt架构:
libvirt实施一种驱动程序的架构,该架构允许一种通用的API以通用的方式为大量潜在的虚拟机监控程序提供服务。
libvirt运行原理:
在libvirt中涉及几个重要的概念:
1、节点(