Merge "[OVN] Add documentation about the OVN agent"
This commit is contained in:
commit
91e8dc52b5
|
@ -13,3 +13,4 @@ OVN Driver
|
||||||
dhcp_opts.rst
|
dhcp_opts.rst
|
||||||
ml2ovn_trace.rst
|
ml2ovn_trace.rst
|
||||||
faq/index.rst
|
faq/index.rst
|
||||||
|
ovn_agent.rst
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
.. _ovn_agent:
|
||||||
|
|
||||||
|
OVN agent
|
||||||
|
=========
|
||||||
|
|
||||||
|
The OVN agent is a service that could be executed in any node running the
|
||||||
|
ovn-controller service. This agent provides additional functionalities not
|
||||||
|
provided by OVN; for example, a metadata proxy between the virtual machines
|
||||||
|
and the Nova metadata service. This agent will replace the need of
|
||||||
|
the OVN metadata agent.
|
||||||
|
|
||||||
|
|
||||||
|
OVN and OVS database connectivity
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
The OVN agent can access the local OVS database where the service is
|
||||||
|
running. It also has access to the Northbound and Southbound OVN databases. The
|
||||||
|
connection strings to these databases are defined in the agent configuration
|
||||||
|
file:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
[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
|
||||||
|
|
||||||
|
|
||||||
|
Plugable extensions
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The OVN agent provides functionalities via extensions. When the agent is
|
||||||
|
started, the ``OVNAgentExtensionManager`` instance loads the configured
|
||||||
|
extensions. The extensions are defined in the stevedore entry points, under
|
||||||
|
the section "neutron.agent.ovn.extensions". The extensions are defined in the
|
||||||
|
agent configuration file in the "extensions" parameter:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
[DEFAULT]
|
||||||
|
extensions = metadata
|
||||||
|
|
||||||
|
|
||||||
|
Each extension will inherit from ``OVNAgentExtension``, which provides the API
|
||||||
|
for an OVN agent extension. The extensions are loaded in two steps:
|
||||||
|
|
||||||
|
* Initialization: this phase involves the call of
|
||||||
|
``OVNAgentExtension.consume_api`` and ``OVNAgentExtension.initialize`` (in
|
||||||
|
this order). The first one assigns the extension API to the instance. In this
|
||||||
|
case, the OVN agent has a specific instance ``OVNAgentExtensionAPI`` that
|
||||||
|
gives to the extensions the needed access to OVS and OVN databases, using the
|
||||||
|
same IDL instance. The second one is not currently used in the base class;
|
||||||
|
it could be used, for example as in the metadata extension, to spawn the
|
||||||
|
process monitor.
|
||||||
|
* Start: in this phase, the OVN and OVS database connections are established
|
||||||
|
and can be accessed. The extension manager will call each extension
|
||||||
|
``OVNAgentExtension.start`` method.
|
||||||
|
|
||||||
|
|
||||||
|
Each extension should define a set of OVS, OVN Northbound and OVN Southbound
|
||||||
|
tables to monitor, and a set of events related to these databases. The OVN
|
||||||
|
agent will create the corresponding IDL connections using the conjunction of
|
||||||
|
these tables and events.
|
||||||
|
|
||||||
|
|
||||||
|
Event-driven service
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The OVN agent is a ``oslo_service.service.Service`` type class, that is
|
||||||
|
launched when the script is executed. Once initialized, the service is waiting
|
||||||
|
for new events that will trigger actions. As mentioned in the previous section,
|
||||||
|
each extension will subscribe to a set of events from the OVN and OVS
|
||||||
|
databases; these events will trigger a set of actions executed on the OVN
|
||||||
|
agent.
|
Loading…
Reference in New Issue