Create a project tag for zero-downtime upgrades
In transitioning projects towards a rolling upgrades strategy, it's become clear that there are additional levels of granularity, reflecting the additional difficulty of implementing and maintaining acceptable solutions. The existing asserts:supports-rolling-upgrade tag allows for minimal downtime of the control plane during the upgrade process. This tag raises the bar further by eliminating that allowance. As a concession, this tag still allows for performance degradation during the upgrade process, which we could again eliminate in a more restrictive tag as projects begin to assert this one. With this patch, the upgrade-related tags would then include: 1. asserts:supports-upgrade 2. asserts:supports-rolling-upgrade 3. asserts:supports-zero-downtime-upgrade Change-Id: I8b191f7d56702aa21273c61417af4bdf1de2abb0
This commit is contained in:
parent
f514a93082
commit
e80e5c7275
@ -46,7 +46,9 @@ Requirements
|
||||
there are no such caveats. This does not require complete
|
||||
elimination of downtime during upgrades, but rather reducing the
|
||||
scope from "all services" to "some services at a time." In other
|
||||
words, "restarting all API services together" is a reasonable restriction.
|
||||
words, "restarting all API services together" is a reasonable restriction. A
|
||||
more restrictive tag, :ref:`tag-assert:supports-zero-downtime-upgrade`
|
||||
removes this allowance.
|
||||
* Full stack integration testing with services arranged in a
|
||||
mid-upgrade manner is performed on every proposed commit to validate
|
||||
that mixed-version services work together properly. This testing
|
||||
|
78
reference/tags/assert_supports-zero-downtime-upgrade.rst
Normal file
78
reference/tags/assert_supports-zero-downtime-upgrade.rst
Normal file
@ -0,0 +1,78 @@
|
||||
::
|
||||
|
||||
This work is licensed under a Creative Commons Attribution 3.0
|
||||
Unported License.
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
.. _`tag-assert:supports-zero-downtime-upgrade`:
|
||||
|
||||
=====================================
|
||||
assert:supports-zero-downtime-upgrade
|
||||
=====================================
|
||||
|
||||
This tag is part of the assert category of tags, which are assertions made by
|
||||
the project team themselves about their maturity.
|
||||
|
||||
The ``assert:supports-zero-downtime-upgrade`` tag asserts that in addition to a
|
||||
project supporting `minimal rolling upgrade capabilities
|
||||
<https://governance.openstack.org/reference/tags/assert_supports-rolling-upgrade.html>`_,
|
||||
it does so *without incurring any disruption to API availability*.
|
||||
|
||||
Application to current projects
|
||||
===============================
|
||||
|
||||
.. tagged-projects:: assert:supports-zero-downtime-upgrade
|
||||
|
||||
|
||||
Rationale
|
||||
=========
|
||||
|
||||
OpenStack projects represent code that is installed and deployed on many
|
||||
distributed systems in order to provide services to users. Operators need to
|
||||
know what projects support an upgrade process that eliminates downtime of the
|
||||
control plane entirely.
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
* The project is already tagged as ``type:service``.
|
||||
|
||||
* The project has already successfully asserted both the
|
||||
:ref:`tag-assert:supports-upgrade` and
|
||||
:ref:`tag-assert:supports-rolling-upgrade` tags. All the requirements for
|
||||
those tags are requirements for this tag, and assertion of both those tags
|
||||
are requirements to assert this tag.
|
||||
|
||||
* In addition to the plan required by the
|
||||
:ref:`tag-assert:supports-rolling-upgrade` tag which allows for minimal
|
||||
downtime, this tag requires services to completely eliminate API downtime of
|
||||
the control plane during the upgrade. In other words, requiring operators to
|
||||
"restart all API services together" is not reasonable under this tag.
|
||||
Additionally, it is not reasonable for services to respond to requests with
|
||||
HTTP 5xx codes when they otherwise would have returned successful responses,
|
||||
even intermittently.
|
||||
|
||||
* While all requests to the control plane must be eventually processed,
|
||||
performance degradation during the upgrade is acceptable. This may include
|
||||
slow HTTP responses and delayed request handling (such as messages queuing up
|
||||
on the message bus).
|
||||
|
||||
* In addition to the full stack integration testing required by the
|
||||
:ref:`tag-assert:supports-rolling-upgrade` tag, services should be capable of
|
||||
receiving and handling requests throughout the rolling upgrade process with a
|
||||
normal success rate. In order to assert this tag, services should prevent
|
||||
regression by implementing a zero-downtime gate job wherein both a new
|
||||
version of the service and an old version of the service are run
|
||||
concurrently.
|
||||
|
||||
Tag application process
|
||||
=======================
|
||||
|
||||
Assertion tags are set by the project team PTL or suitable designee based on
|
||||
meeting the above criteria. The Technical Committee may exceptionally remove
|
||||
the tag if they find that the project doesn't actually follow the requirements
|
||||
for the assertion.
|
||||
|
||||
The project asserting this tag should do so when the above requirements are met
|
||||
for the reference implementation(s) or configuration(s) officially adopted by
|
||||
that project.
|
@ -30,6 +30,7 @@ Project Assertions Tags
|
||||
assert_follows-standard-deprecation
|
||||
assert_supports-upgrade
|
||||
assert_supports-rolling-upgrade
|
||||
assert_supports-zero-downtime-upgrade
|
||||
|
||||
Release Management Tags
|
||||
=======================
|
||||
|
Loading…
x
Reference in New Issue
Block a user