使用 in_tree 获取分配候选

https://blueprints.launchpad.net/nova/+spec/use-placement-in-tree

在 Stein 版本中,我们在 placement 的 GET /allocation_candidates 端点中引入了 in_tree=<rp_uuid> 参数,该参数将响应限制在指定资源提供者的同一树中的资源提供者内。(有关详细信息,请参阅 按提供者树过滤分配候选 规范)

本规范建议在创建或迁移实例时,并且目标主机已经在向调度器请求之前被选中时,使用此参数进行优化。

问题描述

在创建和迁移实例操作中,在调用调度器之前已经选定了目标主机的情况下,nova 仍然会从 placement 获取所有可能的候选者。这效率低下,并且可能导致,例如 Bug#1777591 通过 placement 中的 限制分配候选 功能过滤掉预先确定的目标资源提供者。

用例

  • 由操作员指定的宿主机创建实例

  • 由操作员指定的宿主机迁移实例

  • 在不强制的情况下,由操作员指定的宿主机实时迁移实例

  • 在不强制的情况下,由操作员指定的宿主机撤离实例

  • 使用新镜像在同一宿主机上重建实例。

提议的变更

与其向 placement 发出低效的请求,我们将使用 in_tree 查询,并使用预先确定的目标主机资源提供者 uuid 调用 GET /allocation_candidates API。

备选方案

禁用 限制分配候选 功能,调用 placement。实际上,这正是我们现在使用的解决方法,但效率不高。(有关详细信息,请参阅 取消限制分配候选 补丁)

数据模型影响

新的 RequestGroup 对象将在新版本中包含一个新字段 in_tree

REST API 影响

N/A

安全影响

N/A

通知影响

N/A

其他最终用户影响

N/A

性能影响

性能将得到改善,因为我们不需要获取所有候选者。

其他部署者影响

本规范的提出是基于 placement 代码将在 Train 版本中从 nova 仓库中删除,并且所有部署者将使用从 Train 版本中提取的 placement 的假设。请注意,托管在 nova 中的 placement 不支持 in_tree 查询参数。

开发人员影响

N/A

升级影响

我们将在 nova-status upgrade checks 命令中进行最小的必需 placement API 检查。

实现

负责人

主要负责人

tetsuro0907

工作项

  • 支持新功能的变化

    • RequestGroup 对象中添加 in_tree 字段,实现转换为 placement 查询参数

    • 在调度器中添加数据库查询,将 RequestSpec.force_hosts/force_nodesRequestSpec.requested_destination 转换为计算节点 uuid,并将其设置为新的 RequestGroup.in_tree 字段

  • 撤销 取消限制分配候选 补丁中的解决方法

依赖项

按提供者树过滤分配候选 规范,但此规范已在 Stein 中完成。

测试

将添加功能测试,以确保 用例 部分中描述的服务器操作。

文档影响

N/A

参考资料