Lesson 16 · OpenStack Production Engineer
Upgrade Strategy — Sequencing, Validation, and Rollback Positions
Planning an OpenStack upgrade as a sequence of stages, each with a validation and a defined position to stop at.
Objectives
- Sequence an OpenStack upgrade so that each stage has a rollback position
- Explain why database migrations are the point after which rollback changes character
- Design validation that would actually detect a failed stage
- Identify the pre-upgrade checks that prevent the most common failures
An upgrade is a sequence of stages, each with a way out
The failure mode that produces long outages is not a broken upgrade. It is a broken upgrade with no defined position to return to, discovered halfway through.
Every stage needs three things decided before it runs:
- What changes
- What you check afterwards, specifically
- What you do if that check fails
The third is the one that gets skipped, and it is the only one that matters at 2am.
OpenStack supports mixed versions, deliberately
OpenStack services are designed to run one release apart during an upgrade. That is what makes a staged upgrade possible: the control plane can be newer than the compute hosts while both keep working.
This is a bounded guarantee, not a general one:
- One release, not several. Skipping releases is not supported by this mechanism.
- Control plane ahead of compute, not behind. Upgrading a compute host past the controllers is outside the tested combinations.
- For a limited period. Running mixed for months is not a supported operating mode.
The stages, and where rollback changes character
1. Pre-flight checks reversible: nothing has changed
2. Pull images reversible: nothing is running them
3. Database backup the rollback position for stage 4
4. Database migrations ◄── the character of rollback changes here
5. Control plane services reversible by re-deploying old images
6. Compute hosts, in batches reversible per host
7. Post-upgrade validation the decision point for the whole change
Pre-flight checks that prevent the common failures
Most upgrade failures are predictable from the state of the cloud beforehand.
Every service is healthy now. An upgrade will not fix an already-down service, and starting with known failures makes it impossible to tell what the upgrade broke.
openstack compute service list --long
openstack network agent list
openstack volume service list
No instances in a transitional state. An instance in BUILD or deleting when its compute
service is upgraded may never leave that state, because the process tracking the operation is
replaced mid-flight.
Disk space for images and the database backup. Container images are large and the old ones are retained. Running out mid-upgrade fails in the least recoverable place.
The cluster is fully healthy. A Galera cluster running degraded is not a cluster you want to run schema migrations against.
You have read this release’s notes. Configuration deprecations and removed options are the most common cause of services that fail to start after an otherwise clean upgrade.
Validation that would actually catch a failure
The temptation is to check that services are up. Services being up is necessary and proves very little — every service can be up while nothing works, which is the theme of several earlier lessons.
Validation has to exercise the path end to end:
| Stage | Weak check | Check that would catch a failure |
|---|---|---|
| Control plane | API returns 200 | Create and delete an instance |
| Compute batch | Service reports up | Boot an instance on that host and reach it |
| Networking | Agent alive | New instance gets an address and can route out |
| Storage | Service up | Create a volume, attach it, write to it |
The compute check matters most and is skipped most: a host whose services report up but cannot successfully boot an instance will accept scheduling and fail every request sent to it. Testing one instance per upgraded host, before moving to the next batch, is what makes a batched upgrade safe.
Batching compute hosts
The unit of risk is a batch. Small first, then larger once the shape of the upgrade is known.
| Batch | Scope | Question it answers |
|---|---|---|
| 1 | One host, no workloads | Does the procedure work at all? |
| 2 | One host with workloads | Does migration behave? |
| 3 | 10% of the fleet | Does it scale? |
| n | 25% at a time | Routine |
Per host: disable the service so nothing new is scheduled to it, migrate the workloads off, upgrade, validate with a real instance, then re-enable.
The decision point
Stage 7 exists to answer one question: is this upgrade staying?
That decision needs a deadline agreed in advance. An upgrade that is neither completed nor rolled back is the worst available state — a cloud running mixed versions indefinitely, outside the supported window, with everyone assuming someone else is finishing it.
Decide beforehand: how long you observe, what would constitute a failure, and who decides. Then hold to it.
Exercise
Write the upgrade plan for one release step in your own environment. For each of the seven stages, write down what changes, the specific command or observation you would use to validate it, and exactly what you would do if that validation failed.
Two of those answers will be uncomfortable to write: the rollback for stage 5, and the rollback for stage 4. If you cannot write the stage 4 answer concretely — including where the backup is and when it was last restored successfully — that is the finding, and it is worth more than the plan.
Verification status
This resource has not been executed end to end in a lab environment. Commands and configuration are reviewed by an engineer, but treat them as reference rather than as a tested procedure.
Author
James Joyner
Builds and operates the infrastructure layers underneath production AI systems.
James founded Inside The AI Stack to publish the kind of infrastructure and operations material he wanted while running production systems: specific, tested where it claims to be tested, and written by someone who has had to fix the thing at 3am. He works across AI infrastructure, private cloud, and platform engineering, and reviews every technical resource published here before it is marked as verified.
- AI infrastructure
- OpenStack operations
- Kubernetes
- Terraform
- Linux systems engineering
- Observability
Primary sources
- Kolla-Ansible upgrade procedure — OpenStack Foundation
- Nova upgrade documentation — OpenStack Foundation
Continue from here
Related resources chosen because they are the next thing you would actually need — not because they share a keyword.
Kolla-Ansible Production Architecture
How Kolla-Ansible actually structures an OpenStack deployment, where configuration comes from, and how to make changes without discovering them during an outage.
Kolla-Ansible Architecture
How Kolla-Ansible deploys OpenStack as containers, what the inventory controls, and why the running configuration is not the one you edited.
OpenStack Production Engineer
A sequenced learning path for engineers who operate OpenStack in production — architecture, service-by-service depth, deployment, and troubleshooting under pressure.
Newsletter
Inside The AI Stack Brief
A practical weekly briefing on AI engineering, infrastructure, production operations, and the technologies powering the AI stack.
One email a week. We send a confirmation link first and never mail an address that has not confirmed. No sponsorship placements inside the technical sections, and an unsubscribe link in every issue.
