Think Deep,Work Lean

libvirt虚拟化

Posted on By zack

Libvirt是什么

Libvirt提供了统一、稳定、开源的API,守护进程Libvirtd和命令行管理工具virsh/virt-install/virt-manager,它使用XML来定义虚拟机相关受管理对象,Openstack在底层使用libvirt的应用程序接口

参考1 参考2


<img src="{{ '/styles/images/libvirt-manage-hypervisors.jpg' | prepend: site.baseurl }}" alt="" width="310" />

ibvirt中涉及到几个重要的概念

  1. 节点(Node):一个物理机器,上面可能运行着多个虚拟客户机。Hypervisor和Domain都运行在Node之上。

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

  3. 域(Domain):是在Hypervisor上运行的一个客户机操作系统实例。域也被称为实例(instance,如亚马逊的AWS云计算服务中客户机就被称为实例)、客户机操作系统(guest OS)、虚拟机(virtual machine),它们都是指同一个概念。

节点、Hypervisor和域的关系

libvirt的管理功能

(1)域的管理:包括对节点上的域的各个生命周期的管理,如:启动、停止、暂停、保存、恢复和动态迁移。也包括对多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU,当然不同的Hypervisor上对这些热插拔的支持程度有所不同。

(2)远程节点的管理:只要物理节点上运行了libvirtd这个守护进程,远程的管理程序就可以连接到该节点进程管理操作,经过认证和授权之后,所有的libvirt功能都可以被访问和使用。libvirt支持多种网络远程传输类型,如SSH、TCP套接字、Unix domain socket、支持TLS的加密传输等。假设使用最简单的SSH,则不需要额外配置工作,比如:example.com节点上运行了libvirtd,而且允许SSH访问,在远程的某台管理机器上就可以用如下的命令行来连接到example.com上,从而管理其上的域。

virsh -c qemu+ssh://root@example.com/system

(3)存储的管理:任何运行了libvirtd守护进程的主机,都可以通过libvirt来管理不同类型的存储,如:创建不同格式的客户机镜像(qcow2、raw、qde、vmdk等)、挂载NFS共享存储系统、查看现有的LVM卷组、创建新的LVM卷组和逻辑卷、对磁盘设备分区、挂载iSCSI共享存储,等等。当然libvirt中,对存储的管理也是支持远程管理的。

(4)网络的管理:任何运行了libvirtd守护进程的主机,都可以通过libvirt来管理物理的和逻辑的网络接口。包括:列出现有的网络接口卡,配置网络接口,创建虚拟网络接口,网络接口的桥接,VLAN管理,NAT网络设置,为客户机分配虚拟网络接口,等等。

(5)提供一个稳定、可靠、高效的应用程序接口(API)以便可以完成前面的4个管理功能。