OneView 驱动程序的节点动态分配

https://bugs.launchpad.net/ironic/+bug/1541096

本规范提出了一种改变 OneView 驱动程序分配节点的方式。新的模型仅在启动时在 OneView 中分配资源,避免 Ironic 中的空闲硬件仍然从 OneView 用户的角度被阻止。

在本规范中,将使用以下术语来指代 OneView 资源

  • 服务器硬件 (SH):对应于物理服务器。服务器硬件一次只能应用一个服务器配置文件。

  • 服务器配置文件 (SP):硬件配置的表示,例如网络配置、启动设置、固件版本以及可通过 BIOS 配置的功能。

  • 服务器配置文件模板 (SPT):用于定义一组服务器配置文件的参考配置的模板。

问题描述

OneView 驱动程序的当前版本考虑了我们所说的 预分配 节点。这意味着当节点在 Ironic 中注册时,必须将服务器配置文件应用于表示给定节点的服务器硬件。

在 OneView 中,当服务器硬件应用了服务器配置文件时,理解是该硬件正在被使用。

预分配 的问题在于,即使节点在 Ironic 中 可用,因此没有与它关联的实例,OneView 中的资源也被认为是已分配的。这意味着其他 OneView 用户无法使用和控制此资源。

因此,在 Ironic 和 OneView 用户共享的环境中,简单地为 Ironic 分配一组服务器硬件项,而我们不知道何时使用它们,将导致硬件被保留但未被使用,从许多角度来看,特别是对于 OneView 用户来说,这是不可取的。

目前 OneView 驱动程序集中缺少动态分配节点的能力。通过添加此功能,驱动程序将能够在启动时仅将 OneView 资源分配给 Ironic。因此,这将使硬件池能够真正地在 OneView 和 Ironic 用户之间共享。

提议的变更

为了支持节点动态分配,验证和部署 OneView 节点的过程中的一些步骤需要更改。

当 (1) 服务器硬件所代表的节点没有应用服务器配置文件,或者 (2) 应用了服务器配置文件,但此服务器配置文件与 Ironic 的节点数据结构中注册的一致时,节点将被视为对 Ironic 免费。这意味着服务器配置文件的 URI 等于 Ironic 中给定节点的 driver_info 命名空间中的 applied_server_profile_uri 字段的值。

因此,以下规则定义了节点的归属权

  • 没有服务器配置文件的 SH - 免费

  • SH.server_profile == node.driver_info.applied_server_profile_uri - 由 Ironic 使用

  • SH.server_profile != node.driver_info.applied_server_profile_uri - 由 OneView 使用

遵循这种方法后,不再需要服务器配置文件来验证节点。驱动程序的 PowerManagement 接口的 validate 方法必须进行更改。

在提议的模型中,如果节点对 Ironic 不免费(即,它正在被 OneView 使用),则验证将失败。但是,由于我们期望由 OneView 使用的节点将被移动到 manageable 并被清理后才能再次在 Ironic 中使用,如果节点的 target_provision_statemanageable,则将跳过此检查。

OneView 用户可以随时声明对 Ironic 免费的节点。在这种情况下,该节点仍然会显示为 Ironic 中的 available。为了解决这种情况,将发出一个驱动程序周期性任务来检测被 OneView 用户使用的节点,并将它们设置为 manageable 状态,并使用适当的维护原因消息将其置于维护模式。一旦 OneView 用户释放了该节点,另一个驱动程序周期性任务将删除维护模式并 provide 该节点回到可用状态。这是必要的,以确保在提供给 Ironic 用户之前对该节点进行清理。

如果该节点在执行周期性任务之前被安排进行部署,它将进入 deploy failed 状态并进入清理过程,该过程应该失败,因为该节点正在被 OneView 用户使用。Nova 调度器将能够选择另一个节点。第三个周期性任务将负责检测此类失败并将节点移回 manageable 状态并设置维护模式,直到释放为止。

清理过程中的一些更改也必须考虑。为了清理节点,需要为其分配服务器配置文件。考虑到这一点,如果节点没有应用服务器配置文件,将根据该节点的服务器配置文件模板创建一个新的临时配置文件,并将其应用于该硬件以进行清理。如果节点已经应用了服务器配置文件,将重用它。清理完成后,在两种情况下,都将删除该服务器配置文件。

从技术角度来看,iscsi_pxe_oneviewagent_pxe_oneview 驱动程序现在将实现

  • oneview.deploy.OneViewIscsiDeploy

  • oneview.deploy.OneViewAgentDeploy

这两个接口将覆盖三个方法

  • prepare_cleaning:

如果节点正在被 OneView 使用,将引发异常,并且节点进入 clean failed 状态。否则,将执行清理步骤并采取其他操作,如下所示

  • 如果未向节点的服务器硬件分配服务器配置文件
    • 将根据节点的服务器配置文件模板创建服务器配置文件;

    • 将此服务器配置文件应用于代表该节点的服务器硬件;

    • applied_server_profile_uri 字段将添加到节点的 driver_info 命名空间中;

  • tear_down_cleaning:

如果节点正在被 Ironic 使用,将采取以下操作

  • applied_server_profile_uri 字段将从节点的 driver_info 命名空间中删除;

  • 将从代表该节点的服务器硬件中删除服务器配置文件;

  • prepare:

如果节点正在被 OneView 使用,将引发异常,并且节点进入 deploy failed 状态。否则,将采取其他操作,如下所示

  • 将服务器配置文件应用于代表该节点的服务器硬件。将从节点 properties/capabilities 命名空间中的 server_profile_template_uri 中指示的服务器配置文件模板中恢复执行此任务所需的的信息。

  • applied_server_profile_uri 字段将添加到节点的 driver_info 命名空间中;

这些接口还将实现三个新的驱动程序周期性任务

  • _periodic_check_nodes_taken_by_oneview:

此驱动程序周期性任务将检查在节点处于可用状态时被 OneView 用户获取的节点,并使用适当的维护原因消息将节点设置为维护模式,并将其移动到 manageable 状态。

  • _periodic_check_nodes_freed_by_oneview:

此驱动程序周期性任务将负责轮询处于维护模式和 manageable 状态的节点,以检查是否删除了服务器配置文件,表明该节点已由 OneView 用户释放。如果是这样,它将 provide 该节点,该节点将通过清理过程并变为可用于置备。

  • _periodic_check_nodes_taken_on_cleanfail

此最后一个驱动程序周期性任务将处理在 OneView 和 Ironic 部署之间发生竞争条件时捕获的节点。在这种情况下,验证将失败,将节点抛到 deploy fail,然后是 clean fail。此任务将使用适当的原因消息将节点设置为维护模式,并将其移动到 manageable 状态,从那里第二个任务可以在删除服务器配置文件后拯救该节点。

将在 [oneview] 部分创建一个新的配置,以允许操作员管理周期性任务运行的间隔

[oneview]
...
periodic_check_interval=300

备选方案

目前,没有其他方法可以启用 OneView 驱动程序的动态节点分配。

数据模型影响

状态机影响

REST API 影响

客户端 (CLI) 影响

“ironic” CLI

“openstack baremetal” CLI

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

Ramdisk 影响

N/A

安全影响

当以前由 OneView 用户使用的机器释放时,其磁盘不会在过程中被擦除,因为 OneView 不执行此类清理任务。这意味着一旦释放节点,来自其先前用户的一些剩余数据可能对 Ironic 可用。为了防止将这些残留数据暴露给 Ironic 用户,驱动程序将通过其周期性任务将这些机器移动到 manageable 状态,Ironic 将要求它们在变为 available 之前进行清理。请注意,如果 Ironic 中禁用了清理功能,OneView 用户负责在释放硬件之前手动擦除这些磁盘。

其他最终用户影响

可扩展性影响

性能影响

在大多数情况下,在 OneView 中应用服务器配置文件需要不到 2 分钟。

在少数情况下,它可能需要更长的时间,例如在固件升级中,用户必须相应地配置超时。将提供有关如何执行此操作的文档。

周期性任务对 Ironic 调度器的性能影响将与正在管理的节点数量成正比,因为它们将轮询 OneView 中的节点以检查节点是否被 OneView 用户获取/返回。我们将通过仅轮询处于特定已知状态的节点来最大程度地减少这种影响,如本规范中前面所述。然而,可以根据 OneView 使用行为和注册的节点数量调整 periodic_check_interval,以达到调度器性能的优化。

其他部署者影响

在合并此更改后,OneView 驱动程序分配节点的方式将不同。部署者应注意

  • 对于托管实例的现有节点,必须将 applied_server_profile_uri 字段添加到节点的 driver_info 命名空间中。

  • 那些分配了服务器配置文件但实际上未使用的节点(根据 预分配 模型),可以删除其服务器配置文件,并且仍然可以在 Ironic 中使用。

为了简化此过程,将提供一个迁移工具。请查看 升级 向后兼容性 以获取更多详细信息。

开发人员影响

实现

负责人

主要负责人

liliars

其他贡献者

sinval thiagop gabriel-bezerra marcusrafael nicodemos caiobo

工作项

  • 实现 oneview.deploy.OneViewIscsiDeploy

  • 实现 oneview.deploy.OneViewAgentDeploy

  • 覆盖两个接口的 prepareprepare_cleaningtear_down_cleaning 方法

  • 实现驱动程序周期性任务来处理被 OneView 用户获取的节点

  • 编写此类场景的测试用例

  • 记录这些更改

依赖项

  • python-oneviewclient 版本将被更新

测试

  • 将为更改实现单元测试;

  • OneView 第三方 CI 将用于提供适合涉及 OneView 设备和特定硬件的测试环境;

升级和向后兼容性

如本规范的 其他部署者影响 部分所述,要迁移正在使用 预分配 模型使用的节点,应将 applied_server_profile_uri 字段添加到节点的 driver_info 命名空间中。处于 available 状态的节点需要删除其服务器配置文件。为了简化在正在运行的 Ironic 部署中的此升级过程,将提供一个迁移工具,并在驱动程序的文档中正确引用。

操作员可能需要增加 workers_pool_sizeperiodic_max_workers 设置的值,以允许增加 greethread 池大小,并允许更多并行任务来处理每个周期性任务获取/返回的节点,因为 OneView 中的节点池增加。

预分配 的弃用策略

  • Newton

    • 预分配和动态分配都将受支持

    • 一个标志,用于指示 driver_info 中是否启用了动态分配

    • 如果缺少该标志,驱动程序将默认为预分配

    • 提供脚本以简化迁移过程。

    • 弃用驱动程序代码中的 预分配 功能。

  • Ocata

    • 预分配和动态分配将继续受支持(由于弃用过程)

  • P

    • 删除对 预分配 的支持

    • 忽略标志。

文档影响

OneView 驱动程序文档将相应地更新。需要解决的一些主题是:

  • 新动态分配模型的定义;

  • 节点中的字段添加;

  • 预分配 模型迁移的信息

  • 新的配置选项和可能的改进;

参考资料

OneView 页面

http://www8.hp.com/ie/en/business-solutions/converged-systems/oneview.html

OneView 2.0 REST API 参考

http://h17007.www1.hp.com/docs/enterprise/servers/oneview2.0/cic-rest/en/content/

python-oneviewclient

https://pypi.ac.cn/project/python-oneviewclient