支持从 Glance Cinder 后端克隆镜像

https://blueprints.launchpad.net/cinder/+spec/clone-image-in-glance-cinder-backend

当启用 Glance cinder 存储时,Glance 镜像可以存储 Cinder 卷的位置。当原始镜像由 Cinder 卷支持时,我们可以通过克隆底层卷来有效地从镜像创建新卷,而不是从 Glance 下载镜像。我们也可以通过创建克隆卷并将其位置添加到镜像来使从卷上传到镜像变得高效。

请注意,目前不支持从 Glance 下载 Cinder 支持的镜像,但此功能已提出。[1]

问题描述

  • 由于镜像传输,从镜像创建新卷以及将卷上传到镜像需要很长时间。

  • 目前 Cinder 不支持租户之间共享卷数据。要共享卷数据,我们需要将其上传到 Glance 一次。

用例

  • 通过 Cinder 卷支持的镜像在租户之间共享卷模板(例如操作系统卷)。

  • 每个项目可以通过镜像快速创建新实例。如果存储阵列支持稀疏配置,磁盘空间也可以高效利用。

提议的变更

当 cinder.conf 中的 allowed_direct_url_schemes 包含 ‘cinder’ 时,在从镜像创建卷时

  • 检查镜像元数据是否满足以下条件
    • 镜像格式为 raw。

    • 镜像具有 ‘cinder://<volume-id>’ 格式的位置

    • 指定的卷中的任何一个都位于与新卷相同的宿主机上。

    • 镜像所有者和卷所有者相同(为了避免访问未由镜像所有者共享的卷)。

  • 如果满足所有条件,则克隆指定的卷。当请求的大小大于镜像时,扩展新卷。

  • 否则,将镜像下载到新卷。

在将卷上传到镜像时

  • 如果镜像格式为 raw 并且 cinder.conf 中的 image_upload_use_cinder_backend 已启用,则克隆卷并将其位置注册到镜像 [2]

    • 如果 image_upload_use_internal_tenant 设置为 True,则克隆的卷将放置在内部租户中。

  • 否则,将卷数据上传到 Glance。

备选方案

通用镜像缓存有时具有相同效果。但是,所提出的功能和通用镜像缓存可以共存,以涵盖不同的情况。

  • 镜像缓存不会加速上传,但此功能使其高效。

  • 镜像缓存可以处理非 raw 格式的镜像(它将转换后的镜像存储在镜像卷中),但目前所提出的功能不处理它。

数据模型影响

REST API 影响

安全影响

当克隆的卷存储在内部租户中时,如果有人能够获取其凭据或访问镜像卷,则可能存在风险。必须小心确保普通用户无法访问它。

通知影响

其他最终用户影响

性能影响

这提高了镜像上传和下载的性能,特别是存储阵列可以提供高效的卷克隆。

其他部署者影响

需要设置一些配置选项才能启用此功能。

  • glance_api_version = 2

  • allowed_direct_url_schemes 必须包含 ‘cinder’

  • image_upload_use_cinder_backend = True (新)

  • image_upload_use_internal_tenant = True / False (新)

在 Glance 中,必须启用 cinder 后端,并且 show_multiple_locations 必须设置为 True。

开发人员影响

实现

负责人

主要负责人

tsekiyama

其他贡献者

工作项

  • 从 Cinder 卷支持的镜像高效下载

  • 高效上传到镜像

依赖项

为了使其他组件能够下载 Cinder 卷支持的镜像,Glance 应该进行更改 [1]

测试

  • 从 Cinder 支持的镜像下载的单元测试

  • 上传到镜像的单元测试

文档影响

应该添加关于如何启用此功能的文档。

参考资料