支持从卷启动

本规范建议为 Sahara 添加从卷启动的功能。

问题描述

Sahara 引擎使用 Glance 镜像直接配置虚拟机。在大多数安装中,这意味着镜像被复制为 Nova-compute 主机上的本地文件,并用作虚拟机的根磁盘。

将根磁盘作为纯文件引入了一些限制

  • 无法进行 Nova 虚拟机实时迁移(或主机撤离)。

  • 如果使用 QCOW2 格式,根磁盘性能可能会显著下降。

将根磁盘替换为由分布式后端或本地磁盘存储支持的可启动卷将解决上述限制。

提议的变更

从卷启动的能力仍然需要镜像作为源。这意味着基于卷的基础配置将需要 2 个步骤。

  • 从已注册的 Sahara 镜像创建可启动卷。

  • 使用指向创建的卷的 block_device_mapping 参数启动虚拟机。

基于卷的配置需要显式设置卷的大小。这意味着 Sahara 应该处理此参数。 建议设置可启动卷大小的方法是获取用于虚拟机的 flavor 的根磁盘大小。

如果用户选择从卷配置节点组,则应将 boot_from_volume 标志设置为 True。

基于卷的配置与基于镜像的配置不同,并意味着以下更改。

应从实例模板中删除 image 参数。

实例 Heat 模板应具有一个包含块设备映射的新部分。

block_device_mapping: [{
 device_name: "vda",
 volume_id : {
   get_resource : bootable_volume },
 delete_on_termination : "true" }
]

资源组定义应添加以下模板的卷

bootable_volume:
  type: OS::Cinder::Volume
  properties:
    size: <size derived from the flavor>
    image: <regular Sahara image>

替代方案

或者,可以允许用户选择现有的卷来启动。但是,这无法保证提供的卷适合集群安装。Sahara 还需要用户名元数据才能登录虚拟机。 目前,此元数据仅存储在镜像中。

数据模型影响

节点组模板、节点组和模板关系对象现在应该具有一个布尔类型的 boot_from_volume 字段。

REST API 影响

将“从卷转换和启动”标志添加到所有负责节点组操作的端点。

其他最终用户影响

部署者影响

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

应在节点组创建和更新表单中添加一个选项。

实现

负责人

主要负责人

Nikita Konovalov nkonovalov@mirantis.com

工作项

  • 在后端实现从卷启动支持,并进行数据库迁移和 Heat 模板更新。

  • 在 python-saharaclient 中添加 boot_from_volume 标志支持

  • 在 sahara-dashboard 中添加 boot_from_volume 标志支持

依赖项

测试

  • 在 sahara 和 python-saharaclient 仓库中进行单元测试覆盖。

  • 在 sahara-tests 框架中进行集成测试覆盖。

文档影响

  • 应更新 REST API 文档。

  • 通用用户文档应描述 boot_from_volume 标志引入的行为。

参考资料