CephLXXXI · Proxmox IntegrationProxmox Integration
Hyper-converged Proxmox and Ceph
What you'll learn
- Describe the hyper-converged architecture
- Configure resource separation between compute and storage
- Recognise the operational consequences
- Decide whether it suits a given deployment
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
Why this matters in production
Hyper-convergence removes the cost of separate storage hosts and replaces it with a resource contention problem. Both parts are real.
The architecture
flowchart TD
subgraph Node1[Node 1]
V1[VMs] --- O1[OSDs]
end
subgraph Node2[Node 2]
V2[VMs] --- O2[OSDs]
end
subgraph Node3[Node 3]
V3[VMs] --- O3[OSDs]
end
O1 <--> O2
O2 <--> O3
O1 <--> O3
Every node runs both hypervisor and storage. A VM’s I/O may be served by an OSD on its own host or on any other.
pveceph install
pveceph init --network 10.0.1.0/24
pveceph mon create
pveceph osd create /dev/sdb
Configuring resource separation
# bound OSD memory so it does not compete with VMs
ceph config set osd osd_memory_target 4294967296 # 4 GiB per OSD
Node with 128 GiB RAM, 6 OSDs:
OSDs: 6 × 4 GiB = 24 GiB
Host OS: = 8 GiB
Available for VMs: = 96 GiB
Over-committing VM memory against this leaves the OSDs to be squeezed or the host to swap, and an OSD host that swaps performs catastrophically.
# CPU: reserve cores for OSDs where the platform supports it
systemctl set-property ceph-osd@0.service AllowedCPUs=0-3
Proxmox VMs can be pinned away from the cores serving OSDs, which prevents a busy VM starving the storage layer.
The operational consequences
| Consequence | Effect |
|---|---|
| A node reboot removes compute and storage together | both VMs and OSDs |
| Maintenance windows affect both layers | more coordination |
| A VM can starve the OSDs on its host | resource limits needed |
| Recovery competes with VM I/O on the same devices | latency during any failure |
| The failure domain is the node for both | correlated failures |
| Scaling adds compute and storage in fixed ratio | may not match demand |
Deciding whether it suits
| Factor | Favours hyper-converged | Favours dedicated |
|---|---|---|
| Cluster size | 3–8 nodes | more |
| Budget | constrained | adequate |
| Workload predictability | steady | variable or bursty |
| Storage-to-compute ratio | balanced | skewed either way |
| Operational maturity | growing | established |
| Latency sensitivity | moderate | high |
Quiz
Knowledge check · 4 questions
Q1. Why can a single overloaded hyper-converged node degrade storage for the whole cluster?
Q2. `osd_memory_target` is an upper bound the OSD rarely reaches, so it need not be subtracted from available VM memory.
Q3. Size a hyper-converged node.
A node has 128 GiB of RAM and will run 6 OSDs. The team plans to allocate 120 GiB to VMs on the basis that OSDs "do not use much".
Q4. At what cluster size does hyper-convergence stop being the natural choice?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Subtract the OSD memory commitment — osd_memory_target times the OSD
count — before allocating any VM memory; an OSD that swaps degrades
storage for the entire cluster, not just its own node. Pin VMs away from
the cores serving OSDs where the platform allows it.
Cross-course references
- Kubernetes: running storage and workloads on the same nodes has identical coupling
- Linux: any co-located service needs explicit resource reservation