Prerequisites
Before deploying, make sure your cluster and machines meet the following:- Talos Linux reserves an entire disk for the OS installation, so you need machines with at least one additional, unused disk for Ceph to use. Only nodes with a spare disk can host an OSD, Rook will not create one on a node without unused storage.
- The block devices or partitions Ceph will use must have no existing partitions or formatted filesystems.
- A supported Kubernetes version. Current Rook (v1.20.x) supports Kubernetes
v1.31throughv1.36, check the Rook compatibility matrix for the version you’re installing, since this range shifts with each Rook release. - Helm
v3. - Enough non-control-plane nodes for your mon count. Rook runs 3 mons by default, one per node, and control-plane nodes are tainted against them, plan for at least 3 worker nodes, or see the mon quorum note under step 5 for smaller clusters.
- Headroom for the CSI driver stack. On top of the mons, the CSI drivers (RBD, CephFS, NFS, NVMe-oF) add real overhead. Since an OSD pod can only run on the node holding its disk, it has nowhere to go if that node is already full.
- Read the Rook Ceph overview before deploying, Ceph is a large system, and the overview explains concepts this guide doesn’t repeat.
Install Rook and create a Ceph cluster
Current Rook installs in three parts: the operator, the Ceph-CSI drivers, and the cluster itself.-
Add the Rook Helm repository:
-
Install the Rook Operator into the
rook-cephnamespace: -
Label the
rook-cephnamespace so its privileged pods (Ceph daemons need privileged access) aren’t blocked by default Pod Security admission: -
Install the Ceph-CSI drivers chart:
-
Install the Ceph cluster chart. The defaults will attempt to use all nodes and all unused disks in the cluster — see the Rook cluster CRD documentation for more specific node, device, and cluster configuration options.
If your cluster has fewer non-control-plane nodes than the default mon count (3), cluster creation will stall indefinitely with an event like:Relaxing this via
helm upgrade --set cephClusterSpec.mon.allowMultiplePerNode=truewill fail with a field-ownership conflict, since the operator’s own reconciliation has already taken ownership of severalCephClusterspec fields. Patch the resource directly instead:Note that this direct patch means the Helm release’s recorded values will drift from the liveCephClusterspec; a laterhelm upgradeon this release may hit the same conflict again.
Verify the cluster
The Rook operator needs time to bring the Ceph cluster online after the cluster chart is installed. Watch its progress:The Storage classes (
cephcluster resource’s PHASE/MESSAGE fields can lag noticeably behind what the operator is actually doing. For a more real-time view, check the operator’s own logs:ceph-block, ceph-bucket, ceph-filesystem) are created by the Helm chart at install time, independent of cluster health — their presence does not confirm the cluster is actually ready. To check whether OSDs are genuinely up, look for OSD pods directly:HEALTH_OK, the storage classes it creates are ready to use:
Maintain the cluster during Talos upgrades
By default, Rook configures Ceph with 3mon instances, so the data in dataDirHostPath can be regenerated from the other mons. Even so, when performing maintenance on a Talos node running Rook (such as a Talos upgrade), take care to keep the Ceph cluster healthy throughout.
Before upgrading a node, confirm the cluster is healthy:
HEALTH reports HEALTH_OK. Upgrade one node at a time, and wait for the cluster to return to HEALTH_OK before touching the next node:
- Talos-native
- Omni
HEALTH_OK again before continuing to the next node:
Clean up
Cleaning up a Rook Ceph deployment happens in two stages: removing the Ceph cluster itself, then removing the metadata and disk data it left behind on each Talos node.Remove the Ceph cluster
To remove the ceph cluster:-
Confirm cluster deletion, then delete the storage classes and Ceph storage types:
-
Delete the Ceph cluster and its Helm release:
-
If you also want to remove the operator and everything it created, uninstall it, then find and delete the CRDs it left behind. The exact CRD list has changed across Rook versions (the CSI-related ones especially, given the chart restructuring above), so list them from your cluster rather than relying on a hardcoded list:
Review the output, then delete the CRDs it returns.
Remove Rook metadata and wipe the disks
If the Rook Operator was cleanly removed following the steps above, node metadata and disks should already be clean. If cleanup was interrupted, some metadata may remain on the system disk and partition information may remain on the storage disks.-
Remove leftover node metadata. Replace
<storage-node-name>with the node’s name and<dataDirHostPath>with the RookdataDirHostPathvalue used when installing the chart (/var/lib/rookif you used the default values). Repeat this for each storage node: -
Wipe the partition and filesystem data from each disk used in the Ceph cluster. On Talos, disks are wiped directly using
talosctl:
- Talos-native
- Omni