动态端口组

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

在 Ocata 版本中,Ironic 添加了对将端口分组为端口组的支持。管理员还可以使用适当的端口组字段指定端口组的 modeproperties。但是,管理员仍然需要手动在 ToR(Top of Rack)交换机上预先创建一个端口组。或者找到其他方法来同步 Ironic 和 ML2 驱动程序之间的端口组设置。

问题描述

虽然 Ironic 提供了创建具有不同配置(模式和属性)的端口组的能力,但由于我们不会将端口组详细信息传递给 ML2 驱动程序,端口组仍然必须手动在 ToR 上预先创建。为了使端口组创建 dynamic,Ironic 应该将端口组设置传递给 Neutron ML2 驱动程序。ML2 驱动程序负责在部署期间在 ToR 交换机上进行端口组配置(创建/删除)。

目前,此规范不涵盖在执行 nova boot 时指定端口组配置的最终用户界面。当社区达成一致时,可以对其进行扩展。

提议的变更

开始通过 Neutron 端口 binding:profile 字段将端口组信息传递给 Neutron ML2 驱动程序。适当的 Neutron ML2 驱动程序将使用该信息在 ToR 交换机上动态创建端口组。

注意

我们不能使用现有的 binding:profile local_link_information 键,因为它是一个包含端口详细信息的列表,其中 switch_idport_id 是必需的键。对于端口组对象,由于端口组是虚拟接口并且可能跨多个交换机,因此不需要这些键。例如 MLAG 配置。

绑定配置文件数据结构

  • 引入新的 local_group_information 字典,用于存储端口组信息。

  • 仅为端口对象重用现有的 local_link_information

带有 local_link_information 重用的 binding:profile 的 JSON 示例

"binding:profile": {
    'local_link_information': [
        {
            'switch_info': 'tor-switch0',
            'port_id': 'Gig0/1'
            'switch_id': 'aa:bb:cc:dd:ee:ff'
        },
        {
            'switch_info': 'tor-switch0',
            'port_id': 'Gig0/2',
            'switch_id': 'aa:bb:cc:dd:ee:ff'
        }
    ],
    'local_group_information': {
            'id': '51a9642b-1414-4bd6-9a92-1320ddc55a63',
            'name': 'PortGroup0',
            'bond_mode': 'active-backup',
            'bond_properties': {
                'bond_xmit_hash_policy': 'layer3+4',
                'bond_miimon': 100,
            }
        },
}

数据类型

字段名称

描述

id

Ironic 端口组对象的 UUID

name

Ironic 端口组的名称

bond_mode

Ironic 端口组模式

bond_properties

Ironic 端口组属性

switch_info

交换机的hostname

port_id

交换机上的端口标识符

switch_id

交换机的标识符,例如mac地址

注意

建议从 [1] 中选择 bond_modebond_properties 的键/值,因为它们将由用户操作系统使用。

备选方案

  • 当管理员在 ToR 交换机上预先创建端口组时,以静态方式使用端口组。

  • 如果 ML2 驱动程序支持端口组创建,请确保 Ironic 和 ML2 中的端口组属性相同。

数据模型影响

无。

状态机影响

无。

REST API 影响

无。

客户端 (CLI) 影响

无。

RPC API 影响

无。

驱动程序 API 影响

无。

Nova 驱动程序影响

无。

Ramdisk 影响

无。

安全影响

无。

其他最终用户影响

无。

可扩展性影响

无。

性能影响

无。

其他部署者影响

无需在 ToR 交换机上预先创建端口组。只需要在 Ironic 端口组对象中指定端口组配置即可。

开发人员影响

树外网络接口应更新为通过 Neutron 端口 binding:profile 字段的 links 数组传递 portgroup.modeportgroup.properties。供应商负责处理 links 以支持动态端口组。

实现

负责人

主要负责人

vsaienko <vsaienko@mirantis.com>

工作项

  • 更新 neutron 网络接口,以将 绑定配置文件数据结构 中描述的数据结构传递给 Neutron。

  • 将动态端口组支持添加到 networking-generic-switch

  • 使用适当的测试更新 tempest。

依赖项

动态端口组支持取决于 Neutron ML2 驱动程序的功能,该功能正在开发中,以处理 binding:profile 字段中的 links 数组。

测试

  • 将动态端口组支持添加到 networking-generic-switch

  • 使用适当的测试更新 tempest。

升级和向后兼容性

保留向后兼容性,因为 Ironic 仍将在 Neutron 端口 binding:profile 字段中传递 local_link_information

文档影响

此功能将完全记录。

参考资料