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

3.7 KiB

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"
}
Response code
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-idlb-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