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。

参考资料

无。