Upgrading
Move from one minor version to another: validate the configuration with the new image before rolling out, then upgrade gateway and console.
GuideOperationsSince version 1.0.0
On this page
Operations guide: configure, deploy and observe the gateway. What the feature does, product side: product guide; calling it: developer guide.
Since 1.0.0, a minor version (1.x.0) is additive: what is written for 1.0.0 reads in 1.x
without an edit, a new key has a default that reproduces the previous behaviour, and a feature is
withdrawn only after a deprecation announced two minors ahead. Six surfaces are held by this
promise: the flexway.yaml schema, the x-flexway-* extensions, the policy catalogue, the metric
names and dimensions, the RFC 9457 error codes and the admin contract. A major version (2.0.0) is the
only one that may break them.
Steps
Read the release notes of every minor between yours and the target: what is new, deprecations, fixes.
Validate the running configuration with the new version's image, before any rollout - the validator is the start's loader:
docker run --rm -v "$PWD:/etc/flexway:ro" ghcr.io/flexwiz/flexway:<new-version> validate -vUpgrade the gateway. In Kubernetes, the chart carries the same version as the image:
helm upgrade orders oci://ghcr.io/flexwiz/charts/flexway --version <new-version> -f values.yamlEach replaced replica first leaves the rotation (
/readyzturns503), then drains the requests in flight (server.shutdown.drain, 20 s by default). Outside Kubernetes: replace the binary or the image, then restart -SIGTERMdrains the same way.Upgrade the console, when deployed - its accounts are kept:
helm upgrade console oci://ghcr.io/flexwiz/charts/flexway-console --version <new-version> -f console-values.yamlOnly then, write into the configuration the keys or extensions the new version brings.
Verify
curl -s http://localhost:9090/config | jq '.build' # {"version":"v<new-version>","commit":"..."}
curl -s http://localhost:9090/readyz # {"status":"ready","operations":...}Every replica announces the new version in build; the foot of the console shows the console's
version and the gateway's.
Good to know
| The loader refuses | Why it matters for an upgrade |
|---|---|
An unknown flexway.yaml key |
Decoding is strict: a key brought by a newer version is refused by an older one - which is what step 2 catches the other way round |
A version other than 1 |
The value is checked, never assumed |
An x-flexway-* extension unknown, not served yet, or written where it is not read |
An extension planned for a future version is refused with the version that brings it |
Warning
Rolling back: helm rollback, or the previous image. If the configuration already uses a key or
an extension of the new version, the old one refuses it: go back to the previous configuration first.
A configuration refused at reload never replaces the one serving; at start, it prevents the start.
Note
The settings read at start only (list) apply naturally: a new image is a restart. During the console's rolling update, a replica of the old version keeps the data it does not know untouched; a rollback leaves it in place, ignored.
0.x versions promised nothing: moving from a 0.x to 1.0.0 takes a review of the configuration
against the configuration reference.