Objective
By the end of this capstone, you have:
- Deployed a 4-node Ceph cluster running Tentacle (20.2.x) with cephadm.
- Created RBD pools for Proxmox VE and for Kubernetes.
- Created a CephFS filesystem for shared file workloads.
- Deployed RGW with multi-gateway HA and S3-compatibility.
- Connected a Proxmox VE environment to the cluster (RBD for VM disks).
- Connected a Kubernetes environment to the cluster (csi-rbd + csi-cephfs).
- Configured Prometheus + Grafana + alerts.
- Configured scheduled backups to an independent target.
- Recovered from 12 controlled failure incidents and produced a post-mortem.
Architecture
+--------------------+ +----------------------+
| Proxmox VE | | Kubernetes |
| cluster (3+ VMs) | | cluster (2+ workers)|
| | | |
| /mnt/rbd-pool |------| csi-rbd / csi-cephfs |
| /mnt/cephfs | | (PVCs) |
+--------+-----------+ +-----------+---------+
| |
| cephx (RBD, CephFS caps) |
v v
+----------------------------------------------------+
| Ceph Storage Cluster |
| ceph01 ceph02 ceph03 ceph04 |
| MON MON MON MON |
| MGR MGR standby standby |
| MDS x2 (active / standby) |
| RGW x2 (multi-gateway HA behind LB) |
| OSDs on every host |
| Pools: rbd-vm, k8s-data, cephfs-data, rgw-data |
+----------------------------------------------------+
|
| alerts
v
+------------------------+
| Prometheus / Grafana |
| Alertmanager |
+------------------------+
|
v
+----------------------------+
| Backup target |
| (independent failure |
| domain) |
+----------------------------+
Requirements
- 4 nested VMs (8GB RAM each, 4+ vCPUs, 100GB+ dedicated storage for OSDs)
- A network with public + cluster segments (LACP bonds; MTU 9000 if used)
- 1 Proxmox VE host (for Proxmox-Ceph integration tests)
- 1 Kubernetes host (or kind / k3d; for CSI tests)
- 6 hours of uninterrupted time
Scenario
You are handed a production 4-node cluster to design, deploy, and recover from real incidents. The instructor injects 12 controlled failures; you must diagnose and recover from each. After each failure, document the symptom, evidence, diagnosis, remediation, verification, and prevention in the post-mortem.
Tasks
Phase 1: Hardware / Network / Host preparation
- Set up the 4 nested VMs on Proxmox VE (or VMware).
- Configure each VM: Ubuntu 24.04 LTS, dual-corded bond, LACP to a redundant TOR, public + cluster VLANs, podman 4.x installed, chrony configured, DNS configured both directions.
- Verify each host passes
cephadm check-host --skip admin.
Phase 2: Ceph deployment
- Use
cephadm bootstrapon ceph01. - Add ceph02 / ceph03 / ceph04.
- Deploy 3 MONs (one per host), active MGR on ceph01, standby MGR on ceph02, OSDs on each host (one per host’s disk), MDS for CephFS (active on ceph01, standby on ceph02), 2 RGW daemons on ceph01 and ceph02.
- Verify:
ceph -sreports HEALTH_OK with the expected number of services.
Phase 3: Pools and CRUSH
- Create an RBD pool
rbd-vmfor Proxmox withsize=3, min_size=2, CRUSH rule spanning hosts. - Create an RBD pool
k8s-datafor Kubernetes CSI. - Create a CephFS filesystem with
cephfs-datadata pool and a metadata pool. - Create an EC pool
rgw-coldfor cold archive objects. - Verify:
ceph osd treeshows the right CRUSH placement;ceph osd pool ls detailshows the pools.
Phase 4: Proxmox VE integration
- Add the Ceph cluster as Proxmox RBD storage.
- Create a VM (e.g.,
monitoring) using the RBD storage. - Verify the VM boots, has Ceph-backed disk, and runs Prometheus.
- Add CephFS as Proxmox storage for container CTs.
Phase 5: Kubernetes integration
- Install
csi-rbdandcsi-cephfson the Kubernetes cluster. - Create a StorageClass for RBD and one for CephFS.
- Create a StatefulSet that consumes a RBD PVC; verify the Pod mounts the PVC.
- Create a Pod with multiple replicas that mount a CephFS PVC; verify shared access.
Phase 6: Observability
- Enable the Prometheus module on the active MGR.
- Configure Prometheus to scrape the MGR exporter on the manager host.
- Configure Alertmanager with receivers for the on-call team.
- Configure Grafana with a Ceph dashboard.
- Create alerts: MON quorum loss, OSD down, nearfull, slow ops, recovery rate.
Phase 7: Backup
- Configure a backup target in an independent failure domain (a fifth host, an NFS share, an S3 bucket).
- Document the RBD backup procedure (use
rbd export-difffor incremental). - Document the CephFS backup procedure (use
rsyncorrestic). - Document the RGW backup procedure (use
s3 syncto a backup bucket). - Rehearse at least one full RBD restore.
Phase 8: Automated day-2
- Configure Ansible managed inventory for the cluster.
- Document routine playbooks: health check, OSD host maintenance, snapshot retention.
Phase 9: Controlled failures
The instructor injects the following 12 controlled failures, one at a time. For each failure:
- Capture the symptom (
ceph -s,ceph health detail). - Identify the failure domain from evidence.
- Apply the smallest fix and validate the recovery.
- Document the post-mortem entry.
Incident 1: One OSD fails
The instructor takes one disk offline. The cluster shows HEALTH_WARN; recovery is in progress. The student must: identify the failed OSD, mark it out, replace the disk, recreate the OSD, verify recovery.
Incident 2: Entire OSD host fails
The instructor stops one host’s containers. The cluster’s affected OSDs are down + in. Recovery is in progress. The student must: identify the failed host, plan the replacement, verify recovery, document the blast radius.
Incident 3: PG becomes degraded
The instructor creates a controlled ceph osd out on a replica OSD. A PG becomes active+degraded. The student must: identify the PG, understand the safety, wait for recovery, verify active+clean.
Incident 4: MON loses quorum member
The instructor stops one MON. The cluster still has quorum (2 of 3). The student must: identify the situation, restart the MON, verify recovery.
Incident 5: Cluster reaches nearfull
The instructor fills the cluster to above 85%. ceph -s reports POOL_NEARFULL. The student must: identify the affected pool, add capacity, verify recovery.
Incident 6: Network latency increases
The instructor adds tc netem latency on the cluster network between ceph02 and ceph03. The student must: identify the latency source, document the impact on client I/O, remove the impairment, verify recovery.
Incident 7: Recovery impacts client latency
The instructor intentionally adds 8 OSDs to trigger backfill. Client latency spikes. The student must: identify the cause, tune recovery settings to bound client impact, document the trade-off.
Incident 8: A disk begins reporting media errors
The instructor uses smartctl to mark a sector as bad and simulates kernel log errors. The student must: identify the failing disk, replace it, verify recovery.
Incident 9: RBD client loses permissions
The instructor’s cephx client key is rotated incorrectly; the client cannot authenticate. The student must: identify the auth failure, restore the correct key, verify client recovery.
Incident 10: CephFS MDS fails
The instructor stops the active MDS. CephFS returns stale file handles. The student must: identify the MDS failure, verify the standby takes over, validate the recovery.
Incident 11: Kubernetes PVC cannot mount
The instructor corrupts the csi-cephfs keyring. The Pod cannot mount the PVC. The student must: identify the cephx failure, restore the key, validate the PVC mounts.
Incident 12: Proxmox VM storage latency becomes unacceptable
The instructor floods an RBD-backed VM with I/O. Proxmox reports high disk latency. The student must: identify the cause (the VM, the RBD pool, the OSD host, the cluster network), apply mitigation.
Validation
At the end of the capstone:
- The cluster is HEALTH_OK.
- All 12 incidents have a post-mortem with: symptom, evidence, diagnosis, fix, verification, prevention.
- The Proxmox VM is running and connected to RBD.
- The Kubernetes StatefulSet is running and connected to RBD.
- The CephFS PVC is shared between at least two Kubernetes Pods.
- The observability stack has dashboards and alerts.
- The backup procedure has been rehearsed end-to-end.
Cleanup
Lab disposable. The cluster can be torn down with cephadm bootstrap --uninstall after the capstone session. The backup targets are retained for later cross-capstone reference.
Production notes
This capstone targets an 8-hour lab session in a classroom or home-lab. A real production deployment is a longer exercise with HA, observability, automation, and DR all matured over weeks.
The 12 controlled incidents map to the prompt’s required 3 AM test, the OSD failure test, the host failure test, the full cluster test, the PG test, the MON quorum test, the slow ops test, the CRUSH test, the Proxmox test, the Kubernetes test, the backup test, and the multiple-failure test.
What You Learned
The capstone maps to every published learning outcome of the course. A passing capstone means the student can take operational responsibility for a production Ceph cluster.