严格最小带宽支持 (出向)¶
问题描述¶
RFE 链接: https://bugs.launchpad.net/neutron/+bug/1578989
Newton 版本增加了 QoS 策略规则的最小带宽支持。虽然此改进在 hypervisor 级别有效,但它是一种尽力而为的措施,无法防止特定网络链路带宽的过度订阅(当 SUM i port[i].min_bw > 提供网络内的最大可用带宽时)。
NFV/电信运营商对这些类型的规则感兴趣,以确保功能不会过度承诺计算节点。
云服务提供商可以利用此功能为流媒体提供带宽保证。
提议的变更¶
为了提供严格的约束,我们需要通过与新的 Nova placement API [1][2] 集成,与 Nova 协同调度。
Neutron L2 代理,或特定的插件/后端将负责将每个计算资源注册到 placement API。建议 L2 代理承担此责任,因为它模仿了 Nova 中的设计决策,Nova-compute 将资源报告给此类 API。这样做的好处是将工作负载分布到所有节点,而不是让中央服务负责与 placement API 同步。
资源将采用以下形式,请注意 INGRESS 仅供参考,但超出此规范的范围
NIC_BW_EGRESS.<物理网络> NIC_BW_INGRESS.<物理网络>
物理网络将在参考实现中为“physnet”,或在请求隧道路径上的带宽时为“tunneling”。
虽然建模隧道带宽并非易事,因为它可能因主机路由器和接口而异,但我们将从这个简单的模型开始。
Nova 将使用这些细节来减少和管理其侧面的库存。
当 Nova 创建、更新或获取端口时,Neutron 将在响应中显示端口所需的资源计数,从而消除了 Nova 对 Neutron QoS 策略规则的任何依赖。
{"port": {
"status": "ACTIVE",
"name": "",
...
"device_id": "5e3898d7-11be-483e-9732-b2f5eccd2b2e",
"resources": { "NIC_BW_EGRESS.ext-net": 1000, /*kbps*/
"NIC_BW_INGRESS.ext-net": 1000}
}}
这个额外的字典可以合并到 QoS 扩展本身中,但创建一个与 QoS 扩展无关的东西更有意义,其他资源感知扩展也可以使用它。
在网络配置中,我们需要解决一个常见的架构问题。将多个接口绑定在一起是很常见的,并且将每个特定的 physnet 甚至 tunneling 通过这种绑定的 VLAN 传递。
为了正确处理这种情况,我们需要使虚拟 physnet 处理嵌套,例如,为每个代理提供如下配置
[qos]
virtual_physnets = bond0phys:bond0, bond1phys:bond1
nested_physnets = bond0phys:physnetA, bond0phys:physnetB, \
bond0phys:tunneling, \
bond1phys:physnetC, bond1phys:physnetD
在这种情况下,资源到 nova 的 <物理网络> 部分将由 physnetA / physnetB / tunneling 的 bond0phys 代替,由 physnetC 和 D 的 bond1phys 代替。
额外的间接层由 virtual_physnets 提供,因此接口名称更改不会使 nova 资源和分配不同步。
在这种特定情况下,总带宽将从 bond0 和 bond1 收集,并报告给 NIC_BW_{EGRESS,INGRESS}.{bond0phys,bond1phys},请参阅工作项 1。
依赖项¶
我们依赖于几个 Nova 更改,这些更改将允许定义自定义资源类 [4]。
工作项¶
从代理收集 physnet 的可用带宽,并具有在配置中覆盖带宽的能力。Assignee: Rodolfo Alonso <rodolfo.alonso.hernandez@intel.com>
编写一个 API,用于将收集到的带宽信息发送到 Nova placement API。对于 in-tree 驱动程序,可以立即从代理发送此信息,以避免 neutron-server 瓶颈问题。但 out-of-tree 驱动程序将有权从 QoS 驱动程序本身使用此 API,例如,通过定期与后端同步来获取带宽信息。或者,out-of-tree 驱动程序可以选择从后端本身将 placement 信息发送到 nova。Assignee: Miguel Lavalle
Nova placement API 客户端(自定义资源类 [4])初始 nova placement API 客户端已经合并 [3] Assignee: Miguel Lavalle(他正在处理路由网络)
使资源字段在 nova 的端口创建/更新/获取时可用。Assignee: Slawek Kaplonski
参考资料¶
[1] https://docs.openstack.org/developer/nova/placement.html [2] https://docs.openstack.org/developer/nova/placement_dev.html [3] https://review.openstack.org/#/c/414726 [4] https://review.openstack.org/#/q/topic:bp/custom-resource-classes [5] https://github.com/openstack/nova/tree/master/nova/scheduler/client