Ceph is a unified, distributed storage system that simultaneously provides object, block, and file storage on commodity hardware. It eliminates single points of failure through replication and erasure coding, and scales linearly by adding nodes. The cephadm tool, introduced in Ceph Octopus, simplifies cluster deployment by using containers (Podman on RHEL 8) to manage Ceph daemons without requiring separate package installation on each node. This tutorial covers bootstrapping a single-node Ceph cluster with cephadm, adding OSDs, creating storage pools, and working with RADOS Block Devices (RBD).
Prerequisites
- A RHEL 8 server with at least 4 CPU cores, 8 GB RAM, and one dedicated raw block device (e.g.,
/dev/sdb) for OSD storage - Podman installed (
dnf install -y podman) — cephadm uses Podman to run daemon containers - Python 3 available (pre-installed on RHEL 8)
- Root access and a static IP address configured on the monitor interface
- The host’s fully qualified domain name (FQDN) resolving to the monitor IP
Step 1 — Download cephadm and Bootstrap the Cluster
Download the cephadm bootstrap script, make it executable, and run the bootstrap command pointing to your server’s IP address. The bootstrap process pulls the Ceph container images, configures the first monitor daemon, and creates the initial keyring and configuration. This can take several minutes depending on your connection speed.
dnf install -y podman python3
curl -Lo /usr/local/bin/cephadm https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
chmod +x /usr/local/bin/cephadm
# Replace 192.168.1.100 with your server's IP address:
cephadm bootstrap --mon-ip 192.168.1.100
# Install the ceph CLI tools into the local shell:
cephadm install ceph-common
ceph status
Step 2 — Configure the Firewall for Ceph Services
Ceph daemons communicate over several ports. The monitor uses 3300 and 6789, OSD daemons use ports in the 6800–7300 range, the dashboard runs on 8443, and the RADOS Gateway uses 7480. Open all required ports to allow cluster traffic.
firewall-cmd --permanent --add-port=3300/tcp
firewall-cmd --permanent --add-port=6789/tcp
firewall-cmd --permanent --add-port=6800-7300/tcp
firewall-cmd --permanent --add-port=8443/tcp
firewall-cmd --permanent --add-port=7480/tcp
firewall-cmd --reload
firewall-cmd --list-ports
Step 3 — Add OSD Devices to the Cluster
Object Storage Daemons (OSDs) are the workhorses of a Ceph cluster — they store data, handle replication, and perform recovery. Use ceph orch to add a raw block device as an OSD. The device must be unpartitioned and unused. Check available devices first with ceph orch device ls.
ceph orch device ls
# Add /dev/sdb as an OSD (replace hostname and device as appropriate):
ceph orch daemon add osd $(hostname):/dev/sdb
# Monitor OSD status:
ceph osd status
ceph osd tree
ceph -s
Step 4 — Create a Storage Pool and Check Cluster Capacity
Ceph stores data in logical partitions called pools. Each pool has a configurable replication factor and PG (placement group) count. For a single-node test cluster, set the replication size to 1 to avoid the cluster going into a degraded state. In production, always use at least 3 replicas across different hosts.
ceph osd pool create mypool 32
ceph osd pool set mypool size 1
# Confirm pool creation and cluster free space:
ceph osd pool ls
ceph df
ceph osd pool stats mypool
Step 5 — Create and Map a RADOS Block Device (RBD)
RBD images are thin-provisioned virtual block devices stored in a Ceph pool. Create an RBD image, map it to a block device on the host, format it, and mount it like any local disk. The kernel RBD driver (rbd module) handles the mapping.
rbd pool init mypool
rbd create mypool/disk01 --size 10G
rbd ls mypool
# Map the RBD image to a local block device:
rbd map mypool/disk01
rbd showmapped
# The image appears as /dev/rbd0 — format and mount it:
mkfs.xfs /dev/rbd0
mkdir -p /mnt/rbd
mount /dev/rbd0 /mnt/rbd
df -h /mnt/rbd
Step 6 — Access the Ceph Dashboard
The Ceph Dashboard provides a web-based UI for monitoring cluster health, managing pools and OSDs, and viewing I/O metrics. It is enabled by default when bootstrapped with cephadm and runs on port 8443. Retrieve the initial admin password from the bootstrap output or reset it with the command below.
# Check if the dashboard module is enabled:
ceph mgr module ls | grep dashboard
# Reset the admin password if needed:
ceph dashboard ac-user-set-password admin --force-password 'NewPassw0rd!'
# Get the dashboard URL:
ceph mgr services
# Access at: https://your-server-ip:8443
Conclusion
You have bootstrapped a Ceph storage cluster on RHEL 8 using cephadm, added OSD storage devices, created a pool, and used it to provision a RADOS Block Device that appears as a standard block device on the host. The Ceph Dashboard gives you a visual interface for ongoing cluster management and health monitoring. While this tutorial uses a single node for learning purposes, a production Ceph cluster should span at least three nodes to maintain data redundancy and allow the cluster to recover from individual host failures.
Next steps: How to Deploy CephFS (Ceph Filesystem) on RHEL 8, How to Configure the Ceph RADOS Gateway (RGW) for S3 Storage, and How to Add Nodes to a Ceph Cluster on RHEL 8.