Kubernetes CoreOS Ceph RBD
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
Introduction
Kubernetes can use Ceph RBD as dynamic block storage, and on CoreOS-style nodes the main concerns are no longer the old in-tree volume plugin but the CSI driver, node kernel support, and correct Ceph credentials. In modern clusters, the practical answer is to use Ceph CSI for RBD-backed PersistentVolumeClaim provisioning rather than the removed legacy rbd volume type.
The modern architecture: Kubernetes plus Ceph CSI
Ceph RBD provides network block devices backed by a Ceph pool. Kubernetes consumes them through the Ceph CSI RBD driver, which provisions and attaches RBD images for pods.
At a high level, the stack is:
- Ceph cluster provides the RBD pool.
- Ceph CSI runs in Kubernetes.
- A
StorageClassdefines how to provision RBD volumes. - A
PersistentVolumeClaimrequests storage. - A pod mounts the resulting volume.
Older articles often reference the in-tree rbd plugin, but that path is obsolete for current Kubernetes versions. The CSI driver is the supported approach.
CoreOS-specific considerations
Whether you mean the older Container Linux by CoreOS or a modern CoreOS-style node OS such as Fedora CoreOS, the operational theme is similar: the node OS is minimal, so storage features must be present deliberately rather than assumed.
For Ceph RBD on the worker nodes, pay attention to:
- kernel RBD support on the node
- CSI node plugin deployment
- access to Ceph monitors from the node network
- secret distribution for Ceph authentication
Because the OS is minimal, troubleshooting often starts at the node layer, not in the application pod.
Example StorageClass for Ceph RBD
A typical CSI-based StorageClass looks like this:
Then request storage with a PersistentVolumeClaim:
And mount it in a pod:
That is the normal modern workflow for RBD-backed block storage in Kubernetes.
Ceph-side preparation still matters
Kubernetes is only one half of the setup. Ceph needs:
- an RBD pool initialized for use
- a Ceph user with appropriate
monandosdcaps - monitor addresses reachable from Kubernetes nodes
If the CSI driver is installed but the secret is wrong or the monitors are unreachable, PVC provisioning will stall even though the YAML looks correct.
Common Pitfalls
The biggest mistake is following old examples that use the in-tree rbd volume plugin. Modern Kubernetes clusters should use Ceph CSI instead.
Another common issue is assuming the application container needs Ceph tools. In CSI-based setups, the storage attach and mount logic belongs to the CSI components and node environment, not the application image.
On CoreOS-style nodes, missing kernel features or node plugin problems can also block volume staging. Minimal operating systems are great for consistency, but they make hidden assumptions about storage tooling more visible.
Finally, remember that RBD is block storage. The typical access mode is ReadWriteOnce, so do not expect one volume to be mounted read-write by many pods at the same time unless the storage and workload semantics explicitly support it.
Summary
- Kubernetes should use Ceph RBD through the Ceph CSI driver, not the removed legacy in-tree plugin.
- CoreOS-style nodes need the right node-level support for CSI staging and RBD mapping.
- The core objects are
StorageClass,PersistentVolumeClaim, and the consuming pod. - Ceph-side setup still matters: pool, authentication, and monitor reachability must all be correct.
- When troubleshooting, check both Kubernetes events and the CSI or node-side logs, not just the application pod.

