Skip to main content
RunBook Academy

CephLXXXIII · Dedicated Ceph ClusterDedicated Ceph Cluster

Running a dedicated cluster as a service

Intermediate⏱ ~18 mincephcephadm

What you'll learn

  • Define the operational practices a storage service needs
  • Establish change management appropriate to the risk
  • Build the runbook set
  • Set and meet service commitments

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

A dedicated cluster is a service with consumers, and the practices that make a service dependable are specific and mostly independent of the technology.

The practice set

PracticePurpose
Runbooks for the recurring incidentsconsistent, fast response
Change windows with consumer noticeno surprises
Capacity planning with lead timeexpansion lands before it is needed
Alerting reviewed periodicallycoverage stays accurate
Baselines and benchmarksperformance changes are detectable
Documented service commitmentsexpectations are measurable
Post-incident reviewsrecurring causes are addressed
Rehearsed recovery proceduresthe unfamiliar becomes routine

The runbook set

runbooks/ceph/
  osd-down.md
  osd-replace.md
  pg-inconsistent.md
  slow-ops-triage.md
  blocked-ops-sweep.sh
  capacity-nearfull.md
  monitor-quorum-loss.md
  cluster-upgrade.md
  host-maintenance.md
  pool-creation.md
  onboarding-a-consumer.md

Eleven documents covering everything that recurs. Each should state the symptom, the diagnostic commands, the decision points, and the rollback.

# runbooks live with the monitoring configuration
git add runbooks/ceph/

Change management

ChangeProcess
Pool creation for a new consumerticket, capacity check, quota
Configuration changereview, tested in staging, recorded
Upgradechange window, consumer notice, rollback plan
Hardware replacementscheduled, capacity verified first
CRUSH rule changeestimated with crushtool, scheduled
Emergency changerecorded after the fact with the reason

The last row matters: emergency changes happen and the practice is recording them, not preventing them.

# what changed, and when
ceph config log | head -20
ceph config dump > config-$(date +%F).txt

Service commitments

Ceph storage service commitments
  Availability:   99.95% per pool, measured as PGs active
  Latency:        p99 write under 10 ms for NVMe pools, under 30 ms for HDD
  Capacity:       expansion triggered at 70% of usable, before consumers notice
  Recovery:       degraded PGs restored within 24 hours of a single failure
  Notice:         5 working days for planned work affecting latency
  Support:        24/7 for availability, business hours otherwise

Each commitment must be measurable and monitored, or it is an aspiration.

Meeting them

# availability, measured
# in Prometheus, over the reporting period:
#   avg_over_time((ceph_pg_active / ceph_pg_total)[30d:])

# latency against commitment
#   histogram_quantile(0.99, sum(rate(ceph_osd_op_w_latency_bucket[5m])) by (le))
- alert: LatencyCommitmentBreached
  expr: |
    histogram_quantile(0.99,
      sum(rate(ceph_osd_op_w_latency_bucket[5m])) by (le)) > 0.010
  for: 30m
  labels: { severity: page }

Quiz

Knowledge check · 4 questions

  1. Q1. Why does rehearsing recovery procedures matter more on a dedicated cluster?

  2. Q2. Writing the monitoring query for a service commitment is what forces the commitment to be specific enough to mean anything.

  3. Q3. Establish operational practice for a new storage service.

    A dedicated Ceph cluster is entering production, serving three consumer teams. No runbooks, commitments, or change process exist yet.

  4. Q4. What should each runbook state?

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

Production discipline

Write a monitoring query alongside every service commitment — without one the commitment cannot be verified and exists only as a claim. Schedule rehearsal of the rare procedures; a stable dedicated cluster means the team lacks the familiarity that frequent exposure would provide.

Cross-course references

  • Kubernetes: platform teams operate clusters as services with the same practice set
  • Linux: any infrastructure service needs runbooks, commitments, and rehearsal