对非 Glance 镜像引用的支持

https://blueprints.launchpad.net/ironic/+spec/non-glance-image-refs

添加为 Ironic 使用的镜像提供非 Glance 引用的能力。

问题描述

目前,内核和 ramdisk、image_source 镜像都是从 Glance 下载的,通过提供它们的 UUID。 这要求 Glance 处于运行状态,并且不允许提供来自特定 URL 或本地磁盘的镜像。

提议的变更

该提案是为提供的 URL 创建新的镜像服务基类来下载镜像;同时添加一些常见的协议支持,例如从远程 HTTP 服务器下载和使用本地文件系统中的镜像。

根据 URL,将使用不同的镜像服务

  • 如果 URL 以 ‘glance://’ 开头,或者只是一个镜像 UUID(为了向后兼容),则使用 Glance 镜像服务。

  • 如果它以 ‘http://’ 或 ‘https://’ 开头,则它将由 HTTP 镜像服务下载。

  • 如果它以 ‘file://’ 开头,则它引用了本地可用的文件系统,如果镜像位于与节点镜像相同的文件系统中,将创建硬链接;否则,镜像服务会将镜像复制到该文件夹中,供当前 conductor 的本地文件使用。

备选方案

继续对 Glance 保持硬依赖。

数据模型影响

REST API 影响

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

安全影响

操作员应从受信任的来源下载镜像。

其他最终用户影响

可扩展性影响

根据下载镜像使用的协议,网络使用量可以减少(使用本地文件)或保持不变。

性能影响

其他部署者影响

由于 Ironic 可以在没有 Glance 的情况下使用,开发人员不能假定 Glance 镜像元数据是唯一的信息来源。部署者必须能够以编程方式向 Ironic 提供所有必需的元数据,并且必须记录这些要求。

例如,由于当前从 Glance 返回的 image_source 镜像属性中获取内核和 ramdisk UUID,因此如果未使用 Glance,则应将这些链接放入 instance_info 字典中。 另一个例子是整个磁盘镜像,需要将 is_whole_disk 标志放在 instance_info 中,以避免获取内核和 ramdisk。

开发人员影响

开发人员可以轻松添加自己的镜像服务来使用所需的特定协议下载镜像。

实现

负责人

主要负责人

vdrok

其他贡献者

工作项

  • 实现用于从 URL 下载镜像的基镜像服务类。

  • 实现用于从 HTTP 服务器和本地文件系统下载的镜像服务类。

  • 实现一个根据 URL 中定义的协议返回镜像服务的类。

依赖项

测试

将添加用于使用不同协议下载镜像的测试到 Tempest。

升级和向后兼容性

为了向后兼容,允许镜像 URL 仅包含 Glance 镜像 UUID。

文档影响

应将指定镜像 URL 和支持的协议的可能性添加到文档中。

如果驱动程序使用 Glance 提供的某些镜像元数据,则应将其添加到文档中,以便决定不运行 Glance 的操作员可以知道他们应手动提供哪些其他元数据。

参考资料

https://etherpad.openstack.org/p/kilo-ironic-making-it-simple