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

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

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

问题描述

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

  • 一个临时/持久的根磁盘

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

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

  • 一个可选的交换磁盘

  • 一个可选的 config drive 磁盘

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

  • 一个救援根磁盘

  • 原始根磁盘

  • 一个可选的 config drive 磁盘

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

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

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

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

用例

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

项目优先级

提议的变更

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

将定义一个新的镜像属性,以指示用作救援磁盘的设备类型

  • hw_rescue_bus=virtio|ide|usb|scsi

  • hw_rescue_device=disk|floppy|cdrom

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

预期的推荐设置是在 glance 中使用 hw_rescue_bus=usb 标记救援镜像,这将指示 virt 驱动程序将包含救援镜像的 USB 闪存驱动器附加到客户机。对于无法支持替代方案的 hypervisor,建议使用 hw_rescue_bus=ide 和 hw_rescue_device=cdrom 标记救援镜像,以暴露一个新的 CDROM 设备,其中包含救援介质。

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

其他 virt 驱动程序维护者也可能希望实现此蓝图,因此应考虑批准以给予所有 virt 驱动程序的祝福。如果其他 virt 驱动程序维护者希望在 Newton 中完成此操作,则分配人列表将被更新

备选方案

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

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

数据模型影响

无,它只是利用 glance 镜像元属性

REST API 影响

无,它只是利用 glance 镜像元属性

安全影响

通知影响

其他最终用户影响

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

性能影响

其他部署者影响

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

开发人员影响

实现

负责人

主要负责人

lyarwood (libvirt 实现)

其他贡献者

工作项

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

扩展 ImageMetaProps 对象以添加描述的两个新属性。

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

扩展 nova libvirt 驱动程序以在救援模式磁盘配置中尊重新的镜像元属性

依赖项

测试

可以使用新的 tempest 测试来验证新代码的正确操作。

文档影响

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

参考资料