Ironic驱动程序中支持特性¶
https://blueprints.launchpad.net/nova/+spec/ironic-driver-traits
为了允许更细粒度的Ironic资源调度,Ironic正在为每个Ironic节点暴露特性,这些特性必须通过Ironic驱动程序报告给Placement。
问题描述¶
有时,flavor需要仅选择具有给定资源类别的Ironic节点的一个子集,而不仅仅是任何具有给定资源类别的节点。
最终,预计Ironic可能会根据请求的特性重新配置节点,并且节点报告特性可能意味着该节点可进行此类重新配置,无论是BIOS配置还是RAID配置更改。目前,对于这种方法还没有达成一致的方案,因此问题的这部分将被视为超出范围。
用例¶
考虑flavor Gold,目标资源类别为CUSTOM_GOLD。有些用户想要一种Gold++,它也以CUSTOM_GOLD为目标,但除此之外还需要一组并非所有具有CUSTOM_GOLD资源类别的节点都可用的特定CPU标志。
另一个用例是能够专门为特定项目集使用特定的Ironic节点。其余主机供通用使用。如果用户拥有专用的资源池,他们可以选择在专用池或通用池中创建实例。其他用户只能在通用池中构建。将节点像这样划分的一种方法是为适当的Ironic节点分配诸如CUSTOM_IRONIC_NODE_PROJECT_B和CUSTOM_IRONIC_NODE_GENERAL_USE之类的特性。然后,有一个公共flavor来定位通用主机池,还有一个私有项目特定flavor来定位其专用池。
提议的变更¶
所有这些工作都依赖于flavor能够拥有必需的特性集,并且Nova能够从Placement资源提供程序请求具有请求的特性集。所有这些都在这两个蓝图中实现
https://blueprints.launchpad.net/nova/+spec/add-trait-support-in-allocation-candidates
https://blueprints.launchpad.net/nova/+spec/request-traits-in-nova
此规范包含两个主要部分
将请求的特性发送回Ironic
将Ironic节点特性导入Placement
当Nova启动被调用时,Ironic驱动程序已经通过Ironic API将请求的flavor中的相关extra specs设置在Ironic节点上。这在virt驱动程序的_add_instance_info_to_node方法中完成。它被设置为路径/instance_info/capabilities。以类似的方式,我们还将基于flavor extra specs的特性设置在路径/instance_info/traits上。请注意,这不需要Ironic侧的API更改,路径是PATCH请求的JSONPath更改标识符。
当前nova virt驱动程序有一个get_inventory调用来列出给定compute_node的清单。此更改将向virt驱动程序接口添加一个get_traits(nodename)调用,以获取给定nodename的特性。与get_inventory类似,这将使用缓存的节点详细信息。对于不覆盖新的get_traits调用的驱动程序,我们将引发NotImplementedError。
需要将每个Ironic节点的这些特性与关联的资源提供程序的当前特性进行检查,并在需要时进行更新。这很可能在调度程序报告客户端中完成,类似于当前创建资源提供程序并更新其适当节点的清单的现有set_inventory_for_provider方法。在内部,将使用_ensure_resource_provider方法中的模式来确保正确更新特性。将使用现有的资源提供程序API来更新特性。
我们将Ironic API视为给定节点特性的唯一事实来源。因此,如果有人直接在Placement API上设置任何特性,它们将在下一次virt驱动程序同步时被覆盖,这将重置特性为Ironic API中的内容。
备选方案¶
希望virt驱动程序将从get_inventory()转向update_provider_tree()。虽然这会改变实现细节,但关键数据流是相同的。此规范非常紧急,因为转向资源类别会使Placement更加严格,并阻止在较小的flavor上构建大型Ironic主机。不幸的是,有些人依赖此功能。
我们可以允许管理员通过Placement API直接设置特性,但这有点奇怪,因为Nova正在创建资源提供程序。Ironic可以代表Nova创建资源提供程序。另一个复杂之处在于,我们真正希望特性由Ironic inspector填充,类似于今天由inspector规则设置capabilities的方式。
我们可以允许管理员使用计算主机上的配置变量来扩展特性列表,并且这可能是所有不实现get_traits的驱动程序的行为,但目前已忽略此项,因为它与Ironic驱动程序无关。
数据模型影响¶
无
REST API 影响¶
无,使用现有的Placement API。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
当更新清单时,将增加对Placement的API调用次数。
其他部署者影响¶
部署者现在可以通过依赖的Ironic规范在Ironic中设置特性:https://review.openstack.org/#/c/504531/
此规范是关于Nova virt驱动程序将这些特性发送到Placement。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
John Garbutt (johnthetubaguy)
工作项¶
将get_traits添加到Ironic驱动程序
将特性推送到Placement API
在启动时,将请求的特性设置在Ironic节点上
依赖项¶
Ironic中设置节点特性的新API:https://review.openstack.org/#/c/504531/
对Nova添加支持请求特性的bp add-trait-support-in-allocation-candidates和bp request-traits-in-nova存在松散的依赖关系。没有这两个蓝图,就无法端到端地测试此功能。
测试¶
需要功能测试,证明我们可以仅通过正确配置flavor来选择正确的Ironic节点。
文档影响¶
相关细节主要涵盖在Ironic文档中,关于使用资源类别和Nova flavor。应该扩展此文档,以详细说明如何也可以使用特性。
参考资料¶
无
历史¶
发布名称 |
描述 |
|---|---|
Queens |
引入 |