迁移到使用 Libvirt 设备别名¶
https://blueprints.launchpad.net/nova/+spec/libvirt-dev-alias
目前,我们通过多种方法识别 Libvirt 客户机 XML 中的设备,具体取决于设备类型(至少)。Libvirt 现在提供了一种设备别名机制,我们可以将虚拟客户机设备绑定到一个标识符,以便以稳定且通用的方式查找它们。Nova 应该迁移到使用该机制,这将提高一致性,降低一些复杂性,并解决我们当前策略的一些问题。
问题描述¶
Nova 当前使用多种方法在 XML 中查找客户机设备,用于附加/分离和其他修改。例如,磁盘设备使用 serial 属性来唯一标识它们。但是,libvirt 和 qemu 不支持在所有磁盘设备类型上设置此属性,这意味着 Nova 无法以通用的方式使用它来查找磁盘设备。此外,如果我们有多个具有相同 MAC 地址的网络接口,使用它作为唯一标识符是不够的。
卷附加示例
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/sda' index='5'/>
<backingStore/>
<target dev='vdb' bus='virtio'/>
<serial>ada5af06-300e-4d07-931d-3cc2bff8a8a9</serial>
<alias name='virtio-disk1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
用例¶
作为开发者,我希望 Nova 能够以稳定且一致的方式管理 libvirt 客户机设备。
作为部署者,我希望 Nova 支持 SCSI LUN 直通,该机制不支持在 libvirt 中设置设备序列号。
提议的变更¶
Nova 的 libvirt 驱动程序应迁移到使用设备别名机制 [1] 来标识所有可附加或可分离的设备类型。对于卷和网络接口等设备,应使用卷或端口 UUID。对于其他设备,需要一些其他稳定的标识符,该标识符与 Nova 或其他服务数据库中的内容相关联。Libvirt 对别名格式有特定要求,必须遵守。但是,对于大多数使用 UUID 作为主要标识符的设备,我们应该能够将其嵌入到别名中。
这是使用 Nova 指定的别名的上述磁盘示例的外观
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/sda' index='5'/>
<backingStore/>
<target dev='vdb' bus='virtio'/>
<serial>ada5af06-300e-4d07-931d-3cc2bff8a8a9</serial>
<alias name='ua-ada5af06-300e-4d07-931d-3cc2bff8a8a9'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
备选方案¶
我们可以保留现有配置,并继续不支持不支持使用 serial 的磁盘设备。
我们可以为这些设备类型维护我们自己的数据库映射。
数据模型影响¶
Nova 自身的数据模型不受此影响,并且此更改仅限于 nova-compute 和 libvirt 驱动程序。但是,我们当前维护的 libvirt XML 数据需要更改(并且现有实例需要迁移)以相应地设置设备别名。
REST API 影响¶
无。
安全影响¶
无。
通知影响¶
无。
其他最终用户影响¶
最终用户当前可以请求基于 SCSI LUN 的磁盘设备映射,但由于我们无法在该配置中指定设备序列号,因此它无法工作。在进行此更改后,现有机制将开始工作。
性能影响¶
Nova 本身不会产生重大性能影响,尽管通过别名查找设备会更容易且计算量更小。此外,libvirt 提供的通过别名分离例程 [2] 可能比我们当前需要通过生成和提供 XML blob 来分离设备更容易。
其他部署者影响¶
无。
开发人员影响¶
在此更改后,libvirt 驱动程序最终会更简单。
升级影响¶
唯一的升级影响来自于迁移现有的实例 XML 文档以指定设备别名。由于我们可能正在将实例迁移到/从较旧的节点,因此我们应该在一段时间内保留与无别名 XML 的兼容性。
实现¶
负责人¶
- 主要负责人
dansmith
- 其他贡献者
kashyap
sean-k-mooney
功能联络人¶
dansmith
工作项¶
启用磁盘、接口和 PCI 设备上的设备别名设置和解析
在驱动程序的各个部分实际设置这些设备别名,这些部分创建这些配置
使通过设备特定标识符查找设备的代码优先使用别名,并回退到旧方法
在启动时迁移现有的实例 XML,当缺少设备别名时
依赖项¶
Libvirt 3.9.0: https://libvirt.org/formatdomain.html#devices
测试¶
现有的 devstack 作业应提供足够的覆盖范围,除了将添加的单元和功能覆盖范围外。潜在地启用(并使用)LUN 直通附加机制是有益的,但这有些超出了此工作的范围,该工作的范围只是更改枚举行为。
文档影响¶
实际上没有太多文档影响,因为这应该对操作员和用户是透明的。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
2024.1 |
引入 |