使用 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_nodes和RequestSpec.requested_destination转换为计算节点 uuid,并将其设置为新的RequestGroup.in_tree字段
撤销 取消限制分配候选 补丁中的解决方法
依赖项¶
按提供者树过滤分配候选 规范,但此规范已在 Stein 中完成。
测试¶
将添加功能测试,以确保 用例 部分中描述的服务器操作。
文档影响¶
N/A
参考资料¶
按提供者树过滤分配候选 规范
限制分配候选 规范
Bug#1777591 在 launchpad 上报告
取消限制分配候选 补丁