支持没有本地临时磁盘的 flavor¶
https://blueprints.launchpad.net/nova/+spec/flavor-root-disk-none
此特性增加了定义 flavor 的可能性,该 flavor 不会在 hypervisor 上本地创建任何临时磁盘。建议添加一个新的 flavor 键 local_disks。如果 local_disks 设置为 False,则不会创建 hypervisor 本地根磁盘或任何其他本地临时磁盘。需要创建一个可启动的卷才能从该 flavor 启动实例。所有其他附加磁盘也只能基于卷。
问题描述¶
目前没有办法强制根磁盘位于 cinder 上,并且完全没有 hypervisor 本地临时磁盘。将 root_gb 设置为 0 默认会创建一个大小等于 glance 镜像的临时根磁盘。
我们不希望在 hypervisor 上本地拥有临时磁盘;既不在本地文件系统上,也不在挂载到 /var/lib/nova/instances 的共享存储上。随着这些共享存储的增长,它们变得难以维护,性能也会下降。将临时根磁盘存储在 hypervisor 的本地文件系统上也不是一个好主意,因为根磁盘上的用户数据通常无法简单地删除。将更多或更少的块设备都放在 cinder 卷中,为我们提供了维护实例块存储和实例本身的独特而灵活的功能集。
用例¶
最终用户的用例是不在 hypervisor 上意外创建临时(根)磁盘。从禁用本地磁盘的 flavor 启动实例时,用户将被告知需要创建一个可启动的卷才能使用该卷启动实例。该卷可以是现有的卷,也可以是在实例启动请求期间通过 block-device 参数创建的新卷。最终用户无需担心磁盘放置;这会影响实例迁移、数据持久性/丢失和/或共享存储性能。
部署者的用例是能够防止客户在 hypervisor 上创建临时(根)磁盘。部署者无需过多担心本地 HV 文件系统的大小,也不需要为 /var/lib/nova/instances 创建一个大型共享存储,该共享存储挂载到所有 hypervisor 上。随着该共享存储的增长,它变得难以维护,性能也会下降。他们不必处理存储在本地 hypervisor FS 上的临时磁盘上的客户数据丢失问题,以防 hypervisor 发生故障。
提议的变更¶
变更范围
API 中的新的 flavor 键
local_disksflavors 表中新的布尔列
local_diskslocal_disks的默认值为 True旧的 microversions 在
local_disks=False时,会为root_gb、ephemeral_gb和swap_gb显示值 0新的 microversions 在
local_disks=False时,不会返回root_gb、ephemeral_gb和swap_gb键如果给定
local_disks=False,root_gb、ephemeral_gb和swap_gb是可选的如果给定
local_disks=False,root_gb、ephemeral_gb和swap_gb会自动设置为 0,给定的值将被忽略如果省略
local_disks或设置为 True,root_gb再次成为必需项当 flavor 创建请求带有
local_disks=False且root_gb> 0 和/或emphemeral_gb> 0 和/或swap_gb> 0 时,会发生错误当 flavor 带有
local_disks=False且请求的镜像大于给定的 blockdevice 布局时,返回描述性异常当 flavor 带有
local_disks=False且给定的 block_device 参数包含dest_type‘local’ 时,返回描述性异常当从 flavor 带有
local_disks=True调整实例大小到 flavor 带有local_disks=False时,返回描述性异常调整 API 文档以包含
local_disks键的详细描述config-drive 不会受到此更改的影响,config-drive 仍然会驻留在本地 HV 磁盘上,就像 libvirt.xml 和 console.log 一样
备选方案¶
另一种方法是始终使用附加的 block_device 参数和 dest_type ‘volume’ 启动实例,以确保(根)磁盘位于 cinder 卷上,并且不会创建 hypervisor 本地临时磁盘。但这有一个缺点,即有人可能会忘记它,并且临时磁盘会在 HV 上本地创建。没有办法强制用户不在 hypervisor 上创建临时根磁盘。
数据模型影响¶
在 flavor 表中创建新的列
local_disks类型为布尔值(默认值为 True)
REST API 影响¶
引入新的 API microversion,该版本允许将 ‘None’ 作为磁盘值
POST v2.1/<tenant_id>/flavors
{
"flavor": {
"name": "flavor_without_local_ephemeral_disks",
"ram": 1024,
"vcpus": 2,
"local_disks": false,
}
}
flavor show 在
local_disks=False时省略root_gb、ephemeral_gb和swap_gb
{
"flavor": {
"OS-FLV-DISABLED:disabled": false,
"local_disks": false,
"os-flavor-access:is_public": true,
"id": "1",
"links": [
{
"href": "http://openstack.example.com/v2.1/openstack/flavors/1",
"rel": "self"
},
{
"href": "http://openstack.example.com/openstack/flavors/1",
"rel": "bookmark"
}
],
"name": "m1.tiny",
"ram": 512,
"vcpus": 1
}
}
使用旧的 microversions,当
local_disks=False时,root_gb、ephemeral_gb和swap_gb将以值 0 返回
{
"flavor": {
"OS-FLV-DISABLED:disabled": false,
"local_disks": false,
"disk": 0,
"OS-FLV-EXT-DATA:ephemeral": 0,
"os-flavor-access:is_public": true,
"id": "1",
"links": [
{
"href": "http://openstack.example.com/v2.1/openstack/flavors/1",
"rel": "self"
},
{
"href": "http://openstack.example.com/openstack/flavors/1",
"rel": "bookmark"
}
],
"name": "m1.tiny",
"ram": 512,
"swap": 0,
"vcpus": 1
}
}
root_gb在local_disks=False时不再是必需的当 flavor 带有
local_disks=False且没有提供 BD 映射时,返回 400 错误当 flavor 带有
local_disks=False且 BD 映射中给定的dest_type为 local 时,返回 400 错误当 flavor 带有
local_disks=True且请求将实例调整大小到 flavorlocal_disks=False时,返回 400 错误在 flavor 创建时,当
local_disks=False且给定了root_gb和/或ephemeral_gb和/或swap_gb时,返回 400 错误
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
最终用户需要提供带有 dest_type volume 的适当 blockdevice 映射,才能使用带有 local_disks=False 的 flavor。
性能影响¶
无
其他部署者影响¶
如果部署者不希望在 hypervisor 节点上存在任何临时/本地磁盘,他们只需创建带有 local_disks=False 的 flavor,然后该云的所有用户都必须在使用 blockdevice 映射创建实例时提供带有 dest_type ‘volume’ 的 blockdevice 映射。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
tpatzig
工作项¶
创建数据库列
创建带有新键的 API microversion
支持 flavor show 中
local_disks=False如果 flavor 中存在
local_disks=False且请求包含本地 BD 映射,则进行异常处理调整 flavor 单元测试
依赖项¶
无
测试¶
创建带有
local_disks=False的 flavor不使用卷启动具有此 flavor 的实例
使用本地 BD 映射启动具有此 flavor 的实例
使用卷启动具有此 flavor 的实例
文档影响¶
https://docs.openstack.org/openstack-ops/content/flavors.html
API 文档将被更新以包含新的 flavor 选项 local_disks。
参考资料¶
无
历史¶
发布名称 |
描述 |
|---|---|
Ocata |
引入 |