允许在风味额外规格中使用自定义资源类¶
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 认为该节点可用,因为没有针对它的分配,但该资源实际上已经被消耗。这将导致构建失败。
为了解决这个问题,我们需要做两件事
我们需要在 Pike 启动时,在驱动程序层检查每个现有的实例。如果 ironic 节点所在的实例定义了资源类,我们将自定义资源类添加到
instance.flavor。在 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 |
引入 |