为服务器组添加软亲和性支持¶
https://blueprints.launchpad.net/nova/+spec/soft-affinity-for-server-group
作为租户,我希望尽可能将实例调度到同一主机上,以便实现共置。但是,如果无法将某些实例调度到同一主机,我仍然希望后续实例被调度到另一主机上。这样,我可以表达一组实例之间的一种“最好有”的关系。
作为租户,我希望尽可能将实例调度到不同的主机上。但是,如果无法做到,我仍然希望我的实例能够被调度,即使这意味着其中一些实例会被放置在同一主机上。
问题描述¶
用例¶
最终用户可能需要比当前服务器组 API 扩展中提供的亲和性和反亲和性规则更宽松的规则。通过提议的“最好有”亲和性规则,最终用户可以请求 Nova 在可能的情况下将实例调度到同一主机(即堆叠它们)。但是,如果由于资源限制等原因无法做到,最终用户仍然希望将实例保持在少量不同的主机上。
通过提议的“最好有”反亲和性规则,最终用户可以请求 Nova 尽可能地将同一组中的实例分散开来。
提议的变更¶
此更改将使用两个新的策略软亲和性和软反亲和性扩展现有的服务器组 API 扩展。
当实例启动到具有软亲和性策略的组中时,调度器将使用一个新的权重 AffinityWeight 来根据同一服务器组中在其上运行的实例数量以降序对可用主机进行排序。
当实例启动到具有软反亲和性策略的组中时,调度器将使用一个新的权重 AntiAffinityWeight 来根据同一服务器组中在其上运行的实例数量以升序对可用主机进行排序。
这两个新的权重将通过与 GroupAntiAffinityFilter 通过 filter_properties 获取组使用的主机列表类似的方式,通过 weight_properties(filter_properties)获取有关每个主机实例数量的必要信息。
这些新的软亲和性和软反亲和性策略彼此之间以及与其他现有的服务器组策略相互排斥。这意味着不能使用多个策略创建服务器组,因为现有策略(亲和性、反亲和性、软亲和性、软反亲和性)的每种组合都是矛盾的。
如果调度器看到需要任何新的称重器类别的请求,但这些类别未配置,则调度器将拒绝该请求并抛出异常,类似于请求亲和性策略但未配置 ServerGroupAffinityFilter 的情况。
备选方案¶
或者,最终用户可以使用具有亲和性策略的服务器组,如果实例无法调度,因为与该组关联的主机已满,则最终用户可以为后续实例创建一个新的服务器组。但是,对于占用许多主机的大量实例,此手动过程可能会变得非常繁琐。
数据模型影响¶
不需要模式更改。
instance_group_policy 表的 policy 列将有两个新的可能值:软亲和性和软反亲和性。
REST API 影响¶
- POST: v2/{tenant-id}/os-server-groups
策略请求参数的值也可以是软亲和性和软反亲和性。因此,新的 JSON 模式将如下所示
{"type": "object", "properties": { "server_group": { "type": "object", "properties": { "name": parameter_types.name, "policies": { "type": "array", "items": [{"enum": ["anti-affinity", "affinity", "soft-anti-affinity", "soft-affinity"]}], "uniqueItems": True, "additionalItems": False}}, "required": ["name", "policies"], "additionalProperties": False}}, "required": ["server_group"], "additionalProperties": False}
例如,以下 POST 请求体将是有效的
{"server_group": { "name": "test", "policies": [ "soft-anti-affinity"]}}
并将得到以下响应体
{"server_group": { "id": "5bbcc3c4-1da2-4437-a48a-66f15b1b13f9", "name": "test", "policies": [ "soft-anti-affinity" ], "members": [], "metadata": {}}}
上述 API 更改将在新的 API 微版本中引入。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
balazs-gibizer
工作项¶
向过滤器调度器添加两个新的称重器。这些权重将根据同一服务器组的实例数量对可用主机进行排序。
更新 FilterScheduler,如果请求了新的策略但相关的称重器未配置,则拒绝该请求。
更新服务器组 API 扩展,以允许将软亲和性和软反亲和性作为组的策略。
依赖项¶
无
测试¶
将提供单元测试覆盖。
将提供以下功能测试覆盖
创建具有软亲和性和软反亲和性的组
启动两个具有软亲和性的服务器,并且同一主机上有足够的资源。Nova 应该将两个服务器启动到同一主机。
启动两个具有软亲和性的服务器,但没有足够的资源将第二个服务器启动到第一个服务器所在的同一主机上。Nova 应该将第二个服务器启动到不同的主机。
启动两个具有软反亲和性的服务器,并且有两个计算主机可用且有足够的资源。Nova 应该将两个服务器启动到两个不同的主机。
启动两个具有软反亲和性的服务器,但只有一个计算主机可用。Nova 应该将两个服务器启动到同一主机。
重建、迁移、撤离具有软亲和性的服务器
重建、迁移、撤离具有软反亲和性的服务器
文档影响¶
需要在 filter_scheduler.rst 中描述新的权重。
参考资料¶
instance-group-api-extension BP https://blueprints.launchpad.net/nova/+spec/instance-group-api-extension
Group API wiki https://wiki.openstack.org/wiki/GroupApiExtension