支持接口附加带 QoS 端口

https://blueprints.launchpad.net/nova/+spec/support-interface-attach-with-qos-ports

自从 微版本 2.72 起,nova 支持使用 neutron 端口创建服务器,这些端口具有资源请求。在最近的版本中,也添加了对这些端口的生命周期操作的支持。下一步是支持将 QoS 端口附加到正在运行的实例。

问题描述

如果端口具有资源请求,nova 不支持将端口附加到正在运行的实例。自 Neutron 在 Stein 中添加端口资源请求支持以来,此类 接口附加被拒绝

用例

作为最终用户,我希望将一个具有 QoS 最小带宽规则的新接口添加到我的服务器,并且我希望该操作仅在可以保证请求的带宽时才能成功。

提议的变更

ComputeManager 中的 attach_interface RPC 处理程序需要使用以下逻辑进行扩展

  • 从 Neutron 获取端口资源请求

  • 基于端口资源请求调用 placement allocation_candidates API,但使用 in_tree 过滤器将查询限制在当前的 RP 树中。

  • 选择第一个候选者并记录候选者的资源提供者映射

  • 基于选定的候选者更新实例分配

  • 如果存在,则使用端口分配的设备的资源提供者的父物理设备的接口名称更新端口的 InstancePciRequest

  • 如果存在,则像今天一样执行 PCI 声明

  • 将资源提供者映射传递给 allocate_for_instance 调用候选者

需要处理一些新的错误情况。attach_interface compute RPC 调用是同步的,因此错误情况可能导致 HTTP 错误代码

  • Placement 返回没有分配候选者,则响应 HTTP 400,类似于 NoValidHost

  • 由于资源冲突,更新实例分配失败,则使用另一个候选者重试。如果用完候选者,则响应 HTTP 400

  • 由于生成冲突,更新实例分配失败,则从 placement 重新加载分配并重试更新。如果重试 3 次后仍然失败,则响应 HTTP 409

  • 使用父接口名称更新 InstancePciRequest 失败,则响应 HTTP 400

所有错误情况都将服务器保持在 ACTIVE 状态并记录失败的实例操作。此外,这些都不会引入此 API 的新的 HTTP 响应代码,因此不需要新的微版本。

备选方案

数据模型影响

REST API 影响

POST /servers/{server_id}/os-interface 带有具有资源请求的 Neutron 端口将被接受。这与支持 QoS 端口的移动操作类似,并且在不增加微版本的情况下完成了这一点。因此,此更改也将不增加微版本。

安全影响

通知影响

其他最终用户影响

性能影响

需要进行额外的 placement 分配候选者查询,以选择哪个物理设备可以容纳主机上的额外资源请求,然后需要根据选定的候选者在 placement 中更新实例分配。这些查询仅在端口具有资源请求时运行,并且分配候选者查询将限制在实例当前正在运行的主机上,因此整体性能影响有限。

其他部署者影响

开发人员影响

升级影响

此功能的实现主要在 nova-compute 服务的 ComputeManager 中。因此,需要更新 compute 服务版本。目前,API 拒绝此类附加请求。API 中的相关检查需要替换为服务级别检查,以确保仅当托管 VM 的 compute 服务足够新以支持该请求时才接受附加请求。

实现

负责人

主要负责人

balazs-gibizer

功能联络人

功能联络人

balazs-gibizer

工作项

请参阅 提议的更改 部分

依赖项

测试

将为正常和 PCI 设备支持的接口提供单元和功能测试。由于 CI 系统对 SRIOV 功能网络设备的限制,Tempest 测试将仅为正常端口提供。

文档影响

API 指南 使用具有资源请求的端口 将相应更新。此外,neutron 管理指南的限制部分 保证的最小带宽质量 需要更新。

参考资料

历史

修订版

发布名称

描述

Wallaby

引入