OVN agent

OVN agent 是一个可以在运行 ovn-controller 服务的任何节点上执行的服务。该 agent 提供 OVN 未提供的附加功能;例如,虚拟机和 Nova 元数据服务之间的元数据代理。该 agent 将取代 OVN 元数据 agent 的需求。

OVN 和 OVS 数据库连接

OVN agent 可以访问运行服务的本地 OVS 数据库。它还可以访问 Northbound 和 Southbound OVN 数据库。连接字符串定义在 agent 配置文件中

[ovn]
ovn_nb_connection = tcp:192.168.10.100:6641
ovn_sb_connection = tcp:192.168.10.100:6642
[ovs]
ovsdb_connection = tcp:127.0.0.1:6640

可插拔扩展

OVN agent 通过扩展提供功能。当 agent 启动时,OVNAgentExtensionManager 实例加载配置的扩展。这些扩展在 stevedore 入口点中定义,位于“neutron.agent.ovn.extensions”部分下。扩展在 agent 配置文件中的“extensions”参数中定义

[agent]
extensions = metadata

devstack 中,[agent]extensions 配置参数由 OVN_AGENT_EXTENSIONS 设置。

每个扩展都将继承自 OVNAgentExtension,它为 OVN agent 扩展提供 API。扩展加载分为两个步骤

  • 初始化:此阶段涉及调用 OVNAgentExtension.consume_apiOVNAgentExtension.initialize(按此顺序)。第一个将扩展 API 分配给实例。在这种情况下,OVN agent 具有一个特定的实例 OVNAgentExtensionAPI,它使用相同的 IDL 实例为扩展提供访问 OVS 和 OVN 数据库所需的权限。第二个在基类中当前未使用;例如,在元数据扩展中,它可以用于生成进程监视器。

  • 启动:在此阶段,建立 OVN 和 OVS 数据库连接并可以访问。扩展管理器将调用每个扩展的 OVNAgentExtension.start 方法。

每个扩展应定义一组要监视的 OVS、OVN Northbound 和 OVN Southbound 表,以及与这些数据库相关的事件集。OVN agent 将使用这些表和事件的组合创建相应的 IDL 连接。

事件驱动服务

OVN agent 是一种 oslo_service.service.Service 类型的类,在执行脚本时启动。初始化后,服务将等待触发操作的新事件。如前一节所述,每个扩展将订阅来自 OVN 和 OVS 数据库的一组事件;这些事件将触发在 OVN agent 上执行的一组操作。

Zuul CI 测试

为了启用这个新的 agent,需要

  • 禁用默认的 OVN 元数据 agent(devstack 服务 q-ovn-metadata-agent)。

  • 启用 OVN agent(devstack 服务 q-ovn-agent)。

查看 Neutron CI 作业 neutron-tempest-plugin-ovn 定义和 [OVN] 在“neutron-tempest-plugin-ovn”中使用 OVN agent 以获取更多信息。