Skip to main content
RunBook Academy

CephVI · Ceph ArchitectureCeph Architecture

Deployment models — cephadm and what it replaced

Intermediate⏱ ~15 mincephadmceph

What you'll learn

  • Explain what cephadm manages and how it manages it
  • Contrast cephadm with ceph-deploy, ceph-ansible, and manual deployment
  • Read and write a cephadm service specification
  • Decide between cephadm and Rook for a given environment

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

Ceph has had several deployment tools and the older ones still appear in blog posts and tutorials. Using them on a current release produces a cluster that the supported tooling cannot manage, which is a problem discovered late and expensive to unwind.

What cephadm is

cephadm deploys and manages Ceph daemons as containers, orchestrated through the MGR orchestrator module. It:

  • connects to hosts over SSH using a key it manages,
  • pulls container images and runs daemons under systemd,
  • maintains the desired state described by service specifications,
  • handles upgrades by rolling daemons one at a time in a safe order.

The last two points are the substantive difference. cephadm is declarative: you describe what should exist and it reconciles.

cephadm bootstrap --mon-ip 10.0.1.10
ceph orch host add ceph-02 10.0.1.11
ceph orch apply mon --placement="3 ceph-01 ceph-02 ceph-03"
ceph orch apply osd --all-available-devices
ceph orch ls
ceph orch ps

Service specifications

The declarative interface is a YAML spec:

service_type: osd
service_id: nvme-osds
placement:
  host_pattern: 'ceph-*'
spec:
  data_devices:
    rotational: false
  db_devices:
    rotational: true
  osds_per_device: 2
ceph orch apply -i osd-spec.yaml

Applying it means any host matching the pattern with unused non-rotational devices gets OSDs created automatically, including hosts added later. That is the property worth understanding: specs are standing instructions, not one-time commands.

What it replaced

ToolStatusWhy not to use it
ceph-deployremovedunmaintained; removed from recent releases
ceph-ansiblesupersededstill exists but cephadm is the supported path
manual / packagespossibleno orchestration, no upgrade automation, error-prone
Rookcurrentfor Kubernetes-native deployments

ceph-deploy in particular appears in a great deal of older documentation. It was deprecated in Reef and is gone; instructions using it will not work and should not be adapted.

cephadm or Rook

Use cephadm for clusters on bare metal or VMs, where Ceph is the primary purpose of the hosts. It is the reference deployment method and the one the documentation assumes.

Use Rook when Ceph runs inside Kubernetes and should be managed by Kubernetes primitives — operators, CRDs, and the same control plane as the workloads. It is a genuine alternative rather than a lesser one, but it makes Kubernetes a dependency of the storage layer, which is a consideration when the storage also serves that Kubernetes cluster.

Quiz

Knowledge check · 4 questions

  1. Q1. What does ceph orch apply osd --all-available-devices do that a one-time command would not?

  2. Q2. Because cephadm pins each daemon to a container image, a cluster mid-upgrade runs some daemons on the new version and their neighbours on the old one at the same time.

  3. Q3. A team adds three new hosts to a cephadm cluster intending to use their NVMe devices for a separate fast pool. Within minutes OSDs appear on all devices including SATA disks meant for something else. Explain.

    Existing cluster deployed with ceph orch apply osd --all-available-devices during the initial build eighteen months ago. Three new hosts were added with ceph orch host add. Each has 2 NVMe and 10 SATA SSDs. The plan was to create NVMe OSDs manually and leave the SATA devices for a later decision. All 36 devices now have OSDs and data is rebalancing onto them.

  4. Q4. Explain why cephadm runs daemons as containers and what that changes for day-to-day operations.

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

Production discipline

Treat ceph orch apply as recording standing intent rather than performing a one-time action, and check ceph orch ls before adding hosts or devices to an existing cluster — a broad OSD spec turns a host addition into an act of provisioning. Prefer explicit specs with device filters over --all-available-devices once the build is done. And ignore documentation that uses ceph-deploy: it has been removed, and instructions written around it lead to clusters the supported tooling cannot manage.

Cross-course references

  • Ceph: Part XLIX (cephadm) for the full command surface.
  • Ceph: Part L (Cluster Deployment) for a build from scratch.
  • Ceph: Part LXXXIX (Rook Concepts) for the Kubernetes-native alternative.