image metadata prefiltering

https://blueprints.launchpad.net/nova/+spec/image-metadata-prefiltering

Nova 支持通过镜像属性指定特定于超visor的设备模型。目前,当在镜像上设置这些属性时,除非操作员手动配置 ImagePropertiesFilter,否则在调度时不会考虑它们。如果操作员没有配置 ImagePropertiesFilter,并且实例被调度到不支持请求设备模型的宿主机,virt 驱动程序中的后期检查将导致启动失败并触发重新调度。如果只有一部分宿主机支持请求的设备模型,这通常会导致 NoValidHost 错误。

本提案建议使用标准化 traits 和 placement 来解决设备模型兼容性问题,方法是扩展现有的 virt 驱动程序,以声明它们支持的设备模型作为 traits。

问题描述

用例

作为操作员,我希望能够部署具有不同设备模型功能的异构云,无论是在升级期间还是在多架构多 hypervisor 云中,而无需显式配置调度器。

作为操作员,我希望能够以不透明的方式通过标准 traits 向我的客户传达我的云提供的功能,而不是透露已部署软件的具体版本,以便他们可以提供依赖于这些功能的自己的镜像。

作为最终用户,我希望能够简洁地指定实例的设备模型或其他依赖于 hypervisor 的功能需求,而无需过于冗长。

提议的变更

Step 1: Standard Traits

定义良好的 镜像元数据属性,这些属性具有有限的数值集合,代表虚拟化能力,将被转换为标准 traits。

当前建议的集合是

{
    "hw_vif_model": {
         "title": "Virtual Network Interface",
         "description": "Specifies the model of virtual network interface
         device to use. The valid options depend on the hypervisor
         configuration. libvirt driver options: KVM and QEMU:
         e1000, ne2k_pci, pcnet, rtl8139, spapr-vlan, and virtio.
         Xen: e1000, netfront, ne2k_pci, pcnet, and rtl8139.",
         "type": "string",
         "enum": [
             "e1000",
             "e1000e",
             "ne2k_pci",
             "netfront",
             "pcnet",
             "rtl8139",
             "spapr-vlan",
             "virtio"
         ]
     },

     "hw_video_model": {
         "title": "Video Model",
         "description": "The video image driver used.",
         "type": "string",
         "enum": [
             "vga",
             "cirrus",
             "vmvga",
             "xen",
             "qxl"
         ]
      },

     "hw_disk_bus": {
         "title": "Disk Bus",
         "description": "Specifies the type of disk controller to
         attach disk devices to.",
         "type": "string",
         "enum": [
             "scsi",
             "virtio",
             "uml",
             "xen",
             "ide",
             "usb",
             "fdc",
             "sata"
         ]
      },
}

注意 hw_cdrom_bus 支持与 hw_disk_bus 相同的值,但未记录。 hw_cdrom_bus 也将由本规范支持。其他可能值得考虑的镜像属性是

{
     "hypervisor_type": {
         "title": "Hypervisor Type",
         "description": "Hypervisor type required by the image."
         "type": "string",
         "enum": [
             "baremetal",
             "hyperv",
             "kvm",
             "lxc",
             "qemu",
             "uml",
             "vmware",
             "vz",
             "xen"
         ]
     },
     "vm_mode": {
         "title": "VM Mode",
         "description": "The virtual machine mode.
         This represents the host/guest ABI (application binary interface)
         used for the virtual machine."
         "type": "string",
         "enum": [
             "hvm",
             "xen",
             "uml",
             "exe"
         ]
     }
}

虽然本规范主要针对设备模型特定的镜像元数据属性,但相同的模式也可以应用于 hypervisor_typevm_mode

标准 traits 的创建将在 placement/os-traits StoryBoard story 中跟踪。关于如何命名/命名空间这些 traits 的讨论将发生在那里,而不是在本规范中。

Step 2: Reporting Of Capabilities By Virt Drivers

本规范主要针对扩展 libvirt 驱动程序;但是,由于 vmware 和 fake 驱动程序也使用这些属性,它们也将被扩展。

为了启用此功能,virt 驱动程序将被扩展,以报告计算节点资源提供程序上它们能够模拟的每个设备模型的 traits。这将通过内省 libvirt 版本、qemu 版本和 Nova 配置(例如 CONF.virt_type)来完成。

为了支持升级而无需修改现有的镜像或 flavor,virt 驱动程序中的设备模型支持后期检查将不会被删除。

Step 3: Requesting A Device Model And Scheduling

将添加一个新的调度器预过滤器,以自动将新的 traits 添加到请求中。由于添加设备模型的新选项需要更改 Nova,并且这些选项更新不频繁,因此我们可以只在预过滤器中有一个映射表,通过查找适当的镜像元数据键并将 traits 附加到未编号的请求组来添加额外的 traits 到请求规范中。这将不需要更改镜像即可使用此功能。

备选方案

操作员可以继续使用镜像属性过滤器。

如果 virt 驱动程序被修改为报告 traits,但未添加预过滤器,则现有指定镜像中所需 traits 的能力将足以消耗新的 traits。但是,这将需要创建的镜像首先指定设备模型请求,然后也指定所需的 traits。例如,hw_vif_model=e1000, traits:COMPUTE_NET_MODEL_E1000=required。这可行,但过于冗长。

与最近的其他功能一样,我们可以使用 traits 请求来替代镜像元数据属性。如果我们选择此选项,我们可以在 train 中弃用镜像元数据数据值(例如 hw_vif_model),并在后续版本中删除它们。要使用该功能并请求设备模型,将使用一个 trait,例如 traits:COMPUTE_NET_MODEL_E1000=required。虽然这在某些方面可能更好,但比选择的选项更繁琐,并且具有需要更新所有镜像以包含 traits 请求的缺点。因此,由于升级影响,这被放弃了。

操作员还可以通过手动创建 nova 主机聚合或 placement 聚合来实现本规范的目标,然后使用 IsolatedHostsFilter 或聚合 member_of placement 请求将镜像映射到聚合。

数据模型影响

一组新的标准 traits 添加到 os-traits。不需要其他数据模型更改。

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

预计这将通过减少重新调度来提高异构云中的启动性能。通过将更受约束的请求传递给 placement,此功能还应减少返回的 allocation_candidates 集合。

其他部署者影响

将添加一个新的配置选项以启用镜像元数据预过滤器。最初这将默认禁用,但可以根据对性能影响的反馈在未来的版本中更改。

开发人员影响

升级影响

升级不需要任何操作。但是,就像新部署一样,如果操作员希望启用此功能,他们需要在升级后更新 nova 配置以启用它。

实现

负责人

sean-k-mooney

工作项

  • 添加新的 traits

  • 修改 libvirt virt 驱动程序以报告 traits

  • 编写预过滤器

  • 添加配置选项

  • 测试

依赖项

os-traits 中的添加

测试

这可以在 gate 中完全进行测试。将添加功能和单元测试。

虽然可以添加 tempest 测试,但由于我们没有具有不同 hypervisor 的多节点 gate 作业,因此不会扩展 tempest。

文档影响

将添加一个发布说明,并提供预过滤器的新的配置选项的文档。由于没有最终用户影响,因此不需要面向用户的文档。

参考资料

历史

修订版

发布名称

描述

Train

引入