octavia/specs/version15.0/resize.rst
Pierre-Yves Jourel 29855ddc69 Add specs to resize a load balancer
This specification explains how the resizing mechanism can be implemented.

Change-Id: I9c3499b703bf0beab305cc071c74ae3acbcc4c24
2024-07-02 09:33:17 -04:00

150 lines
3.7 KiB
ReStructuredText

======================
Load balancer resizing
======================
Link to blueprint: https://blueprints.launchpad.net/octavia/+spec/octavia-resize-loadbalancer
This spec's goal is to describe the functionality of resizing of load
balancers. The main aim of this new feature is to enable you to change the
flavor directly from the API.
Problem description
===================
Today's users can't easily change the flavor. They have to recreate their load
balancer with the new flavor and migrate their configurations such as
l7 rules, listeners, etc.
This can be very tedious for a user who wants to quickly resize his load
balancer. It can be especially complicated to script.
Proposed change
===============
The proposed change would be to add an endpoint to allow load balancer
resizing. It would also be easy to cancel a resize in progress and return
to the previous flavor.
To achieve this, the endpoint will launch a workflow to initiate a failover
with the new flavor ID. This will involve patching the `get_failover_LB_flow`
to add the `flavorId` parameter. At the end of the workflow the `flavor_id`
will be updated in the `loadbalancer` table.
A check will be added before the start of the failover to prevent migration
to a flavor profile topology different from the original one. A user cannot
migrate from a flavorprofile standalone to active/passive.
If a problem occurs during resizing, the load balancer status will be set
to ERROR. The flavor will remain the same in database, allowing the user
to perform a failover or retry the same call.
Alternatives
------------
* Rebuild the vm of the loadbalancer with the new flavor compute.
* Use the "backup" and "restore".
Data model impact
-----------------
None
REST API impact
---------------
Add one endpoint in `/v2.0/lbaas/loadbalancers`.
To run this endpoint, the user must have the role `load-balancer:write"`.
Start a resize of a load balancer::
PUT /v2.0/lbaas/loadbalancers/{loadbalancer_id}/resize
{
"new_flavor_id": "6d425a5e-429f-4848-b240-ab31c6d211e4"
}
.. list-table:: Response code
:widths: 15 50
:header-rows: 1
* - Code
- Description
* - 202 Accepted
- Resize starting
* - 400 Bad request
- Resize object is invalid
* - 401 Unauthorized
- X-Auth-Token is invalid
* - 403 Forbidden
- X-Auth-Token is valid, but the associated project does not have
the appropriate role/scope
* - 404 Not Found
- Load balancer not found
Security impact
---------------
None
Notifications impact
--------------------
Add a notification to announce a loadbalancer resize.
Other end user impact
---------------------
Add one command to launch resize in CLI client.
Start a resize: openstack loadbalancer resize \
--flavor <flavor-id|flavor-name> \
<lb-id|lb-name>
Add functions to resize in the `openstacksdk`.
Performance Impact
------------------
None
Other deployer impact
---------------------
None
Developer impact
----------------
None
Implementation
==============
Assignee(s)
-----------
TBD
Work Items
----------
- Create endpoints
- Patch the `get_failover_LB_flow` to add `flavorId` parameter.
- Add unit tests
- Add API functional tests
- Add tempest tests
- Update Octavia CLI and OpenstackSDK
- Write Documentation
Dependencies
============
None
Testing
=======
Tempest tests should be added for testing this new feature:
- Create a loadbalancer
- Try to resize
Documentation Impact
====================
- A user guide to explain how that works.
- Add a note on the fact that some flavor changes can cause data plane
downtime. Similarly, going from a newer image tag to an older one may
cause failures or features to be disabled.
References
==========
None