救援实例的实时迁移

https://blueprints.launchpad.net/nova/+spec/live-migrate-rescued-instances

添加对救援实例进行实时迁移的支持。目前处于救援状态的实例无法进行实时迁移。这可能在升级期间成为一个问题,因为主机上的所有活动实例都需要使用实时迁移进行迁移。

问题描述

目前,如果操作员想要升级一个包含救援实例的主机,需要在继续进行维护操作之前先取消救援并进行实时迁移。

在救援操作期间,libvirt 驱动程序会在实例目录中创建一组文件。这些文件在取消救援实例时用于恢复到原始磁盘配置。在救援实例的实时迁移期间,libvirt 仅将它知道的文件移动到目标主机,而将 libvirt 驱动程序在源主机中创建的文件遗留下来。这导致在目标节点上取消救援失败。

此实现将允许 libvirt 驱动程序实时迁移救援实例,并添加驱动程序功能标志以检查驱动程序是否支持救援实例的实时迁移。

用例

  • 操作员希望在对主机执行任何维护活动之前,实时迁移所有正在运行的实例,包括当前处于救援状态的虚拟机,并确保所有处于运行状态的虚拟机 100% 的正常运行时间。

  • 操作员更希望在实时迁移之前无需取消救援实例即可进行实时迁移。这为操作员提供了更好的用户体验,并减少了对最终用户的任何服务中断。

提议的变更

将引入一个新的 API 微版本,以允许迁移处于救援状态的实例。在新微版本中,将检查部署中最低的 nova-compute 服务版本是否支持救援实例的实时迁移,否则请求将在 API 级别失败。这在升级期间很有用,因为某些计算节点可能尚未升级到支持救援实例迁移的版本。

将向所有驱动程序添加一个新的驱动程序功能标志,称为 supports_live_migrate_rescued,并根据它们实时迁移救援实例的能力设置为 True 或 False。此规范仅为 libvirt 驱动程序启用此功能。如果尝试实时迁移处于救援状态的实例,所有其他驱动程序都将失败。驱动程序对实时迁移救援实例的支持将在预实时迁移阶段进行检查,这是一个异步操作。由于驱动程序支持实时迁移救援实例而导致的任何故障,都将使用错误消息更新到 instance-actions 中,就像我们对任何其他预实时迁移错误一样。

目前在实时迁移中,libvirt 驱动程序在救援实例时创建的文件不会复制到目标计算节点。建议将 unrescue.xml 从源主机复制到目标主机,如果镜像服务上存在 kernel.rescue 和 ramdisk.rescue,则下载它们,否则回退到从源主机复制这些文件。这些操作在预实时迁移阶段执行。

备选方案

  • 一种替代方案是,让操作员要求用户取消救援他们的实例,以便可以进行迁移。

  • 另一个选项是在救援操作期间将原始实例状态写入数据库,以便目标计算节点在取消救援期间可以检索它。我们正在单独考虑这个想法,与本次关于实时迁移的规范无关。

数据模型影响

REST API 影响

需要一个新的微版本,因为 os-migrateLive action API 调用将返回 202 响应代码,而不是当前的 409 响应。

当并非所有计算节点都升级到支持此功能的最低计算版本时,将返回 409 响应。

安全影响

通知影响

其他最终用户影响

升级 python-novaclient API 版本。

性能影响

其他部署者影响

此功能仅在所有计算节点都升级后可用。

开发人员影响

实现

负责人

主要负责人

Sivasathurappan Radhakrishnan(siva_krishnan)

其他贡献者

Raj Singh(raj_singh)

工作项

  • 实现驱动程序功能检查,以验证驱动程序是否支持救援实例的实时迁移,并在迁移之前将 libvirt 驱动程序创建的救援实例文件复制到目标主机

  • 更改计算 API 实时迁移方法,以允许迁移救援实例并检查跨部署的最低计算版本。

  • 升级 python-novaclient API 版本。

依赖项

测试

  • 将根据需要添加单元测试。

  • 添加 tempest 测试,以验证处于救援状态的实例的实时迁移以及实例后续的取消救援。

文档影响

需要记录 api-ref 中的 API 更改

参考资料

历史

修订版

发布名称

描述

Newton

引入

Pike

重新提交并更新