移除 live-migrate 和 evacuate 的 force 标志

https://blueprints.launchpad.net/nova/+spec/remove-force-flag-from-live-migrate-and-evacuate

对于具有复杂资源分配的服务器,无法有意义地支持 force live-migrate 和 evacuate 操作。因此,本规范建议在新的 REST API 微版本中移除这些操作的 force 标志。

问题描述

当前,当指定 force: True 时,nova 会尝试盲目地将资源分配从源主机复制到目标主机。这只有在服务器的分配同时在源主机和目标主机上都由单个根资源提供者满足时才有效。一旦分配变得更加复杂(例如,它从多个提供者分配资源(包括共享提供者)或仅从嵌套提供者分配资源),盲目复制就会失败。

用例

此更改将从系统中移除以下用例

  • 管理员无法强制 live-migration 到指定的目的地主机,从而违反 Nova 调度器和 Placement 的协议。

  • 管理员无法强制 evacuate 到指定的目的地主机,从而违反 Nova 调度器和 Placement 的协议。

这不会影响操作员指定目标主机并让 Nova 和 Placement 在移动之前验证该主机的情况。

请注意,这移除了强制 live-migrate 服务器到 nova-compute 被禁用的主机的可能性,因为过滤调度器中的 ComputeFilter 会拒绝此类主机。

提议的变更

在复杂的分配情况下强制指定目标主机,不支持在不调用 Placement 获取目标主机上的分配候选者的情况下进行,因为 Nova 不知道如何复制复杂的分配。force 标志的文档指出 Nova 不会调用调度器来验证目标主机。自 Pike 以来,这一规则已被两个 bugfixes 破坏。此外,支持复杂的分配需要从 Placement 获取分配候选者。因此,本规范建议移除 force 标志,因为它不再受支持。

请注意,修复旧的微版本以干净地失败,而不会在复杂的分配场景中泄漏资源,不属于本规范的范围,而是作为 use-nested-allocation-candidates 的一部分来处理。该更改将确保在具有源主机上复杂分配或需要在目标主机上需要复杂分配的服务器上执行强制移动操作时,Nova conductor 将使用 NoValidHost 异常拒绝该操作。

备选方案

  • 尝试猜测服务器何时需要在目标主机上进行复杂的分配,并且仅在这些情况下忽略 force 标志。

  • 不要管理强制移动操作的资源分配。

更多详细信息请参见 ML 线程

数据模型影响

REST API 影响

在新的微版本中,从两个 API 中移除 force 标志

  • POST /servers/{server_id}/action (os-migrateLive Action)

  • POST /servers/{server_id}/action (evacuate Action)

安全影响

通知影响

其他最终用户影响

更新 python-novaclient 和 python-openstackclient 以支持新的微版本。

由于管理员在移动服务器时无法跳过调度器,因此此类移动可能会因调度器和 Placement 相关的原因而失败。

性能影响

由于管理员在移动服务器时无法跳过调度器,因此此类移动将花费更多时间,因为 Nova 将调用调度器和 Placement。

其他部署者影响

请注意,本规范移除了强制 live-migrate 服务器到 nova-compute 被禁用的主机的可能性,因为过滤调度器中的 ComputeFilter 会拒绝此类主机。

开发人员影响

支持 force 标志一直是维护 nova 的一个阻碍,因为它是一个边缘情况,需要像 Pike 中所做的这样的解决方法来支持它。随着时间的推移,放弃支持将有利于维护项目并提高 API 的一致性/可靠性/可用性。

升级影响

实现

负责人

主要负责人

balazs-gibizer

工作项

  • 添加一个新的微版本到 API 中,该版本从有效载荷中移除 force 标志。如果请求中使用新的微版本,则在调用 Nova 内部时将默认 force 设置为 False。

  • 记录新的微版本

  • 在 python-novaclient 和 python-openstackclient 中添加对新微版本的支持

依赖项

测试

  • 将提供功能和单元测试

文档影响

  • 需要更新 API 参考文档

参考资料

历史

修订版

发布名称

描述

Stein

引入