从镜像创建卷
- Launchpad 条目: NovaSpec:create-volumes-from-images
- 创建日期: 2012年4月3日
- 贡献者: Josh Durgin, Tommi Virtanen
目录
总结
允许基于 Glance 存储的镜像创建卷。这可以在启动时完成,以便轻松从卷启动,也可以在任何其他时间预先创建卷。
发布说明
现在可以轻松地用数据填充卷并从中启动。
原理
目前 Nova 有两种独立的 VM 存储类型
- 临时磁盘 - 在访客终止后销毁,存储为 VM 主机上的文件
- 卷 - 持久(非临时)块设备
VM 可以从任一来源启动,但 Nova 无法基于镜像创建卷或将镜像复制到现有卷。从卷启动应该像从本地磁盘启动一样容易。
一旦从卷启动与从临时磁盘启动一样容易,那么使用没有临时磁盘的实例的好处就更容易利用,包括
- 如果卷是网络支持的,则实时迁移很容易
- 接口更简单/更传统(一切都是持久的,可以重新启动而不会丢失数据)
- 可以有效地使用底层存储系统功能(去重、复制等)
用户故事
用户创建许多没有临时磁盘的新实例,但都基于相同的镜像。镜像中的数据被复制到每个新实例的新卷中。
设计
实现
后端
当前的 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 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。
