为服务器组添加软亲和性支持

https://blueprints.launchpad.net/nova/+spec/soft-affinity-for-server-group

作为租户,我希望尽可能将实例调度到同一主机上,以便实现共置。但是,如果无法将某些实例调度到同一主机,我仍然希望后续实例被调度到另一主机上。这样,我可以表达一组实例之间的一种“最好有”的关系。

作为租户,我希望尽可能地将实例调度到不同的宿主机上。但是,如果无法做到,我仍然希望我的实例能够被调度,即使这意味着有些实例会被放置在已经运行来自同一组实例的宿主机上。

问题描述

用例

最终用户可能希望拥有比当前 server-group API 扩展中提供的更宽松的亲和性和反亲和性规则。通过建议的“良好亲和性”规则,最终用户可以请求 nova 将实例调度到同一宿主机(如果可能)。但是,如果由于资源限制等原因无法做到,最终用户仍然希望将实例保持在少量不同的宿主机上。通过建议的“良好反亲和性”规则,最终用户可以请求 nova 尽可能地将同一组中的实例分散开。

项目优先级

Kilo 版本优先级不高

提议的变更

此更改将扩展现有的 server-group API 扩展,添加两个新的策略:软亲和性和软反亲和性。当一个实例启动到具有软亲和性策略的组中时,调度器将使用一个新的权重 AffinityWeight 来根据同一 server-group 中正在运行的实例数量以降序对可用宿主机进行排序。当一个实例启动到具有软反亲和性策略的组中时,调度器将使用一个新的权重 AntiAffinityWeight 来根据同一 server-group 中正在运行的实例数量以升序对可用宿主机进行排序。

这两个新的权重将通过与 GroupAntiAffinityFilter 通过 filter_properties 获取组使用的主机列表类似的方式,通过 weight_properties(filter_properties)获取有关每个主机实例数量的必要信息。

这些新的软亲和性和软反亲和性策略彼此之间以及与其他现有的 server-group 策略相互排斥。

如果调度器看到一个请求需要任何新的权重类,但这些类未配置,则调度器将拒绝该请求并抛出异常,类似于请求亲和性策略但未配置 ServerGroupAffinityFilter 的情况。

备选方案

或者,最终用户可以使用具有亲和性策略的服务器组,如果实例无法调度,因为与该组关联的主机已满,则最终用户可以为后续实例创建一个新的服务器组。但是,对于占用许多主机的大量实例,此手动过程可能会变得非常繁琐。

数据模型影响

不需要模式更改。

instance_group_policy 表的 policy 列将有两个新的可能值:软亲和性和软反亲和性。

REST API 影响

POST: v2/{tenant-id}/os-server-groups

策略请求参数的值可以是 soft-affinity 和 soft-anti-affinity。

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

balazs-gibizer

工作项

  • 在过滤器调度器中添加两个新的权重。这些权重将根据来自同一 server-group 的实例数量对可用宿主机进行排序。

  • 更新 FilterScheduler,以便在请求了新的策略但相关的权重未配置时拒绝该请求

  • 更新服务器组 API 扩展,以允许将软亲和性和软反亲和性作为组的策略。

依赖项

测试

将提供单元测试覆盖。

将提供一个新的 tempest 测试用例,该用例将尝试将两个服务器启动到同一个 server group 中,并使用软反亲和性策略。即使只有一个计算宿主机,启动也应该成功。

文档影响

需要在 filter_scheduler.rst 中描述新的权重。

参考资料