XenAPI: 支持 Nova 服务独立于虚拟机管理程序

https://blueprints.launchpad.net/nova/+spec/xenapi-independent-nova

能够独立于运行虚拟机的 XenServer 主机运行 Nova 计算服务,将启用更灵活的部署和开发模式,并显著降低 XenAPI 开发人员的入门门槛。

本规范将进行必要的更改,以启用这种独立的部署模式,在这种模式下,Nova 计算服务可以在一台完全不同的机器上运行

问题描述

XenAPI 的驱动程序当前假定它正在运行将在其中托管 VM 的虚拟机管理程序上。虽然这是一种非常有效的部署方法,但将运行限制在同一虚拟机管理程序上的要求仅限于一些特定方法,并且能够独立运行 Nova 计算服务将非常有益。

用例

  • 开发人员希望在现有的 Linux 环境中测试 XenAPI 驱动程序,通过使用 DevStack 运行 nova 计算服务,但连接到作为 VirtualBox 虚拟机中运行的 XenServer 虚拟机管理程序来部署租户 VM。

  • 部署者希望整合 Nova 计算服务,以启用专门的 Nova 计算环境,其中单个 VM 独立于虚拟机管理程序运行这些服务(nova 计算进程与虚拟机管理程序之间 1:1 的关系)

  • 部署者希望将 Nova 计算服务整合到运行在物理主机上的 docker 容器中,独立于 XenServer 虚拟机管理程序,同时保持 nova 计算进程与其控制的虚拟机管理程序之间的 1:1 关系。

提议的变更

XenAPI 与虚拟机管理程序之间强制的链接源于一个单一函数,该函数假定我们可以获取运行计算服务的 VM uuid。在这种情况下,这是 vm_utils.get_this_vm_uuid。已经进行了代码检查,以识别此函数的全部调用者(包括间接调用者),并为每个调用者提出具体的修复方案。

本规范并非旨在使所有功能在独立于 XenServer 主机的情况下都能工作,因此,如果 get_this_vm_uuid 检测到我们无法识别正在运行的 VM(因此正在独立运行),它将检查无法支持的配置选项,并在存在任何配置选项时在启动时失败。为了简化更改,将添加一个变量“independent_compute”到 XenAPI 的驱动程序并在启动时设置。

通过代码检查,确定以下内容依赖于 get_this_vm_uuid 函数,因此需要作为本规范的一部分进行解决。

函数名称

建议的解决方案

vm_utils.get_this_vm_uuid

修复调用者:vm_utils.get_this_vm_ref pool._create_slave_info vm_utils.ensure_correct_host

vm_utils.get_this_vm_ref

修复调用者:vm_utils.vdi_attached_here vm_utils.cleanup_attached_vdis

vm_utils.vdi_attached_here

修复调用者:vm_utils.auto_configure_disk vm_utils._generate_disk vm_utils.generate_configdrive vm_utils._fetch_disk_image vm_utils.preconfigure_instance vm_utils._copy_partition

pool._create_slave_info

如果 independent_compute 为 1,则阻止加入 XS 主机聚合[1]

vm_utils.ensure_correct_host

启动配置检查:如果 independent_compute,则必须禁用 check_host

vm_utils.cleanup

attached_vdis

如果 independent_compute,则跳过清理,因为无法附加 VDI

vm_utils.auto_configure_disk

移动到新的 partition_utils XAPI 插件

vm_utils._copy_partition

修复调用者:vm_utils.resize_disk

vm_utils.resize_disk

修复调用者:create_copy_vdi_and_resize

create_copy_vdi_and_resize

仅在缩小尺寸期间使用,而缩小尺寸在不受支持的模式下已经引发异常,因此如果在使用独立计算时尝试缩小尺寸,则引发异常[2]

vm_utils._generate_disk

移动到新的 partition_utils XAPI 插件

vm_utils.generate_configdrive

在计算中将配置驱动程序构建为原始驱动程序,然后使用 XAPI 的 vdi-import API 导入为磁盘

vm_utils._fetch_disk_image

修复调用者:vm_utils._fetch_image vm_utils._create_kernel_image

vm_utils._fetch_image

如果 independent_compute,则仅支持下载 VHD。分离的内核/initrd 将引发异常[3]

vm_utils._create_kernel_image

如果 independent_compute,则仅支持下载 VHD。分离的内核/initrd 将引发异常[3]

vm_utils.preconfigure

实例

如果 independent_compute,则必须禁用 CONF.flat_injected[4]

[1] 池主机聚合当前依赖于在池加入期间重新启动运行 nova 计算服务的 VM,以重新启动 nova 计算服务,因此很难使这两个功能并行工作。XenAPI 驱动程序的大多数部署不使用池主机聚合,因此支持将池主机聚合与独立计算节点结合使用可能由未来的蓝图涵盖。

[2] 缩小尺寸的功能可以移动到新的“partition_utils”XAPI 插件,但是正在努力减少缩小尺寸的使用

[3] 不认为支持分离的镜像是有必要的,并且需要对 glance 插件进行更改(当前期望下载 VHD)或下载到 Nova 然后上传到 XenServer。如果认为有必要,可以在未来的规范中添加任何选项。

[4] 这也可以作为 XenAPI 插件实现,但认为这不是一个常用的选项,因此将推迟到可能的未来蓝图。

备选方案

使用 xenapi-image-streaming 蓝图可以支持分离的内核/initrd 镜像,但是由于该蓝图尚未获得批准,因此此实现不会在独立计算的情况下添加对内核/initrd 镜像的支持。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

代码的性能只会产生轻微的影响,通过 XenAPI 进行一些分区相关任务的额外调用。

要移动的代码是 IO 绑定的,而不是 CPU 绑定的。由于 IO 操作以与附加到客户机相同的方式通过 tapdisk 路由,因此在 dom0 中运行时不会产生额外的负载。

其他部署者影响

无(已提及):可能提供额外的部署选项(参见上面的用例)

开发人员影响

无。

实现

负责人

主要负责人:bob-ball <bob.ball@citrix.com>

工作项

  • “partition_utils”插件:添加插件以将磁盘相关功能从 DomU 移动到 Dom0

  • 导入配置驱动程序:在 DomU 中将配置驱动程序构建为 RAW 磁盘,然后使用 API 将原始磁盘导入到 VDI

  • 完整支持:在 get_this_vm_uuid 中添加独立计算检查,添加对不兼容选项的启动检查。

依赖项

测试

现有的 Nova Network CI 将测试当前的 Compute-as-a-VM 部署模型。Citrix 正在开发一个 Neutron CI,该 CI 将被修改为测试这种替代的独立计算部署模型。

文档影响

参考资料

历史

修订版

发布名称

描述

Newton

引入