CephXCIX · Upgrade PlanningUpgrade Planning
Reading release notes as an operational document
What you'll learn
- Locate the release notes for a target version
- Extract the sections that affect operations
- Identify deprecations affecting your configuration
- Turn the notes into a checklist
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
Why this matters in production
Release notes are long and most of their content is irrelevant to any given cluster. The skill is extracting the part that is not.
Where they are
docs.ceph.com/en/latest/releases/<name>/
The named release page carries the major changes.
Each point release has its own notes with the fixes it carries.
Read both: the named release notes for the behaviour changes, and every
intervening point release for the fixes and regressions.
The sections that matter operationally
| Section | Why |
|---|---|
| Upgrade instructions | may specify an order or prerequisite this release needs |
| Notable changes | behaviour that differs from what your runbooks assume |
| Deprecations | features you may be using that are going away |
| Removals | features already gone in this release |
| Known issues | problems documented before you encounter them |
| Default value changes | tuning you set explicitly may now be redundant, or vice versa |
The last is the one most often missed. A default changing means a cluster
that never set the value explicitly now behaves differently.
Extracting what applies
# what the cluster actually uses
ceph config dump
ceph mgr module ls | python3 -c '
import sys,json
d=json.load(sys.stdin)
print("enabled:", d.get("enabled_modules"))'
ceph osd pool ls detail | grep -oE 'erasure|replicated' | sort | uniq -c
ceph fs ls
ceph orch ls
Cross-reference:
every module the cluster has enabled
every service type deployed
every config option set explicitly
against the deprecations and changes in the notes.
# options set explicitly, which are the ones a default change could affect
ceph config dump --format json | python3 -c '
import sys,json
for o in json.load(sys.stdin):
print("%-20s %-40s %s" % (o.get("section"), o.get("name"), o.get("value")))'
Turning the notes into a checklist
For each relevant item, record:
what changes
whether this cluster is affected
what to do before the upgrade
what to verify after
| Item type | Pre-upgrade action | Post-upgrade check |
|---|---|---|
| A deprecation you use | plan the migration | confirm the replacement works |
| A removal you use | migrate before upgrading | confirm nothing references it |
| A default change | decide whether to pin the old value | confirm behaviour matches expectation |
| A known issue | decide whether it blocks | confirm it did or did not occur |
| A behaviour change | update runbooks | confirm the new behaviour |
Quiz
Knowledge check · 4 questions
Q1. Why do default value changes deserve particular attention in release notes?
Q2. An upgrade from 19.2.0 to 19.2.4 crosses changes that are documented in no named-release notes at all.
Q3. Extract what applies from a release's notes.
The target release notes run to several thousand words covering RGW, CephFS, RBD, and the dashboard. The cluster serves RBD only.
Q4. Which commands establish what a cluster actually runs, for cross-referencing against release notes?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Read the point release notes as well as the named release notes — an upgrade within a named release crosses no named release at all, and its changes live entirely there. Pay particular attention to default value changes, which alter behaviour on clusters that never set the option.
Cross-course references
- Kubernetes: changelog reading follows the same cross-reference-against-deployed discipline
- Linux: default changes in a package upgrade affect exactly the configurations that never overrode them