存储并允许更新 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_bushw_disk_bushw_floppy_bushw_input_bushw_pointer_modelhw_video_modelhw_vif_model
注意
hw_rng_model、hw_scsi_model 和 hw_rescue_bus 不包含在此处,因为它们没有默认值。必须定义它们才能使用,从而无需在此处捕获它们。
提供 nova-manage 命令以更新现有的设备总线和模型¶
在存储了总线和模型类型后,我们现在可以为操作员提供命令来检查和更新上述允许的镜像属性列表。
$ nova-manage image-property list $instance
$ nova-manage image-property show $instance $property
将列出或显示实例的存储的镜像属性。
$ 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
其他贡献者
功能联络人¶
- 功能联络人
lyarwood
工作项¶
将现有的设备总线和模型注册到
system_metadata中提供 nova-manage 命令以更新现有的设备总线和模型
依赖项¶
无
测试¶
将编写广泛的单元和功能测试来验证这一点。
文档影响¶
将编写面向操作员/管理员的文档,概述这些命令的用例以及命令本身的常规文档。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
瑜伽 |
重新提出 |
Xena |
引入 |