跳转到: 导航, 搜索

CowInstances

  • Launchpad 条目: NovaSpec:cow-instances
  • 创建: 11/01/10
  • 贡献者: Vish Ishaya

总结

目前,实例磁盘存储为系统中的文件,并手动分区。这导致加载时间非常慢,并且存在大量冗余数据。实例应该使用写时复制镜像来节省空间并加快启动时间。

发布说明

Nova 现在默认使用写时复制镜像。这允许快速分配新镜像,无需手动分区镜像。由于磁盘不再手动分区,根驱动器可用作 /dev/vda,新实例的本地存储将可用作 /dev/vdb。这取代了之前对 /dev/vda1 和 /dev/vda2 的使用。要使用较旧的分配方法,您可以关闭 cow 支持,方法是在 nova-compute 中设置 --nouse_cow。

原理

创建实例镜像文件的代码效率低下。表示单个分区的镜像使用 dd 复制到新文件,创建 mbr,并创建第二个用于本地存储的分区。转换为使用写时复制的逻辑卷将使此过程更快并节省主机上的磁盘空间。

用户故事

Jack 希望能够快速配置实例。目前,m1.large 启动可能需要长达 5 分钟。使用 cow 卷,实例启动时间可以缩短到一分钟以内。

Bill 正在使用旧硬件管理小型私有云。他的公司对每个虚拟机使用相同的基本镜像。他希望支持大量的虚拟机,但没有大量的存储空间。CoW 镜像允许他最大限度地利用磁盘资源。

前提条件

设计

计算主机应该在主机首次使用镜像时创建基本的逻辑卷。内核和 ramdisk 潜在地可以链接到只读镜像。以后启动镜像,只需创建写时复制快照并将其用作磁盘即可。相同的策略可用于本地存储。每个主机可以为每种可能的实例类型(或 os api 中的 flavor)的本地存储创建一个空白镜像。与其将这两个磁盘分区到一个带有主引导记录的单个文件中,这两个磁盘可以直接通过 hypervisor 分别附加到实例。

实现

Disk.py 需要重写。需要向镜像下载添加某种缓存概念。这可以与 glance 集成,也可以作为 nova-compute 的一部分。hypervisor 中磁盘的附加需要进行一些修改,以便允许附加多个磁盘。

特定的镜像格式是 hypervisor 特定的。初始版本将尝试尽可能地使用 libvirt 进行抽象,但初始版本仅保证支持 KVM。希望部分代码可以与其他的 hypervisor 实现共享。

迁移

这不应该干扰现有的实例,但包含将旧实例自动迁移以使用 CoW 可能会很有用。

测试/演示计划

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

未解决的问题

这有可能破坏设计用于与 ec2 配合使用的工具/镜像,因为它们可能期望本地存储是第二个分区而不是第二个磁盘。

BoF 议程和讨论

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