Libvirt基本介绍
Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具。
- 一个API库,一个守护进程(Libvirtd),和一个命令行实用程序(virsh)。
- 支持语言C,C++,Python,Perl,Ruby,,java,JavaScript,php等语言。
- 对不同的 Hypervisor 提供不同的驱动。
- 使用 XML 来定义各种虚拟机相关的受管理对象。
为什么需要Libvirt?
- Hypervisor 种类众多,没有统一的编程接口。
- 没有统一的方式定义虚拟机相关的各种可管理对象。
Libvirt体系架构: 图1 使用Libvirt前后的虚拟机管理方式
libvirt的功能有哪些?
- 虚拟机管理:启动、停止、暂停、保存、恢复和迁移等;磁盘、网卡、内存和CPU等多种设备的热拔插。
- 远程机器支持:远程机器上运行libvirtd,则所有的libvirt功能都可访问和使用。
- 存储管理:任何运行了libvirtd的主机都可以管理不同类型的文件:qcow2、vmdk、raw、NFS、LVM、磁盘设备分区、iSCSI等。
- 网络接口管理:任何运行了libvirtd的主机都可以管理物理和逻辑的网络接口。
- 虚拟网络:任何运行了libvirt daemon的主机都可以用来管理和创建虚拟网络。
Virsh基本介绍
libvirt项目的源代码中就包含了virsh这个虚拟化管理工具的代码。virsh是用于管理虚拟化环境中的客户机和Hypervisor的命令行工具,与virt-manager等工具类似,它也是通过调用libvirt API来实现虚拟化的管理的。virsh是完全在命令行文本模式下运行的用户态工具,它是系统管理员通过脚本程序实现虚拟化自动部署和管理的理想工具之一。
Virsh的常用命令
动作 | 命令 |
创建虚拟机,并安装OS | virt-install |
根据xml文件创建虚拟机相关 | virsh create *.xml |
virsh define *.xml | |
virsh undefine | |
virsh dumpxml * | |
关闭domain | virsh destroy * |
virsh shutdown * | |
vrish reboot * | |
开启domain | virsh start * |
删除domain | virsh undefine * |
连接domain | virsh console * |
Ctrl+] #退出 | |
列出domain | virsh list |
virsh list --all | |
附加或拆除disk | virsh attach-disk * |
附加或拆除网卡 | virsh attach-interface * |
virsh detach-interface * | |
调整cpu | virsh setvcpus * num |
调整内存 | virsh setmem * num |
保存状态至磁盘文件 | virsh save * |
从磁盘文件恢复 | virsh restore * |
暂停于内存或继续运行 | virsh suspend * |
virsh resume * | |
Libvirt API
libvirt API可划分为8个部分:连接 API、域 API、节点 API、网络 API、存储卷 API 、存储池 API、事件API、数据流API。
1、连接 API:以virConnect 开头的一系列函数
virConnectPtr virConnectOpen
virConnectGetHostname
virConnectClose
2、域 API:以virDomain 开头的一系列函数
virDomainGetInfo
virDomainCreate
virDomainDefineXML()
3、节点 API:以virNode 开头的一系列函数
virNodeGetInfo
virNodeGetCPUStats
virNodeSuspendForDuration
4、网络 API:以 virNetwork 开头的一系列函数和部分以 virInterface 开头的函数
virNetworkGetName(virNetworkPtr network)
virNetworkIsActive
virNetworkDestroy
virInterfaceCreate
5、存储卷 API :以 virStorageVol 开头的一系列函数
virStorageVolGetInfo
virStorageVolGetConnect
virStorageVolCreateXML
virStorageVolFree
6、存储池 API:以virStoragePool 开头的一系列函数
virStoragePoolLookupByName
virStoragePoolCreateXML
virStoragePoolDefineXML
virStoragePoolCreate
7、事件管理的API:以virEvent 开头的一系列函数
Libvirt 支持事件机制,使用该机制注册之后,可以在发生特定的事件(如:域的启动、暂停、恢复、停止等)之时,得到自己定义的一些通知。
8、数据流管理的API:以virStream 开头的一系列函数