Skip to main content
RunBook Academy

CephLXVI · Capacity ForecastingCapacity Forecasting

Planning for new workloads

Intermediate⏱ ~17 minceph

What you'll learn

  • Recognise the limits of trend-based forecasting
  • Gather requirements from workload owners
  • Model a step change in demand
  • Build an onboarding process that includes capacity

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 trend forecast extrapolates the past. A new tenant arriving with 200 TB is not in the past, and no amount of statistical care will find it in the data.

Where trend forecasting fails

EventTrend forecast
Steady organic growthaccurate
A new tenant onboardingmisses entirely
A workload migration from another systemmisses entirely
A retention policy changemisses entirely
A team doubling its backup frequencymisses until it happens

The common property is that each is a decision made elsewhere in the organisation, visible to someone before it reaches the cluster.

Gathering requirements

The questions worth asking any incoming workload:

1. How much data initially?
2. What growth rate thereafter?
3. What retention?
4. Replicated or erasure coded — and is the workload latency-sensitive?
5. What IOPS and throughput?
6. When does it start, and does it ramp or arrive at once?

Question 6 matters more than it looks: 200 TB arriving over a month is a capacity plan, and 200 TB arriving over a weekend is also a throughput and backfill plan.

# what the answers become
ceph osd pool create tenant-x 256 256 replicated
ceph osd pool set-quota tenant-x max_bytes 200T
ceph osd pool set tenant-x recovery_priority 5

The quota is the mechanism that makes the stated requirement enforceable rather than aspirational.

Modelling a step change

current:        420 TB used, 140 TB MAX AVAIL, +1.2 TB/day
new tenant:     200 TB initial, +0.5 TB/day, arriving 1 October

before 1 Oct:   140 TB / 1.2 = 117 days → exhaustion mid-December
after 1 Oct:    (140 − 200) TB → already exceeded

The model shows the tenant cannot be accommodated without expansion, and it shows this before the tenant arrives rather than during onboarding.

Onboarding that includes capacity

StepPurpose
Capacity requirement gatheredthe forecast can be updated
Forecast updated and reviewedexpansion triggered if needed
Quota set on the poolthe requirement is enforced
Growth monitored against the stated ratedrift is caught early
Review at 30 and 90 daysthe estimate is corrected
ceph osd pool get-quota tenant-x
ceph df detail | grep tenant-x

The 30-day review is where most estimates are corrected, because workload owners routinely underestimate by a factor of two.

Quiz

Knowledge check · 4 questions

  1. Q1. Why does a trend-based forecast miss a new tenant onboarding?

  2. Q2. A pool quota enforces a hard byte-level limit that cannot be exceeded.

  3. Q3. Onboard a new tenant onto an existing cluster.

    A team wants to migrate 200 TB from an existing system onto the cluster over one weekend, then grow at 0.5 TB/day. The cluster has 140 TB of MAX AVAIL and is growing at 1.2 TB/day.

  4. Q4. Why does the question "does the data arrive at once or ramp" matter?

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

Production discipline

Ask incoming workloads for initial size, growth rate, retention, and whether the data arrives at once or ramps; the last determines whether it is a capacity plan or also a throughput plan. Set a quota on every tenant pool sized to the stated requirement plus margin, so an underestimate surfaces as their limit rather than the cluster’s.

Cross-course references

  • Kubernetes: namespace ResourceQuotas serve exactly this enforcement role
  • Linux: per-user filesystem quotas make shared capacity estimates enforceable