Libvirt 运行时镜像类型¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/nova/+spec/runtime-image-type
Libvirt qemu/parallels 虚拟机监控程序能够处理不同类型的镜像。通过此更改,我们将添加一种能力,即无需根据 images_type 配置参数进行转换即可使用提供的镜像。
问题描述¶
目前 nova libvirt 驱动程序坚持使用 nova.conf 中配置的镜像类型。如果提供的镜像类型与指定或默认类型不同,则无法在不进行转换的情况下使用它。Libvirt 当前支持以下镜像后端:RBD、LVM、QCOW2、RAW、PLOOP。将一个节点限制为一种镜像类型是不灵活的。
用例¶
让用户能够在不同的计算节点上灵活地使用镜像类型。这将允许他们跨所有计算节点使用所有现有的镜像目录,而无需通过 images_type 参数重新配置。
提议的变更¶
LibvirtDriver 具有一个名为 image_backend 的字段,该字段仅在计算服务启动时初始化一次。将其放在实例属性中,而不是计算服务的属性中。因此,我们引入了一个新的参数 CONF.libvirt.images_type_mapping,它以更复杂的方式控制 image_backend。这个新的配置参数是一个映射列表,如下所示
- images_type_mapping = <源镜像类型1>:<后端镜像类型1>,
<源镜像类型2>:<后端镜像类型2> … 以此类推。
如果提供的镜像未在 images_type_mapping 列表中,则它将被转换为 images_type 参数定义的格式。
应通过代码验证提供的 CONF.libvirt.images_type_mapping 的正确性。如果输入无效,则解析函数应引发异常。
示例:¶
正确:images_type = default images_type_mapping = raw:lvm, ploop:ploop
images_type = lvm images_type_mapping = qcow2:qcow2
images_type = qcow2 images_type_mapping = raw:raw, ploop:ploop
images_type = default images_type_mapping = raw:raw, qcow2:qcow2
images_type = default images_type_mapping =
错误:# qcow2 格式的转换规则不明确(qcow2->raw 或 qcow2->qcow2) images_type = default images_type_mapping = qcow2:raw, qcow2:qcow2
# raw 格式的转换规则不明确(raw->rbd 或 raw->lvm) images_type = default images_type_mapping = raw:rbd, raw:lvm
# 无效的源格式(lvm 和 rbd 不能指定为源) images_type = default images_type_mapping = lvm:rbd, rbd:rbd
备选方案¶
保持原样。
数据模型影响¶
无。
REST API 影响¶
无。
安全影响¶
无。
通知影响¶
无。
其他最终用户影响¶
在 nova.conf 文件中添加了一个新的 ListOpt 参数 CONF.libvirt.images_type_mapping。
性能影响¶
无。
其他部署者影响¶
如果用户有兴趣更改当前行为,则应指定新的参数 CONF.libvirt.images_type_mapping,这在升级时应该是无缝的。
开发人员影响¶
其他虚拟机监控程序主要在运行时检测特定类型的镜像。例如,Hyperv 通过标头检测 vhd 或 vhdx,并且不需要通过配置指定使用哪一个。
实现¶
负责人¶
- 主要负责人
Maxim Nestratov mnestratov@virtuozzo.com
- 其他贡献者
Dmitry Guryanov dguryanov@virtuozzo.com
工作项¶
引入 ListOpt images_type_mapping 配置选项。
实现解析 images_type_mapping,使其符合当前的 images_type 参数。
将 image_backend 实现为实例属性,而不是服务属性。
依赖项¶
无。
测试¶
将实施功能测试。
文档影响¶
应在文档中反映,如上所述,引入了一个新的 nova.conf 参数 images_type_mapping。
参考资料¶
无。