跳转到: 导航, 搜索

从镜像创建卷

  • Launchpad 条目: NovaSpec:create-volumes-from-images
  • 创建日期: 2012年4月3日
  • 贡献者: Josh Durgin, Tommi Virtanen

总结

允许基于 Glance 存储的镜像创建卷。这可以在启动时完成,以便轻松从卷启动,也可以在任何其他时间预先创建卷。

发布说明

现在可以轻松地用数据填充卷并从中启动。

原理

目前 Nova 有两种独立的 VM 存储类型

  • 临时磁盘 - 在访客终止后销毁,存储为 VM 主机上的文件
  • 卷 - 持久(非临时)块设备

VM 可以从任一来源启动,但 Nova 无法基于镜像创建卷或将镜像复制到现有卷。从卷启动应该像从本地磁盘启动一样容易。

一旦从卷启动与从临时磁盘启动一样容易,那么使用没有临时磁盘的实例的好处就更容易利用,包括

  • 如果卷是网络支持的,则实时迁移很容易
  • 接口更简单/更传统(一切都是持久的,可以重新启动而不会丢失数据)
  • 可以有效地使用底层存储系统功能(去重、复制等)

用户故事

用户创建许多没有临时磁盘的新实例,但都基于相同的镜像。镜像中的数据被复制到每个新实例的新卷中。

设计

Create volume from image.png

实现

后端

当前的 Nova 卷驱动程序是“介绍者”,它们只是配置 libvirt/xenapi 存储,并且不直接访问存储的字节。为了支持将镜像复制到卷,需要卷驱动程序的打开/写入/关闭 API。

对于在主机上公开块设备的驱动程序,可以使用 dd 将数据写入其中。这可能是 nova.volume.driver.VolumeDriver 中的默认设置。

如果它们未作为主机上的块设备公开(如 rbd 和 sheepdog),具有更有效的复制方式,或者有其他限制阻止 dd 工作,则其他驱动程序可以覆盖此设置。

一旦卷驱动程序有了复制数据的方法,Nova 就需要一种方法来使用它与镜像配合。这可以通过计算管理器到卷管理器的调用来完成。

用户 API

有多种方法可以公开此功能。一种是通过 API 扩展来从卷上的镜像启动(可能 N 个镜像在 N 个卷上)。这可能是对现有从卷启动 API 扩展的更改。

另一种可能的用例是轻松将非启动数据复制到卷。这可以作为 API 调用公开,以从镜像创建卷而不启动 VM。

代码变更

  • 卷驱动程序的新方法,用于打开/写入/关闭 (nova.volume.VolumeDriver)
  • 在从卷启动 API 扩展中,用于从新卷启动的 API
  • 用于从镜像创建卷的 API(位置待定)

迁移

没有数据库或核心 API 更改。

测试/演示计划

这不必在规范接近 Beta 之前添加或完成。

未解决的问题

  • 卷服务拆分会影响到这个吗?
  • 应该将从镜像创建卷的 API 放在哪里?

BoF 议程和讨论

使用本节记录 BoF 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。