启动实例特定存储后端

https://blueprints.launchpad.net/nova/+spec/boot-instance-specific-storage-backend

此蓝图建议在启动实例时添加指定 volume_type 的支持。

问题描述

目前,在创建新的从卷启动实例时,用户只能通过预先在 cinder 中创建具有所需类型的可启动镜像支持的卷,并在启动过程中将其提供给 nova 来控制卷的类型。当用户希望在指定的后端上启动实例时,如果环境中存在多个存储后端,这对于用户来说并不友好。

用例

作为用户,我希望在启动实例时指定卷类型,尤其是在进行批量启动时。“批量启动”意味着在单独的请求中创建多个服务器,但同时进行。

但是,如果用户想在不同的存储后端上启动实例,他们只需要指定不同的后端再次发送创建请求即可。

提议的变更

为服务器创建 API 添加一个新的微版本,以支持在启动实例时指定卷类型。

这仅适用于 source_type 为 blank、image 和 snapshot 的 BDM。 volume_type 将从 nova-api 传递到 nova-compute(通过 BlockDeviceMapping 对象),在那里创建卷并将其附加到新服务器。

nova-api 服务将验证请求的 volume_type 是否实际存在于 cinder 中,以便如果不存在或用户没有访问权限,我们可以快速失败。

备选方案

您还可以将 cinder 和 nova 结合起来执行此操作。

  • 在 cinder 中使用非默认类型创建卷,然后在创建服务器时将卷提供给 nova。

数据模型影响

我们需要将 volume_type 存储在 BlockDeviceMapping 对象上(以及 DB 中的 block_device_mapping 表中)。

REST API 影响

  • URL
    • /v2.1/servers

  • 请求方法
    • POST

卷类型数据可以添加到请求负载中

{
    "server" : {
        "name" : "device-tagging-server",
        "flavorRef" : "http://openstack.example.com/flavors/1",
        "networks" : [{
            "uuid" : "ff608d40-75e9-48cb-b745-77bb55b5eaf2",
            "tag": "nic1"
        }],
        "block_device_mapping_v2": [{
            "uuid": "70a599e0-31e7-49b7-b260-868f441e862b",
            "source_type": "image",
            "destination_type": "volume",
            "boot_index": 0,
            "volume_size": "1",
            "tag": "disk1",
            "volume_type": "lvm_volume_type"
        }]
    }
}

安全影响

通知影响

volume_type 字段添加到 BlockDevicePayload 对象。

其他最终用户影响

python-novaclient 和 python-openstackclient 将会更新。

当快照卷支持的服务器时,block_device_mapping_v2 镜像元数据将包含来自 BDM 记录的 volume_type,因此如果用户然后从该快照创建另一个服务器,nova 从该快照创建的卷将使用相同的 volume_type。如果用户希望更改镜像元数据中的 volume_type,可以通过镜像 API 进行更改。有关由镜像定义的 BDM,请参阅 [1][2]

性能影响

其他部署者影响

开发人员影响

升级影响

为了支持滚动升级,API 必须确定部署(所有 cell)中的最小 nova-compute 服务版本是否足够高以支持用户指定的卷类型。如果指定了 volume_type 但部署不够新,无法处理它,则将向用户返回 409 错误。

实现

负责人

主要负责人

张斌

工作项

  • 在计算 API 中添加 volume_type 支持

  • 添加相关测试

依赖项

测试

  • 为以下场景添加 Tempest 集成测试

    • 使用非默认卷类型从卷启动。

    • 快照卷支持的实例,并断言非默认卷类型存储在镜像快照元数据中。

  • 添加与负面场景相关的单元测试,例如

    • 在新的微版本之前尝试从卷启动,并指定特定的卷类型。

    • 尝试从卷启动,并指定不存在的卷类型和/或用户没有访问权限的卷类型。

    • 尝试使用尚未支持卷类型的旧计算从卷启动。

  • 添加与正面场景相关的函数测试

    • 函数 API 示例测试将涵盖使用特定卷类型从卷启动的正面场景,并且所有 cell 中的所有计算都在运行最新代码。

文档影响

添加文档,说明在微版本之后可以指定卷类型来启动实例。

参考资料

有关此功能的讨论,请参阅

历史

修订 :header-rows: 1

发布名称

描述

Stein

引入