1. Libvirt 在 OpenStack 架构中的位置
在 Nova Compute 节点上运行的 nova-compute 服务调用 Hypervisor API 去管理运行在该 Hypervisor 的虚机。Nova 使用 libvirt 管理 QEMU/KVM 虚机,还使用别的 API 去管理别的虚机。
libvirt 的实现代码在 /nova/virt/libvirt/driver.py 文件中。
这里是 OpenStack Hypervisor Matrix(http://docs.openstack.org/developer/nova/support-matrix.html)
这里是 每个 Linux 发行版里面 libvirt, QEMU/KVM 的版本号(https://wiki.openstack.org/wiki/LibvirtDistroSupportMatrix)
请注意Juno 版本 Nova 对 libvirt 和 QEMU 的各种最低版本要求:
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word; white-space: pre-wrap;">不支持 image 设置 hw_disk_discard 属性,具体参考 BluePrint</pre>
2. Nova 中 libvirt 的使用
Nova 使用 libvirt 来管理虚机,包括:
-
创建虚机
-
虚机的生命周期管理
-
添加和删除连接到别的网络的网卡 (interface)
-
添加和删除 Cinder 卷 (volume)
2.1 创建 QEMU/KVM 虚机
创建虚机的配置有几个来源:
-
用户的选项,包括虚机的基本信息,比如 name,flavor,image,network,disk等
-
image 的属性,比如 hw_vif_model,hw_scsi_model 等。完整的供 libvirt API 使用的属性列表
-
管理员在 nova.conf 中的配置
(注意:image 的元数据属性的优先级高于 nova.conf 中的配置。只有在没有property的情况下才使用nova.conf中的配置)
创建虚机的过程的几个主要阶段:
(1)消息由 nova-api 路由到某个 nova compute 节点 (API -> Scheduler -> Compute (manager) -> Libvirt Driver)
(2)调用 Neutron REST API 去准备网络。其返回的数据类似:
(3)从 image 启动话,nova 会调用 Glane REST API 后者 image metadata 和准备本地启动盘
image metadata:
本地启动盘:
本地启动盘的文件信息:
(4)根据这些信息,生成 domain xml,然后生成其配置使得它是一个持久性虚机 (调用 libvirt Python DefineXML API)。
一个从 image 启动的 Domain 的配置 XML 实例(#部分是注释说明):
从 bootable volume 启动的话,disk 部分为:
(5). 启动 domain (调用 libvirt Python createWithFlags API)
2.2 添加 volume 到虚机 (nova volume-attach)
(1)使用 volume id 通过 volume driver 找到指定的 volume
(2)调用 volume driver 来建立主机和 Volume 之间的连接
主机信息为:
建立的 iSCSI 连接信息为:
volume 在主机上的磁盘为:
(3)通过 domain name 来找到指定 domain 对象 (通过调用 lookupByName API)
(4)生成 volume 连接的配置 xml,比如:
(5)调用 attachDeviceFlags API 将 volume 挂载到该虚机
2.3 添加连接到新的网络的 interface 给虚机 (nova interface-attach)
(1)运行 nova interface-attach,传入 network-id,Neutron 会分配如下network info 给 Nova
(2)执行下面的命令,将 Neutron 分配的 port 连接到 OVS
(3)生成 interface 配置的xml,比如:
(4)调用 attachDeviceFlags API 来挂载该 interface 到虚机
作者:刘世民(Sammyliu)
博客:http://www.cnblogs.com/sammyliu/
网友评论