每个聚合调度权重

https://blueprints.launchpad.net/nova/+spec/per-aggregate-scheduling-weight

此规格建议添加允许用户使用 Aggregatemetadata 来覆盖全局配置选项中的权重,从而实现对资源权重的更精细控制。

问题描述

在当前实现中,权重由诸如 [filter_scheduler] cpu_weight_multiplier 之类的配置选项控制,计算节点的总权重是多个权重乘数的组合:weight = w1_multiplier * norm(w1) + w2_multiplier * norm(w2) + …

由于权重由配置选项控制,因此权重在整个部署中是全局性的,这对于操作员和用户来说不够方便。

用例

作为操作员,我可能希望对资源调度权重配置有更精细的控制,以便我可以控制我的资源分配。

操作员可以通过硬件类型和适合其(硬件)的工作负载使用主机聚合来划分资源池。为每个聚合设置独立的调度权重可以更容易地控制调度行为(分散或集中)。例如,默认情况下,我希望我的部署堆叠资源以节省能源,但对于我的 HPC 聚合,我想设置 cpu_weight_multiplier=10.0 以在聚合中的主机上分散实例,因为我希望尽可能避免嘈杂的邻居。

操作员还可以将风味/镜像限制到主机聚合,并且这些风味/镜像可能对 CPU/RAM/DISK 的重要性有偏好,为该聚合设置一个合适的权重,而不是全局权重,可以为相应的工作负载提供更合适的资源分配。例如,我想部署一个大数据分析集群(例如 Hadoop),此集群中的每个虚拟机都有不同的角色,对于其中一些虚拟机,CPU 和 RAM 的数量比 DISK 更重要,例如 HDFS NameNode 和运行 MapReduce 任务的节点;对于其中一些虚拟机,DISK 的大小更重要,例如 HDFS DataNodes。通过创建不同的风味/镜像并将它们限制到具有合适的调度权重的聚合,可以获得更好的整体资源分配和性能。

提议的变更

此规格建议在现有的权重计算器中添加从 aggregate metadata 读取 *_weight_multiplier 的能力,以覆盖来自配置文件中的 *_weight_multiplier,从而实现更灵活的调度权重。

这将通过使 weight_multiplier() 方法接受 HostState 对象作为参数,并以类似于 nova.scheduler.utils.aggregate_values_from_key()AggregateCoreFilter 过滤器使用的方式从聚合元数据中获取相应的 weight_multiplier 来实现。如果主机位于多个聚合中并且元数据中存在冲突的权重值,我们将使用其中的最小值。

备选方案

添加从 flavor extra_specs 读取上述乘数的能力,使其成为每个风味的。

不会实现此替代方案,因为

  • 在拥有大量风味的云中(例如,公共云),管理每个风味的权重可能非常困难。

  • 每个风味的权重无法帮助需要对使用的主机进行某种额外权重的镜像的情况,因此每个风味的权重灵活性较差,但使用建议的解决方案,我们可以将权重应用于聚合,然后将其用于限制风味(AggregateInstanceExtraSpecsFilter)和镜像(AggregateImagePropertiesIsolation)。

数据模型影响

无。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

由于将添加一些数据收集和计算,调度性能可能会略有下降。

其他部署者影响

无。

开发人员影响

无。

升级影响

无。

实现

负责人

主要负责人

郑振宇

工作项

  1. 添加现有权重计算器从 aggregate metadata 读取 *_weight_multiplier 的能力,以覆盖来自配置文件中的 *_weight_multiplier,从而实现更灵活的调度权重

  2. 更新有关新更改的文档

依赖项

无。

测试

用于验证聚合元数据中提供 *_weight_multiplier 时的单元测试。

文档影响

更新此处的用户参考文档中的权重

https://docs.openstack.org/nova/latest/user/filter-scheduler.html#weights

文档中将说明每个权重计算器对应的聚合元数据键/值。

参考资料

无。

历史

修订版

发布名称

描述

Stein

引入