美文网首页自动化程序员
深入浅出KVM (六) 丨Nova 通过 libvirt 管理

深入浅出KVM (六) 丨Nova 通过 libvirt 管理

作者: 51reboot | 来源:发表于2018-01-31 12:21 被阅读180次

    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/

    相关文章

      网友评论

        本文标题:深入浅出KVM (六) 丨Nova 通过 libvirt 管理

        本文链接:https://www.haomeiwen.com/subject/qwpkzxtx.html