存储并允许更新 libvirt 实例设备总线和模型

https://blueprints.launchpad.net/nova/+spec/libvirt-device-bus-model-update

QEMU 对设备总线和模型的支持取决于底层实例机器类型环境中使用的 QEMU 版本。目前 libosinfo 提供的默认值以及硬编码到 libvirt 驱动程序中的值,目前每个实例都不会持久化。

本规范旨在概述一组 nova-manage 命令,允许操作员在无需重建的情况下,将实例迁移到特定的设备总线和模型类型。

问题描述

目前,作为镜像属性与实例关联的设备总线和模型类型,在使用 libvirt 驱动程序启动实例时始终使用。当这些类型未定义为镜像属性时,它们的值来自 libosinfo 或直接硬编码到 libvirt 驱动程序中。

对每个设备总线和模型的支持取决于所使用的机器类型底层计算主机上可用的 QEMU 版本。

因此,实例的机器类型或主机上的 QEMU 版本发生任何更改,都可能突然使现在存储的设备总线或模型镜像属性失效,并且无法在不使用定义了新镜像属性的新镜像进行完整实例重建的情况下进行更新。

此外,libosinfo 或 libvirt 驱动程序提供的默认值的任何更改都可能导致现有实例发生意想不到的更改。过去已经遇到过这种情况,因为 libosinfo 假定 libvirt 域定义是静态的,而 OpenStack Nova 恰好在硬重启或迁移期间重写和重新定义这些域,从而可能发生更改。

用例

  • 作为用户,我希望我的实例使用的设备总线和模型尽可能保持稳定,不会因 libosinfo 或 OpenStack Nova libvirt 驱动程序中的新默认值而更改。

  • 作为操作员,我希望更改实例的设备总线或模型无需强制用户完全重建实例,以便适应不断变化的机器类型或 QEMU 对某些类型的弃用。

提议的变更

将现有的设备总线和模型注册到 system_metadata

hw_machine_type 一样,我们首先希望确保与实例关联的当前设备总线和模型类型被存储起来,以确保在实例的生命周期内保持稳定。当这些总线或模型由镜像属性定义时,这已经发生,因此我们只需要在服务启动或实例创建时,这些属性未定义时才捕获其值。

以下镜像属性列表概述了本规范旨在涵盖的设备总线和模型列表

  • hw_cdrom_bus

  • hw_disk_bus

  • hw_floppy_bus

  • hw_rescue_bus

  • hw_input_bus

  • hw_pointer_model

  • hw_rng_model

  • hw_scsi_model

  • hw_video_model

  • hw_vif_model

提供 nova-manage 命令以更新现有的设备总线和模型

在存储了总线和模型类型后,我们现在可以为操作员提供命令来检查和更新上述允许的镜像属性列表。

$ nova-manage image-property list $instance

将列出实例的存储的镜像属性。

$ nova-manage image-property set --property hw_disk_bus=scsi --property hw_scsi_model=virtio-scsi $instance

将更新实例的镜像属性,目前仅接受先前定义的镜像属性列表。

先决条件

尝试更新实例的镜像属性时,适用以下先决条件

  • 实例必须处于 STOPPED、SHELVED 或 SHELVED_OFFLOADED vm_sate 状态。

  • 提供的类型将根据总线或模型的相应版本对象字段进行验证。

更新后,用户或管理员可以启动或取消搁置实例,从而导致底层 libvirt 域使用新的总线或模型类型重新定义。

备选方案

没有其他,除了提供一个通用的 API,允许存储的镜像属性随着时间的推移被用户更新,而无需重建,但这超出了此基本 nova-manage 命令规范的范围。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

用户现在应该发现,他们的实例使用的设备总线和模型在其生命周期内保持稳定,除非操作员、QEMU 支持弃用等强制他们移动。

性能影响

存储这些值会在使用 libvirt 驱动程序启动计算服务时产生轻微的开销,以及在生成新实例时产生开销。

其他部署者影响

操作员应该对何时以及如何将用户迁移到不同的机器类型和 QEMU 版本拥有更多的控制权。

开发人员影响

升级影响

实现

负责人

主要负责人

lyarwood

其他贡献者

stephenfinucane

功能联络人

功能联络人

lyarwood

工作项

  • 将现有的设备总线和模型注册到 system_metadata

  • 提供 nova-manage 命令以更新现有的设备总线和模型

依赖项

测试

将编写广泛的单元和功能测试来验证这一点。

文档影响

将编写面向操作员/管理员的文档,概述这些命令的用例以及命令本身的常规文档。

参考资料

历史

修订版

发布名称

描述

Xena

引入