启动实例特定存储后端¶
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 中的所有计算都在运行最新代码。
文档影响¶
添加文档,说明在微版本之后可以指定卷类型来启动实例。
参考资料¶
有关此功能的讨论,请参阅
https://etherpad.openstack.org/p/nova-ptg-stein Stein PTG etherpad,大约在第 496 行的讨论。
http://lists.openstack.org/pipermail/openstack-dev/2018-July/132052.html Matt Riedemann 向开发人员列表发送的关于 Stein PTG 的总结邮件,大约在中间位置。
历史¶
发布名称 |
描述 |
Stein |
引入 |