使用稳定的磁盘设备进行虚拟实例救援

https://blueprints.launchpad.net/nova/+spec/virt-rescue-stable-disk-devices

这将提供一种指示救援磁盘镜像应作为瞬态磁盘设备(例如 USB 存储设备)附加的功能,以便在救援模式期间,实例附加的现有存储不会更改其设备地址。

问题描述

当实例正常启动时,将有许多可能的磁盘附加到实例

  • 一个临时或持久的 cinder 卷根磁盘

  • 零个或多个临时非根磁盘

  • 零个或多个持久的非根 cinder 卷

  • 一个可选的交换磁盘

  • 一个可选的 config drive 磁盘

但是,当实例以救援模式启动时,此存储设置会发生显著变化,并且根据 virt 驱动程序的不同而有所不同。在 Libvirt 驱动程序中,救援实例会获得

  • 一个救援根磁盘

  • 原始根磁盘

  • 一个可选的 config drive 磁盘

这存在多个问题。首先,许多磁盘完全丢失,例如临时非根磁盘、所有 cinder 卷和交换磁盘。缺少存储限制了管理员在救援模式下可以执行的工作范围。

救援根磁盘被放置在先前包含实际根磁盘的设备上。例如,救援根是 /dev/vda,而实际根镜像现在被移至不同的设备 /dev/vdb。虽然设计良好的操作系统设置不应依赖于根设备出现在固定的设备名称上,但有些操作系统仍然依赖于此。因此,在救援模式期间移动根磁盘可能会引入其自身的问题,并实际上导致救援模式中的错误。例如,它可能会让管理员混淆,从而将他们的 fstab 设置为引用 /dev/vdb,而根磁盘在救援模式结束后将返回到 /dev/vda。

救援模式期间磁盘的变化与在裸机上从救援介质启动磁盘时发生的情况非常不同。这意味着管理员从裸机世界获得的知识需要重新学习 OpenStack 救援模式,这给管理员增加了不必要的学习负担。

当磁盘更改其出现地址时,这可能会导致某些来宾操作系统的许可检查出现问题。例如,如果硬件设备更改其地址过于频繁,Windows 可能会决定要求重新激活许可。这对于管理员来说也是一件不希望发生的事情。

用例

当租户用户以救援模式启动 VM 时,他们期望现有的存储设备配置与正常模式下看到的一样,但会热插一个瞬态磁盘来表示救援介质。

提议的变更

此规范不涵盖当前计算 API 中阻止使用根 cinder 卷救援实例的从卷启动检查的删除。删除此检查以及对整体 API 的后续影响将在后续规范中涵盖。

计算管理器代码将被更改,以便在执行救援时,将存在完整的块设备映射。这将允许实例配置所有在正常启动期间将出现的非根 cinder 卷。

新的镜像属性已经在 Ocata 中引入 [1],将被用来指示要用作救援设备的类型和相关的总线。

  • hw_rescue_bus=virtio|ide|usb|scsi

  • hw_rescue_device=disk|floppy|cdrom

如果省略,virt 驱动程序将默认为其当前设置救援磁盘的行为。对于 Libvirt 驱动程序,这意味着默认总线将匹配 hw_disk_bus,设备类型将为“disk”。

推荐的设置是使用 hw_rescue_bus=usb 标记 glance 中的救援镜像,这将指示 virt 驱动程序将包含救援镜像的 USB 闪存驱动器附加到来宾。对于无法支持此功能的超visor,另一种建议是使用 hw_rescue_bus=ide 和 hw_rescue_device=cdrom 标记救援镜像,以暴露带有救援介质的新 CDROM 设备。

Libvirt nova 驱动程序将被更改,以便在救援模式下启动时,所有非根 cinder 卷、本地临时非根磁盘和交换磁盘都将出现在救援模式中。救援根设备将作为配置中的最后一个设备添加,但将被标记为 BIOS 可引导,以便优先于现有的根设备。这依赖于 KVM/QEMU 支持“bootindex”参数,所有受支持的版本都支持。这种新的救援模式将不受 Xen 或 LXC 的支持。

其他 virt 驱动程序维护者也可能希望实施此蓝图,因此应考虑给予所有 virt 驱动程序的批准。如果其他 virt 驱动程序维护者希望在此周期内承诺执行此操作,则分配者列表将被更新。

备选方案

什么都不做始终是一个选项,但当前的设置具有前面描述的许多不良特性。

另一种方法可能是简单地硬编码不同的方法。例如,在使用 KVM 时,始终使用 USB 闪存设备作为救援介质,并且不必支持镜像属性。这当然是一种可行的选择,如果不是为了保持与早期 OpenStack 的向后兼容性,它甚至可能是首选方法。

数据模型影响

没有,因为 ImageMetaProps 对象更改已经在 Ocata 中登陆 [1]

REST API 影响

没有,因为对 BFV 实例的支持将在单独的规范中涵盖。

安全影响

通知影响

其他最终用户影响

租户用户将获得设置新的镜像元属性的能力,该属性针对救援磁盘镜像,将指示在救援实例时使用的磁盘总线和设备类型。

性能影响

其他部署者影响

如果管理员预先填充任何救援磁盘镜像,他们可能希望设置磁盘总线和设备类型以覆盖历史默认行为。

开发人员影响

Virt 驱动程序维护者可以继续默默地忽略新引入的镜像属性,或者选择性地开始使用它们,通过实施这种新的稳定设备方法。

升级影响

较旧的基于 Libvirt 的计算节点无法识别稳定的设备救援镜像属性,将继续默默地忽略它们,就像它们在 Ocata 中引入以来的那样 [1]。升级到 Ussuri 后,他们将开始使用稳定的设备布局来救援实例。

实现

负责人

主要负责人

lyarwood (Libvirt 实现)

其他贡献者

功能联络人

lyarwood

工作项

扩展计算管理器救援代码以处理完整的块设备映射,包括非根 cinder 卷的附加。

扩展 nova Libvirt 驱动程序以在救援模式下设置所有磁盘。

扩展 nova Libvirt 驱动程序以在救援模式磁盘配置中识别新的镜像元属性。

依赖项

测试

一个新的 tempest Libvirt 功能可配置和测试将用于验证新代码的正确操作。

文档影响

应记录新的镜像属性,并更新有关救援模式的任何信息,以说明磁盘的外观。

参考资料

历史

修订版

发布名称

描述

Mitaka

引入 [2]

Newton

重新提出 [3]

Queens

重新提出 [4]

Train

重新提出 [5]

Ussuri

重新提出