停止使用调度器 run_instance 方法

https://blueprints.launchpad.net/nova/+spec/remove-cast-to-schedule-run-instance

目前,调度器既用于选择实例构建的主机,又用于处理实例启动过程中的一些设置和故障情况。调度器应该负责放置逻辑,所有其他内容都应该移动到其他地方。这将使引入新的调度器驱动程序或将调度器从 Nova 中拆分变得更容易,通过保持清晰的接口和明确的职责来实现。

问题描述

实例启动的执行流程复杂且高度分布式。一定程度的分布式是必要的,但代码的某些部分正在发生意想不到的工作和决策。这使得分离调度器变得非常困难,这意味着它需要与 Nova 进行不必要的紧密集成。此外,也很难推断代码中哪个点发生了什么,这使得改进这些代码部分具有挑战性。

提议的变更

在 Havana 中,可以查询调度器以获取用于配置实例的主机列表。Conductor 服务也作为帮助协调不属于 API 或计算节点逻辑任务的地方出现。已经有工作将一些实例启动工作流程移动到 Conductor 中,而该工作的最后一部分是让 Conductor 与计算节点通信,而不是与调度器通信。

计算管理器中有一个新的、当前未使用的 build_and_run_instance 方法,它模仿当前使用的 run_instance 方法,但通过向 Conductor 服务发送 RPC cast 来处理失败的构建,而不是向调度器发送。 提议的更改是让 Conductor 查询调度器并向计算节点发送消息,从而调用新的 build_and_run_instance 方法。 由于新方法未被使用,因此未经 Tempest 测试,因此可能需要一些工作才能实现与当前 run_instance 方法的完全兼容性。

备选方案

另一种方法是对 run_instance 方法进行重构,使其回退到 Conductor,而不是使用新的 build_and_run_instance 方法。由于那里需要进行大量的重构,因此决定从头开始重建该方法更容易。

数据模型影响

REST API 影响

安全影响

通知影响

无。调度器发送的通知将被移植到 Conductor,以保持相同的行为。

其他最终用户影响

性能影响

一些在调度器中发生的数据库更新将被移动到代码中不太关键的部分。这将加快调度器的速度。

如果需要重新安排实例,实例启动时间可能会缩短。新的 build_and_run_instance 较早地执行一些预构建检查,并且通常不会为重新安排的实例释放和重新分配网络。如果使用裸机驱动程序,它将释放/重新分配,因为那里的网络是特定于主机的。

其他部署者影响

无。

开发人员影响

开发人员需要了解正在使用的新代码路径。

实现

负责人

主要负责人

alaski

其他贡献者

工作项

  • 更改 Conductor 以查询调度器并投递到计算节点。

    • 将通知从调度器移动到 Conductor。

依赖项

测试

这本质上是对当前启动过程的重构。因此,当前 Tempest 测试将作为此更改的良好集成测试,因为新方法将在每次实例启动时使用。

文档影响

参考资料