允许在风味额外规格中使用自定义资源类

https://blueprints.launchpad.net/nova/+spec/custom-resource-classes-in-flavors

本规范提出了一种创建风味的能力,该风味可以在调度时选择自定义资源类,并覆盖标准资源类以避免调度它们,同时保持风味的有用显示。

问题描述

这个问题的前因后果在自定义资源类规范 [1] 中得到了很好的描述。

在实现该规范后,我们现在能够表示这些可消耗的资源单位,但无法对其进行调度。调度器当前仅请求 VCPU、MEMORY_MB 和 DISK_GB 单位。它需要能够请求自定义资源类,以便能够正确地过滤这些资源。

由于最终目标是仅基于自定义资源类进行调度,但风味显示和用户依赖于 VCPU、MEMORY_MB 和 DISK_GB,因此我们还需要添加这些资源类的覆盖。这些覆盖将允许仪表板、CLI 等能够显示这些风味可用的资源,而无需调度器对其进行过滤。

用例

作为 ironic 的部署者,我希望能够创建请求特定类型的不可分割的裸机机器的风味。我还希望我的用户能够看到我的裸机风味上可用的 CPU/RAM/磁盘资源类型,而无需基于这些数据进行调度。

作为 NFV 部署者,我拥有带有 FPGA 设备的硬件。我已经使用基于加载到 FPGA 中的软件的自定义资源类在 placement 引擎中标记了该硬件。我希望允许我的用户选择将实例定位到具有特定软件加载的 FPGA 机器的风味。

提议的变更

我们建议添加对以下风味额外规格的处理来解决这个问题

  • resources:$CUSTOM_RESOURCE_CLASS=$N,其中 $N 是一个正整数值。这将添加到 FilterScheduler 发送到 placement 引擎的请求中,以便在存在时通过自定义资源类过滤调度候选者。

  • resources:$STANDARD_RESOURCE_CLASS=0,其中 $STANDARD_RESOURCE_CLASS 是 “VCPU”、“MEMORY_MB” 或 “DISK_GB” 中的一个。这将导致调度器避免基于与顶级 Flavor 对象字段关联的值进行调度,同时仍然将其用于风味显示。

当调度器正在构建对 placement 的请求时,它将首先像今天一样从基本风味属性构建资源类列表。接下来,它将查找任何覆盖,并根据找到的 extra_specs 添加类和/或调整现有类的数量。

现有的 ironic 实例需要经过迁移(在“数据模型影响”部分中描述),以便如果节点定义了资源类,则更正分配。

备选方案

我们也可以在 Flavor 对象中添加新的字段,这些字段专门用于自定义资源类和标准资源类的覆盖。虽然这样做的好处是可以避免操作员已经使用类似 extra_specs 的可能性,但也有几个不这样做的原因。首先,它在我们可以要求 ironic 操作员迁移其风味之前创建了一个额外的周期,因为新字段直到 Pike 才可用。其次,据我所知,我们现在不想向风味添加内容,因为从长远来看,这会使删除它们的工作量更大。

数据模型影响

现有的 ironic 实例不会在它们的 instance.flavor 属性中记录自定义资源类。因此,不会为该资源类记录分配,并且实例所在的节点可以使用新型风味进行调度。

例如,假设现有的 ironic 实例具有资源类 CUSTOM_BAREMETAL_GOLD,该资源类在 baremetal 服务中得到考虑,但未作为对 placement 服务中资源提供程序的分配报告。如果操作员配置风味的 extra_specs 并设置 resources:CUSTOM_BAREMETAL_GOLD="1",则调度器可能会选择一个托管实例的节点,placement 认为该节点可用,因为没有针对它的分配,但该资源实际上已经被消耗。这将导致构建失败。

为了解决这个问题,我们需要做两件事

  1. 我们需要在 Pike 启动时,在驱动程序层检查每个现有的实例。如果 ironic 节点所在的实例定义了资源类,我们将自定义资源类添加到 instance.flavor

  2. 在 nova-compute 服务中更新实例分配的 update_available_resource 定期任务时,调度器报告客户端需要检查 instance.flavor 上的自定义资源类,并将这些报告到 placement 服务。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

由于迁移,首次运行 ironic 驱动程序的 nova-compute 主机在 Pike 中启动时会有轻微的性能下降。

其他部署者影响

部署者需要在升级到 Queens 之前调整其风味以使用自定义资源类。

警告

部署者不应在完成上述“数据模型影响”部分中描述的数据迁移之前调整其风味。

开发人员影响

无。

实现

负责人

主要负责人

Ed Leafe (edleafe)

其他贡献者

Jay Pipes (jaypipes)

工作项

  • 添加代码以迁移 ironic 实例风味数据。

  • 添加代码以报告自定义资源类分配。

  • 在调度器请求中添加对自定义资源类的支持。

  • 添加标准资源类的覆盖(部署者执行此操作)。

依赖项

此更改依赖于资源跟踪器报告自定义资源类库存,该库存在“自定义资源类 (Pike)”蓝图中跟踪。 [2]

测试

新的风味将被添加到设置中,用于运行带有资源类节点的 ironic 和 nova 的任务。

文档影响

这些 extra_specs 应该在安装指南以及升级指南中记录。

参考资料

历史

修订版

发布名称

描述

Pike

引入