Skip to main content
RunBook Academy

CephXCIX · Upgrade PlanningUpgrade Planning

Building a test cluster that predicts production

Advanced⏱ ~18 mincephcephadm

What you'll learn

  • Identify what a test cluster must match
  • Identify what may differ
  • Run a representative upgrade test
  • Interpret what the test does and does not prove

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

There is no upgrade rollback, so the test cluster is the only place a problem can be discovered cheaply — but only if it resembles production in the ways that matter.

What must match

AttributeWhy
Current Ceph versionthe upgrade path is the thing being tested
Deployment methodcephadm and Rook upgrade differently
Enabled mgr modulesmodules are a common source of upgrade failures
Pool types and EC profilesEC and replicated behave differently
Service types deployedRGW, CephFS, and RBD each have their own path
Client versions in usecompatibility is version-specific
OS and container runtimethe host environment affects daemon startup
# capture what production runs, to replicate
ceph versions
ceph mgr module ls --format json | python3 -c '
import sys,json; print(json.load(sys.stdin)["enabled_modules"])'
ceph osd pool ls detail | grep -E '^pool'
ceph orch ls
ceph features

What may differ

AttributeSafe to differ
Cluster sizeyes — three hosts can test what thirty will do
Disk capacityyes
Disk typemostly; the upgrade is not I/O bound
Data volumeyes, with one caveat below
Network speedyes
CRUSH topology depthmostly
The caveat: an upgrade on an empty cluster does not exercise PG peering
and recovery on daemon restart. A small but non-zero data set is worth
having.
# put some data in the test cluster
rados bench -p testpool 60 write --no-cleanup

Running a representative test

# 1. bring the test cluster to production's version
TARGET=19.2.1
ceph version

# 2. replicate the production config that matters
ceph config dump   # compare against the production capture

# 3. apply representative load during the upgrade
fio --name=load --ioengine=rbd --pool=testpool --rbdname=testimg \
    --rw=randrw --bs=4k --iodepth=32 --numjobs=2 --time_based \
    --runtime=3600 --direct=1 &

# 4. run the upgrade
ceph orch upgrade start --ceph-version ${TARGET}

# 5. observe
watch -n 30 'ceph orch upgrade status; ceph -s | head -20'
Running load during the upgrade is what distinguishes a test from a
demonstration. An upgrade on an idle cluster proves the daemons restart;
an upgrade under load proves clients survive it.

What the test proves and does not

ProvesDoes not prove
The upgrade path completesit completes at production scale
The daemons start on the new versionproduction’s specific hardware works
Enabled modules surviveproduction’s data volume backfills in time
Clients keep working under loadproduction’s client mix keeps working
The procedure and its timingsthe wall-clock duration at production size
Duration is the attribute that scales: a three-host test says nothing
about how long thirty hosts take. Estimate from the daemon count.

Quiz

Knowledge check · 4 questions

  1. Q1. What matters more in a test cluster than matching production hardware?

  2. Q2. Running even a modest fio job against an RBD image during a test upgrade is what turns the exercise into evidence.

  3. Q3. Design a test cluster for an upgrade.

    A production cluster has 30 hosts, 300 OSDs, RBD and CephFS, and several mgr modules enabled. Budget allows three test hosts.

  4. Q4. Why should a test cluster hold some data rather than being empty?

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

Production discipline

Match the test cluster’s configuration — Ceph version, deployment method, enabled mgr modules, pool types, service types — rather than its hardware, and run client load throughout the test upgrade. Estimate production duration from daemon count; the test’s wall clock does not scale.

Cross-course references

  • Kubernetes: staging clusters predict upgrades only when the addon set matches
  • Linux: a test that does not exercise the workload proves only that services start