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:
parent
512d6d80e0
commit
a8a3ba0a6e
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
|
@ -45,6 +45,7 @@ Design documents
|
|||
kuryr_kubernetes_versions
|
||||
network_policy
|
||||
updating_pod_resources_api
|
||||
lbaas_reconciliation_design.rst
|
||||
|
||||
|
||||
Indices and tables
|
||||
|
|
|
@ -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%
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue