From d52ea93ce027221f82cb3473ba70475f35e42da6 Mon Sep 17 00:00:00 2001 From: Tomi Juvonen Date: Fri, 9 Nov 2018 10:05:19 +0200 Subject: [PATCH] Add Fenix architecture documentation Story: 2004292 Task: #27875 Change-Id: Ifeed52ea6046372da6d44d3d58a38070a8d897da Signed-off-by: Tomi Juvonen --- doc/source/images/fenix-interface.png | Bin 0 -> 64434 bytes doc/source/images/fenix-internal.png | Bin 0 -> 41199 bytes doc/source/user/architecture.rst | 101 ++++++++++++++ doc/source/user/baseworkflow.rst | 190 ++++++++++++++++++++++++++ doc/source/user/index.rst | 6 +- 5 files changed, 296 insertions(+), 1 deletion(-) create mode 100644 doc/source/images/fenix-interface.png create mode 100644 doc/source/images/fenix-internal.png create mode 100644 doc/source/user/architecture.rst create mode 100644 doc/source/user/baseworkflow.rst diff --git a/doc/source/images/fenix-interface.png b/doc/source/images/fenix-interface.png new file mode 100644 index 0000000000000000000000000000000000000000..d857faacf7aec6a138e3729a8b7c71ea7e078a85 GIT binary patch literal 64434 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%0Ah-pwINQHt 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 V(s(sx5uJiRcNcGZp)>2`{{XB-gC_t0 literal 0 HcmV?d00001 diff --git a/doc/source/user/architecture.rst b/doc/source/user/architecture.rst new file mode 100644 index 0000000..09fbc50 --- /dev/null +++ b/doc/source/user/architecture.rst @@ -0,0 +1,101 @@ +.. _architecture: + +================== +Fenix Architecture +================== + +Fenix is an engine designed to make a rolling infrastructure maintenance and +upgrade possible with zero downtime for the application running on top of it. +Interfaces are designed to be generic, so they can work with different clouds, +virtual machines and containers. The first use case is with OpenStack and VMs, +but the aim is to have a wider scope, like edge (Akraino) and Airship. + +The key in Fenix providing the zero downtime is to have an ability to +communicate with an application manager (VNFM). As the application is aware of +maintenance affecting its instances, it can safely be running somewhere else +when it happens. The application also get to know about new capabilities coming +over infrastructure maintenance/upgrade and can plan its own upgrade at the +same. As Fenix also provides scaling request towards applications, it is +possible to make upgrades without adding more resources. + +Fenix has the ability to tell any infrastructure service when a host is down +for maintenance or back in use. This is handy for different things, like +enabling/disabling self-healing or billing. The same interface could also be +used for adding/removing hosts. + +The design makes it possible to make everything with 'one-click'. Generic API, +notifications and tracking in a database are provided by Fenix together with +example workflow and action plug-ins. Anyhow, to build for specific cloud +deployment, one can provide workflow and action plug-ins to Fenix to fit to +any use case one can think of. + + +Internal design +=============== + +Fenix desing is pluggable: + +.. image:: ../images/fenix-internal.png + :width: 1064 px + :scale: 75 % + :align: left + + +**fenix-api** is used to make maintenance workflow sessions and to provide admin +and project owners an API to communicate to Fenix. + +**fenix-engine** is running the maintenance workflow sessions and keeping track +in database. + +**base workflow** is providing basic Fenix functionality that can be inherited +by the workflow plug-in used in each maintenance session. + +**workflow plug-in** is the workflow for your maintenance session. Different +plug-ins can be implemented for different clouds and deployments. + +**action plug-ins** are called by the workflow plug-in. It is possible to have +different type of plug-ins, and if there is more than one of a specific type, +one can also define the order they are executed: + +* **pre** plug-in is run first +* **host** plug-in is run for each host +* **post** plug-in is run last + +There is a possibility to define 'metadata' to further indicate plug-in +specifics. + +Interface design +================ + +Fenix has API and notifications that can be caught by different endpoint +interfaces by subscribing to corresponding event alarm: + +.. image:: ../images/fenix-interface.png + :width: 1054 px + :scale: 75 % + :align: left + +Infrastructure admin has an API to trigger, query, update and delete +maintenance sessions. Admin can also receive the status of a maintenance +session by the 'maintenance.session' notification trough 'oslo.notification'. +It is also possible to get the same information by subscribing to the +corresponding event alarm. This is handy for getting the event to own favorite +API endpoint. + +Project/application having instances on top of the infrastructure under +maintenance can have a manager (VNFM) to communicate with the maintenance +session workflow. The manager can subscribe to project specific +'maintenance.planned' event alarms to get information about maintenance session +state affecting its instances. The subscription also tells to the workflow that +the project have a manager capable of communicating with the workflow. +Otherwise, workflow should have a default behavior towards project instances, +or fail if communication is mandatory in your cloud use case. There is also +a project-specific API to query its instances under current maintenance +workflow session state and to answer back to workflow. + +Any infrastructure service can also be made to support 'maintenance.host' +notification. This notification is telling wether a host is in maintenance or +back in normal use. This might be important for enabling/disabling self-healing +or billing. Notification can also be used to indicate when a host is added or +removed. + diff --git a/doc/source/user/baseworkflow.rst b/doc/source/user/baseworkflow.rst new file mode 100644 index 0000000..a29f2d9 --- /dev/null +++ b/doc/source/user/baseworkflow.rst @@ -0,0 +1,190 @@ +.. _baseworkflow: + +================== +Fenix BaseWorkflow +================== + +BaseWorkFlow class implemented in '/fenix/workflow/workflow.py' is the one you +inherit when creating your own workflow. Example workflow 'default.py' using +this can be found from the workflow directory '/fenix/workflow/workflows'. + +The class provides the access to all maintenance session related data and the +ability to send Fenix notifications and process the incoming API requests. + +There is also a dictionary describing the generic workflow states that should be +supported: + +.. code-block:: json + + { + "MAINTENANCE": "maintenance", + "SCALE_IN": "scale_in", + "PREPARE_MAINTENANCE": "prepare_maintenance", + "START_MAINTENANCE": "start_maintenance", + "PLANNED_MAINTENANCE": "planned_maintenance", + "MAINTENANCE_COMPLETE": "maintenance_complete", + "MAINTENANCE_DONE": "maintenance_done", + "MAINTENANCE_FAILED": "maintenance_failed" + } + +Key is the state name and value is the internal method that you +iplement in your workflow to handle that state. When the method returns, it +will be checked from Class variable 'self.state' what is the next method to be +called. So your state related method should change 'self.state' to what you +want to do next. The method should also implement calling of any action plug-ins +and other state related functionality like sending notifications. + +States +====== + +Here is what is supposed to be done in different states when also utilizing +the default workflow. + +MAINTENANCE +----------- + +This is the initial state right after infrastructure admin has created the +maintenance session. + +Here one should check if all projects are subscribed to AODH event alarm for +event type 'maintenance.planned'. If project supports this, one can assume we +can have interaction with that project manager (VNFM). If not, we should have some +default handling for project instances during rolling maintenance, or we should +decide to go to state 'MAINTENANCE_FAILED' as we do not support that kind of +project. From here onwards, we assume projects support this interaction, so +can better define other coming states. + +Next, we send 'maintenance.planned' notification with state 'MAINTENANCE' to +each project. We wait for the duration of 'self.conf.project_maintenance_reply' +the reply or fail if some project did not reply. After all projects are in state +'ACK_MAINTENANCE' we can wait until the time is 'self.session.maintenance_at' +and then start the actual maintenance. + +When it is time to start we might call the type 'pre' action plugins to make +actions needed before rolling host by host forwards. This might include +downloading of needed software changes and already doing some actions for +controllers in case of maintenance operation like OpenStack upgrade. + +If currently all the compute capacity is in use and we want to have +an empty compute that we can maintain first, we should have 'self.state' as +'SCALE_IN' to scale down the application. If there is capacity, but no empty +host (assuming we want to make maintenance only to empty host), we can have +'self.state' as 'PREPARE_MAINTENANCE' to move instances around to have an empty +host if possible. In case we had an empty host, we can go straight put +'self.state' to 'START_MAINTENANCE' to start maintenance on that host. + +SCALE_IN +-------- + +We send 'maintenance.planned' notification with state 'SCALE_IN' to each +project. We wait duration of 'self.conf.project_scale_in_reply' the reply or +fail if some project did not reply. After all projects are in the state +'ACK_SCALE_IN' we can repeat the same checks as in state 'MAINTENANCE' to +decide is 'self.state' should be 'SCALE_IN', 'PREPARE_MAINTENANCE' or +'START_MAINTENANCE'. Again on any error we always put 'self.state' to +'MAINTENANCE_FAILED' + +PREPARE_MAINTENANCE +------------------- + +As we have some logic to figure out the host that we can make empty, we can +send 'maintenance.planned' notification with state 'PREPARE_MAINTENANCE' to each +project having instances on that host. We wait for the duration of +'self.conf.project_maintenance_reply' the reply or fail if some project did +not reply. After all affected projects are in state 'ACK_PREPARE_MAINTENANCE' we +can check project and instance specific answer and make action given like +'migrate' to move instances away from the host. After the action is done we will +send 'maintenance.planned' for each each instance with the state +'INSTANCE_ACTION_DONE' and with the corresponding 'instance_id'. + +Next, we should be able to put 'self.state'to 'START_MAINTENANCE'. + +START_MAINTENANCE +----------------- + +In case no hosts are maintained yet, we can go through all empty compute hosts in +the maintenance session: + + We send 'maintenance.host' notification with state 'IN_MAINTENANCE' for + each host before we start to maintain it. Then we run action plug-ins of + type 'host' + in the order they are defined to run. After we are ready with the + maintenance actions we send 'maintenance.host' notification with state + 'MAINTENANCE_COMPLETE'. + + When all empty computes are maintained we can put 'self.state' to + 'PLANNED_MAINTENANCE'. + +In case all empty hosts were already maintained, we could pick empty host that +we have after 'PLANNED_MAINTENANCE' is run on some compute host: + + We send 'maintenance.host' notification with state 'IN_MAINTENANCE' before + we start to maintain the host. Then we run action plug-ins of type 'host' in + the order they are defined to run. After we are ready with the maintenance + actions we send 'maintenance.host' notification with state + 'MAINTENANCE_COMPLETE'. + + When all empty computes are maintained we can put 'self.state' to + 'PLANNED_MAINTENANCE' or if all compute hosts are maintained we can put + 'self.state' to 'MAINTENANCE_COMPLETE'. + +PLANNED_MAINTENANCE +------------------- + +We find a host that has not been maintained yet and contains instances. After +choosing the host, we can send 'maintenance.planned' notification with state +'PLANNED_MAINTENANCE' to each project having instances on the host. After all +affected projects are in state 'ACK_PLANNED_MAINTENANCE' we can check project +and instance specific answer and make action given like 'migrate' to move +instances away from the host. After the action is done we will send +'maintenance.planned' with the state 'INSTANCE_ACTION_DONE' with the +'instance_id' for the instance action was completed. It might also be that +the project manager did already an own to re-instantiate, so we do not have to +do any action. + +When the project manager receives 'PLANNED_MAINTENANCE' it also knows that +instances will now be moved to the already maintained host. With the payload, +there will also go 'metadata' that can indicate new capabilities the project is +getting when instances are moving. It might be for example: + + "metadata": {"openstack_version": "Queens"} + +It might be nice to make the application (VNF) upgrade now at the same time +when instances are anyhow moved to new compute host with new capabilities. + +Next, when all instances are moved and the host is empty, we can put +'self.state' to 'START_MAINTENANCE' + +MAINTENANCE_COMPLETE +-------------------- + +Now all instances have been moved to already maintained compute hosts and all +compute host are maintained. Next, we might run action 'post' type of action +plug-ins to finalize maintenance. + +When this is done we can send 'maintenance.planned' notification with state +'MAINTENANCE_COMPLETE' to each project. In case projects scaled down at the +beginning of the maintenance they can now scale back to full operation. After +all projects are in state 'ACK_MAINTENANCE_COMPLETE' we can change the +'self.state' to 'MAINTENANCE_DONE' + +MAINTENANCE_DONE +---------------- + +This will now make the maintenance session idle until infrastructure admin will +delete it. + +MAINTENANCE_FAILED +------------------ + +This will now make the maintenance session idle until infrastructure admin will +fix and continue the session or delete it. + + +Future +====== + +Currently, infrastructure admin needs to poll Fenix API to know the session +state. When notification with the event type 'maintenance.session' gets +implemented, infrastructure admin will be receiving state change whenever it +will change. diff --git a/doc/source/user/index.rst b/doc/source/user/index.rst index 066e544..1c99617 100644 --- a/doc/source/user/index.rst +++ b/doc/source/user/index.rst @@ -2,4 +2,8 @@ Users guide =========== -Users guide of fenix. +.. toctree:: + :maxdepth: 2 + + architecture + baseworkflow