Skip to main content
RunBook Academy

CephXCIX · Upgrade PlanningUpgrade Planning

Planning and communicating the upgrade window

Intermediate⏱ ~17 minceph

What you'll learn

  • Estimate the upgrade duration
  • Define abort and go criteria
  • Communicate accurately to stakeholders
  • Staff the window appropriately

Prerequisites

None — start here.

Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18

Not yet marked complete on this device.

Why this matters in production

An upgrade window that runs long without a plan for that turns a routine operation into an incident.

Estimating duration

cephadm upgrades daemons serially, waiting for health between each.
Duration ≈ daemon count × (restart time + health settle time)
ceph orch ps --format json | python3 -c '
import sys,json,collections
c = collections.Counter(d["daemon_type"] for d in json.load(sys.stdin))
total = sum(c.values())
for k, v in sorted(c.items()): print("%-8s %3d" % (k, v))
print("total   %3d" % total)
print()
for per in (60, 120, 180):
    print("at %3ds/daemon: %5.1f hours" % (per, total*per/3600))'
DaemonTypical per-daemon time
mgrfast; a failover occurs
monmoderate; quorum re-forms
osdthe bulk; restart plus peering plus health settle
mdsmoderate; rank reassignment
rgwfast
The OSD count dominates. A 300-OSD cluster at two minutes per OSD is
ten hours before anything goes wrong.

Go and abort criteria

Go criteria, checked immediately before starting:
  every pre-upgrade check passes
  the window duration exceeds the estimate with margin
  staffing covers the whole window
  the test cluster upgrade succeeded

Abort criteria, agreed before starting:
  what conditions stop the upgrade
  who decides
  what "stop" means, given there is no rollback
ConditionAction
A daemon fails on the new versionpause, investigate, decide
Data unavailabilitypause immediately, escalate
Health gate stalling repeatedlypause, resolve the underlying condition
The window is expiring, upgrade partwaycontinue — mixed-version is worse than finishing
A regression affecting performancecontinue, address afterwards
Note that most conditions do not abort. Because there is no rollback,
"abort" mostly means "pause and investigate", and continuing is usually
the right resolution.

Communicating

What stakeholders need:
  the window, with an honest estimate and a stated margin
  what they will experience — brief latency variation, not an outage
  what would change that
  who to contact
  how they will know it is done
FramingAccuracy
“Storage will be unavailable”wrong for a healthy cluster
“Brief latency variation as daemons restart”accurate
“No impact expected”overpromises
“We will notify when complete”necessary
Overpromising is the failure mode. An upgrade on a healthy cluster is
usually transparent, and saying so without the caveat makes the
exception look like a broken promise.

Staffing

For the whole window:
  someone watching the upgrade
  someone reachable who can decide
  the runbook and the baseline capture accessible
  a channel where progress is posted

Quiz

Knowledge check · 4 questions

  1. Q1. What dominates the duration estimate for a Ceph upgrade?

  2. Q2. Standard abort criteria for a Ceph upgrade mean reverting to the previous version.

  3. Q3. Plan and communicate an upgrade window.

    A 240-OSD cluster needs an upgrade. Stakeholders ask how long it will take and what they will experience.

  4. Q4. Why is "no impact expected" a poor way to communicate an upgrade window?

Passing score: 75%. Answers are checked in this browser.

Production discipline

Size the window from the OSD count at a conservative per-daemon time, then add margin — an upgrade running past its stated window is what turns a routine operation into an escalation. Communicate brief latency variation rather than either an outage or no impact.

Cross-course references

  • Kubernetes: node-by-node upgrades scale with node count the same way
  • Linux: honest maintenance-window communication survives the exception