Merge "[OVN] Add router availability zones documentation"
This commit is contained in:
commit
d9d273e538
@ -14,3 +14,4 @@ OVN Driver Administration Guide
|
|||||||
dpdk
|
dpdk
|
||||||
troubleshooting
|
troubleshooting
|
||||||
sriov
|
sriov
|
||||||
|
router_availability_zones
|
||||||
|
208
doc/source/admin/ovn/router_availability_zones.rst
Normal file
208
doc/source/admin/ovn/router_availability_zones.rst
Normal file
@ -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<config-az>`.
|
||||||
|
|
||||||
|
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
|
||||||
|
<UUID>**" 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<config-az>` 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<ovn_routing>`),
|
||||||
|
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.
|
Loading…
Reference in New Issue
Block a user