Kuryr Kubernetes Loadbalancers Reconciliation Design

The purpose of this document is to define the design decision behind
the OpenStack resources reconciliation. A ServiceReconciliationHandler
is added to the Kuryr Controller pipeline which manages the OpenStack
service events.

Change-Id: Ib28708fa726137469913f1b83e679a905490b218
This commit is contained in:
Sunday Mgbogu 2021-06-14 06:54:33 +01:00
parent 512d6d80e0
commit a8a3ba0a6e
4 changed files with 80 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -45,6 +45,7 @@ Design documents
kuryr_kubernetes_versions
network_policy
updating_pod_resources_api
lbaas_reconciliation_design.rst
Indices and tables

View File

@ -0,0 +1,79 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
Convention for heading levels in Neutron devref:
======= Heading 0 (reserved for the title in a document)
------- Heading 1
~~~~~~~ Heading 2
+++++++ Heading 3
''''''' Heading 4
(Avoid deeper levels because they do not render well.)
====================================================
Kuryr Kubernetes Loadbalancers Reconciliation Design
====================================================
Purpose
-------
The purpose of this document is to present an approach for implementing the
design of the Kuryr Kubernetes Loadbalancers reconciliation.
Overview
--------
Currently, if the OpenStack loadbalancer is manually deleted or removed,
due to the Octavia loadbalancer being stuck on PENDING_UPDATE, Kuryr does
not detect this event neither does it recreate the OpenStack resources.
Hence, it is necessary to monitor changes in OpenStack resources in order
to ensure that the information on the "spec" section of the CRD is represented
on OpenStack, and then update the "status" of the CRD with the recovered or
created OpenStack resources.
Proposed Solution
-----------------
The implementation requires detecting changes in OpenStack loadbalancers
and reconciling with KuryrKubernetes CRD. The OpenStack resources are pooled
occasionally to check for the information on the spec data. If some resources
on OpenStack are missing, we remove them from the associated KuryrLoadBalancer
CRD status, so that the KuryrLoadBalancerHandler react to it (re-executes the
on_present function) and by executing the sync_lbaas_member function reconciles
it (i.e., recovering the existing resources, recreating the missing ones).
Diagram describing Loadbalancers Reconciliation Design
.. image:: ../../images/lbaas_recon_design.png
:alt: Lbaas reconciliation design
:align: center
:width: 100%
Kuryr Controller Impact
~~~~~~~~~~~~~~~~~~~~~~~
We shall implement a reconciliation event which checks the OpenStack loadbalancers
for missing spec data. Since the KuryrLoadBalancerHandler watches the
KuryrLoadBalancers CRD, we shall implement the reconciliation event on the handler.
If there is a missing information on the OpenStack resource, the
KuryrLoadBalancerHandler which has the KuryLoadBalancer CRD, sets the status field
to `empty`. This triggers the KuryrLoadBalancerHandler which then reconciles the
OpenStack resources by calling the LoadBalancer Driver.
Diagram describing Loadbalancers Reconciliation Design
.. image:: ../../images/lbaas_recon_flow.png
:alt: Lbaas reconciliation flow design
:align: center
:width: 100%