From f14a1b332d829289e9dff96f94b49491fbde9ec4 Mon Sep 17 00:00:00 2001 From: Lucas Alvares Gomes Date: Thu, 4 Jun 2020 10:48:08 +0100 Subject: [PATCH] [OVN] Add router availability zones documentation This patch is adding documentation about the router availability zones feature in the OVN driver. Change-Id: I6c8267100e1ee82c8b563528467b50b91f7700f6 Related-Bug: #1881095 Signed-off-by: Lucas Alvares Gomes --- doc/source/admin/ovn/index.rst | 1 + .../admin/ovn/router_availability_zones.rst | 208 ++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 doc/source/admin/ovn/router_availability_zones.rst diff --git a/doc/source/admin/ovn/index.rst b/doc/source/admin/ovn/index.rst index 6ef372d75ff..ad7b62e3a32 100644 --- a/doc/source/admin/ovn/index.rst +++ b/doc/source/admin/ovn/index.rst @@ -14,3 +14,4 @@ OVN Driver Administration Guide dpdk troubleshooting sriov + router_availability_zones diff --git a/doc/source/admin/ovn/router_availability_zones.rst b/doc/source/admin/ovn/router_availability_zones.rst new file mode 100644 index 00000000000..1efb843d589 --- /dev/null +++ b/doc/source/admin/ovn/router_availability_zones.rst @@ -0,0 +1,208 @@ +.. _ovn_router_availability_zones: + +======================================= +Router Availability Zones guide for OVN +======================================= + +The purpose of this page is to describe how the router availability zones +works with OVN. Prior to reading this document, it is recommended to first +read :ref:`ML2/OVS driver Availability Zones guide`. + +How to configure it +~~~~~~~~~~~~~~~~~~~ + +Different from the ML2/OVS driver for Neutron the availability zones for +the OVN driver is not configured via a configuration file. Since ML2/OVN +does not rely on an external agent such as the L3 agent, certain nodes +(e.g gateway/networker node) won't have any Neutron configuration file present. For +this reason, OVN uses the local OVSDB for configuring the availability +zones that instance of ``ovn-controller`` running on that hypervisor +belongs to. + +The configuration is done via the ``ovn-cms-options`` entry in +*external_ids* column of the local *Open_vSwitch* table: + +.. code-block:: bash + + $ ovs-vsctl set Open_vSwitch . external-ids:ovn-cms-options="enable-chassis-as-gw,availability-zones=az-0:az-1:az-2" + +.. end + +The above command is adding two configurations to the ``ovn-cms-options`` +option, the ``enable-chassis-as-gw`` option which tells the OVN driver +that this is a gateway/networker node and the ``availability-zones`` +option specifying three availability zones: **az-0**, **az-1** and +**az-2**. + +Note that, the syntax used to specify the availability zones is the +``availability-zones`` word, followed by an equal sign (=) and a +**colon** separated list of the availability zones that this local +``ovn-controller`` instance belongs to. + +To confirm the specific ``ovn-controller`` availability zones, check the +**Availability Zone** column in the output of the command below: + +.. code-block:: bash + + $ openstack network agent list + +--------------------------------------+------------------------------+----------------+-------------------+-------+-------+----------------+ + | ID | Agent Type | Host | Availability Zone | Alive | State | Binary | + +--------------------------------------+------------------------------+----------------+-------------------+-------+-------+----------------+ + | 2d1924b2-99a4-4c6c-a4f2-0be64c0cec8c | OVN Controller Gateway agent | gateway-host-0 | az0, az1, az2 | :-) | UP | ovn-controller | + +--------------------------------------+------------------------------+----------------+-------------------+-------+-------+----------------+ + +.. end + +.. note:: + + If you know the UUID of the agent the "**openstack network agent show + **" command can also be used. + +.. end + +To confirm the availability zones defined in the system as a whole: + +.. code-block:: bash + + $ openstack availability zone list + +-----------+-------------+ + | Zone Name | Zone Status | + +-----------+-------------+ + | az0 | available | + | az1 | available | + | az2 | available | + +-----------+-------------+ + +.. end + +Using router availability zones +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In order to create a router with availability zones the +``--availability-zone-hint`` should be passed to the create command, +note that this parameter can be specified multiple times in case the +router belongs to more than one availability zone. For example: + +.. code-block:: bash + + $ openstack router create --availability-zone-hint az-0 --availability-zone-hint az-1 router-0 + +-------------------------+--------------------------------------+ + | Field | Value | + +-------------------------+--------------------------------------+ + | admin_state_up | UP | + | availability_zone_hints | az-0, az-1 | + | availability_zones | | + | created_at | 2020-06-04T08:29:33Z | + | description | | + | external_gateway_info | null | + | flavor_id | None | + | id | 8fd6d01a-57ad-4e91-a788-ebe48742d000 | + | name | router-0 | + | project_id | 2a364ced6c084888be0919450629de1c | + | revision_number | 1 | + | routes | | + | status | ACTIVE | + | tags | | + | updated_at | 2020-06-04T08:29:33Z | + +-------------------------+--------------------------------------+ + +.. end + +It's also possible to set the default availability zones via the +*/etc/neutron/neutron.conf* configuration file: + +.. code-block:: ini + + [DEFAULT] + default_availability_zones = az-0,az-2 + ... + +.. end + +When scheduling the gateway ports of a router, the OVN driver will take +into consideration the router availability zones and make sure that the +ports are scheduled on the nodes belonging to those availability zones. + +Note that in the router object we have two attributes +related to availability zones: ``availability_zones`` and +``availability_zone_hints``: + +.. code-block:: bash + + | availability_zone_hints | az-0, az-1 | + | availability_zones | | + +.. end + +This distinction makes more sense in the **ML2/OVS** driver which +relies on the L3 agent for its router placement (see the :ref:`ML2/OVS +driver Availability Zones guide` for more information). In +**ML2/OVN** the ``ovn-controller`` service will be running on all nodes +of the cluster so the ``availability_zone_hints`` will always match the +``availability_zones`` attribute. + +OVN Database information +~~~~~~~~~~~~~~~~~~~~~~~~ + +In order to check the availability zones of a router +via the OVN Northbound database, one can look for the +``neutron:availability_zone_hints`` key in the ``external_ids`` +column for its entry in the ``Logical_Router`` table: + +.. code-block:: bash + + $ ovn-nbctl list Logical_Router + _uuid : 4df68f1e-17dd-4b9a-848d-b6152ae19203 + external_ids : {"neutron:availability_zone_hints"="az-0,az-1", "neutron:gw_port_id"="", "neutron:revision_number"="1", "neutron:router_name"=router-0} + name : neutron-8fd6d01a-57ad-4e91-a788-ebe48742d000 + ... + +.. end + + +To check the availability zones of the Chassis, look at the +``ovn-cms-options`` key in the ``other_config`` column (or +``external_ids`` for an older version of OVN) of the ``Chassis`` table +in the OVN Southbound database: + +.. code-block:: bash + + $ ovn-sbctl list Chassis + _uuid : abaa9f07-9988-40c0-bd1a-8d8326af08b0 + name : "2d1924b2-99a4-4c6c-a4f2-0be64c0cec8c" + other_config : {..., ovn-cms-options="enable-chassis-as-gw,availability-zones=az-0:az-1:az-2"} + ... + +.. end + +As mentioned in the `Using router availability zones`_ section, the +scheduling of the gateway router ports will take into consideration +the availability zones that the router belongs to. We can confirm +this behavior by looking in the ``Gateway_Chassis`` table from the OVN +Southbound database: + +.. code-block:: bash + + $ ovn-sbctl list Gateway_Chassis + _uuid : ac61b70f-ff51-43d9-830b-f9bc6d74090a + chassis_name : "2d1924b2-99a4-4c6c-a4f2-0be64c0cec8c" + external_ids : {} + name : lrp-5a40eeca-5233-4029-a470-9018aa8b3de9_2d1924b2-99a4-4c6c-a4f2-0be64c0cec8c + options : {} + priority : 2 + + _uuid : c1b7763b-1784-4e5a-a948-853662faeddc + chassis_name : "1cde2542-69f9-4598-b20b-d4f68304deb0" + external_ids : {} + name : lrp-5a40eeca-5233-4029-a470-9018aa8b3de9_1cde2542-69f9-4598-b20b-d4f68304deb0 + options : {} + priority : 1 + +.. end + +Each entry on this table represents an instance of the gateway port +(L3 HA, for more information see :ref:`Routing in OVN`), +the ``chassis_name`` column indicates which Chassis that port instance +is scheduled onto. If we co-relate each entry and their ``chassis_name`` +we will see that this port has been only scheduled to Chassis matching +with the router's availability zones.