Build a Ceph Tentacle 20.2 Cluster on Proxmox VE 9.2 with NVMe OSDs

Updated on Oct 15, 2026
Mila H
14 MINS READ
Table of Contents
Proxmox VE 9.2 Ceph Tentacle Install

Running VMs on local disks is risky. If one server fails, the VMs on it stop, and you may lose data. Ceph fixes this by keeping copies of your data on several servers. Proxmox VE has built-in tools (pveceph) that install and manage Ceph, so you do not need a separate storage system. In this guide, you will learn to build a Ceph Tentacle Cluster on Proxmox.

What You Will Build

By the end of this guide, you will have a working three-node Proxmox cluster with shared Ceph storage on NVMe disks. Your VMs will keep running even if one node fails. 

  • 3 Proxmox VE 9.2 nodes in one cluster.
  • 3 Ceph Monitors (MON) and 3 Ceph Managers (MGR).
  • 1 or more dedicated NVMe disks per node as OSDs.
  • 1 replicated pool (3 copies, minimum 2) used as Proxmox RBD storage.
  • A test VM with HA, live migration, and a node failure test.

Here are the example values for this guide; remember to change these names, IPs, and disk paths to match your servers.

Item pve1 pve2 pve3
Management / Corosync 192.168.10.11 192.168.10.12 192.168.10.13
Ceph public network 10.10.10.11 10.10.10.12 10.10.10.13
Ceph cluster network 10.10.20.11 10.10.20.12 10.10.20.13
Ceph data disk /dev/nvme1n1 /dev/nvme1n1 /dev/nvme1n1

Requirements to Build a Ceph Tentacle Cluster on Proxmox

Before you start to build a Ceph Tentacle Cluster on Proxmox, make sure your servers, disks, and network are ready.

Hardware Needs

You need at least three servers. Use servers that are the same or very close in size. A good base for each node:

  • 8 or more CPU cores. Plan about 1 core for each Ceph service. NVMe OSDs can use 4 to 6 threads each under heavy load.
  • 32 GB RAM or more. Ceph recommends at least 8 GiB of memory for each OSD for good performance. The OSD default is 4 GiB.
  • One small disk or mirrored disks for the Proxmox OS.
  • One or more empty NVMe disks for Ceph. Do not use the OS disk.
  • No hardware RAID. Ceph needs the raw disk. Use an HBA or direct NVMe.
  • 10 Gbps network at least. For NVMe, use 25 Gbps or more, because one NVMe disk can fill a 10 Gbps link.

For this setup, you can use bare-metal machines. Check the NVMe dedicated server hosting from PerLod if you need servers with NVMe disks and fast private networking.

Network plan

Ceph sends a lot of data between nodes, so you must have a good networking plan. Splitting the traffic keeps your cluster fast and stable. Use three separate networks if you can:

  1. Management and Corosync (1 Gbps is fine). This carries the Proxmox cluster traffic.
  2. Ceph public network (10+ Gbps). This carries traffic between VMs, Proxmox, and Ceph services.
  3. Ceph cluster network (25+ Gbps). This carries OSD copy and recovery traffic.

Note: Ceph recovery traffic is heavy. If it shares a link with Corosync, the Proxmox cluster can lose quorum. Remember to keep them apart.

Proxmox Cluster Setup

Ceph on Proxmox needs a working Proxmox cluster. If you have not built one yet, follow the Proxmox HA cluster, Corosync, and quorum guide.

You must verify the cluster health on any node with the command below:

Bash
pvecm status

In the output, you must see Quorate: Yes and Nodes: 3.

Step 1: Prepare All Nodes

To build a Ceph Tentacle Cluster on Proxmox, you must update Proxmox, set the Ceph network IPs, and check the network and time. Run all of these steps on all three nodes.

1.1 Update Proxmox

Start by updating all packages on each node. This makes sure every node runs the latest Proxmox 9.2 fixes before you install Ceph:

Bash
apt updateapt full-upgrade -y

Then, check the version; the output should start with pve-manager/9.2:

Bash
pveversion

If the kernel was updated, reboot the nodes one by one. Wait for each node to come back before you reboot the next one:

Bash
reboot

1.2 Set the Ceph network IPs

Next, you must give each node an IP address on the Ceph public network and on the Ceph cluster network. You must add these in the network file on every node, using a different IP on each one. Open the network file:

Bash
nano /etc/network/interfaces

Leave your existing vmbr0 (management) lines as they are. Add the Ceph networks at the end of the file. The example below is for pve1. Change the interface names and IPs for your server and for each node:

Bash
auto enp65s0f0iface enp65s0f0 inet static        address 10.10.10.11/24#Ceph public auto enp65s0f1iface enp65s0f1 inet static        address 10.10.20.11/24#Ceph cluster

Do not add a gateway to these two interfaces. Save the file and apply it:

Bash
ifreload -a

On pve2 use 10.10.10.12 and 10.10.20.12. On pve3 use 10.10.10.13 and 10.10.20.13. You can find your real interface names with:

Bash
ip -br link

1.3 Test the networks

Before you install Ceph, you must check that the nodes can reach each other on both Ceph networks. A broken link will cause hard problems later:

Bash
ip -br addrping -c 3 10.10.10.12ping -c 3 10.10.10.13ping -c 3 10.10.20.12ping -c 3 10.10.20.13

Also, you can run a speed test with iperf3. Install it on all nodes:

Bash
apt install iperf3 -y

On pve2 start the server, and on pve1 run the client for each network:

Bash
iperf3 -s              #pve2iperf3 -c 10.10.10.12  #pve1iperf3 -c 10.10.20.12  #pve1

The result should be close to your link speed. Stop the server on pve2 with Ctrl+C.

Note: If you use the Proxmox firewall, you must allow Ceph traffic with the built-in Ceph firewall macro.

1.4 Check time sync

Ceph needs the same time on all nodes. If the clocks are different, Ceph shows health warnings. Proxmox VE uses chrony for time sync by default, so you only need to check it:

Bash
chronyc tracking

Step 2: Install Ceph Tentacle

Now you can install the Ceph packages on every node. Proxmox has a built-in command that does this for you, so you don't need to add the Ceph repository manually.

If you do not have a Proxmox subscription, you can use the no-subscription repository:

Bash
pveceph install --repository no-subscription --version tentacle

If you have a subscription, use the enterprise repository:

Bash
pveceph install --version tentacle

Type y when it asks to continue. In Proxmox VE 9.2, Tentacle is already the default version, but --version setting makes it clear and safe.

Once you are done, check the repository file that was created:

Bash
cat /etc/apt/sources.list.d/ceph.sources

For the no-subscription repository, it should look like this:

Bash
Types: debURIs: http://download.proxmox.com/debian/ceph-tentacleSuites: trixieComponents: no-subscriptionSigned-By: /usr/share/keyrings/proxmox-archive-keyring.gpg

If you need to create or fix this file manually, you can open it with the command below, paste the lines above, save, and run the system update:

Bash
nano /etc/apt/sources.list.d/ceph.sources

The no-subscription repository is for testing and non-production use. For production, use the enterprise repository. 

Check the Ceph version; you must see a version that starts with ceph version 20.2 and ends with tentacle (stable).

Step 3: Start the Ceph Cluster Config

At this point, you must create the main Ceph config file. You tell Ceph which networks to use for public traffic and for cluster traffic. Only do this once, on the first node.

Run this only on pve1. It creates the Ceph config and sets the two networks:

Bash
pveceph init --network 10.10.10.0/24 --cluster-network 10.10.20.0/24

This creates /etc/pve/ceph.conf. Proxmox shares this file with all nodes automatically, and it links it to /etc/ceph/ceph.conf. Check it with:

Bash
cat /etc/pve/ceph.conf

Look for these lines; your values must match your networks:

Bash
cluster_network = 10.10.20.0/24public_network = 10.10.10.0/24osd_pool_default_min_size = 2osd_pool_default_size = 3

Step 4: Create Monitors and Managers

Now you must create the Ceph monitors and managers. Monitors keep the cluster healthy and in sync, and managers track the cluster status.

You must create three monitors and three managers, one on each node. On pve1, run:

Bash
pveceph mon create

This also creates the first manager. Then, run the same command on pve2 and on pve3:

Bash
pveceph mon create

Next, run the command below to create extra managers on pve2 and pve3:

Bash
pveceph mgr create

Only one manager is active. The other two wait as standby and take over if the active one fails. 

Check the status on any node with the following commands:

Bash
ceph -sceph mon stat

You should see 3 monitors in quorum and one active manager with two standby. The health will show HEALTH_WARN because there are no OSDs yet. This is normal.

Step 5: Create NVMe OSDs

An OSD is the Ceph service that stores your data on a disk. You must turn the empty NVMe disk on each node into an OSD. First, find the right disk:

Bash
lsblk -o NAME,SIZE,TYPE,MODEL,MOUNTPOINTS

For more details, you can install nvme-cli and check:

Bash
apt install nvme-cli -ynvme list

Pick the empty NVMe disk, for example /dev/nvme1n1. Do not pick the disk that has /, /boot, or the Proxmox LVM on it.

Then, you must clean the disk only if it was used before. The pveceph osd create refuses disks that have old partitions, ZFS, or old Ceph data. To clean the disk, run:

Bash
ceph-volume lvm zap /dev/nvme1n1 --destroy

Warning: This deletes all data on the disk. Check the disk name twice.

Next, use the command below to create the OSD:

Bash
pveceph osd create /dev/nvme1n1

Ceph finds NVMe disks and sets their class to nvme on its own. Run the same command on every node. If a node has more NVMe disks, run it for each one too, for example, /dev/nvme2n1.

Optional: Very fast NVMe disks can run more than one OSD each. For example, to run two OSDs on one disk:

Bash
pveceph osd create /dev/nvme1n1 --osds-per-device 2

Use this only if you have enough CPU and RAM. It cannot be combined with separate DB or WAL disks.

Once you are done, check the OSDs; all of them must be up and in, with the class nvme. Wait until ceph -s shows HEALTH_OK.

Optional: Ceph uses 4 GiB of memory for each OSD by default. If your nodes have enough RAM, you can raise it to the 8 GiB that Proxmox recommends:

Bash
ceph config set osd osd_memory_target 8Gceph config get osd osd_memory_target

Step 6: Create a Pool and Add RBD Storage

Run this on any one node. It creates a replicated pool with 3 copies and a minimum of 2, and it adds the pool to Proxmox as storage:

Bash
pveceph pool create vm-pool --size 3 --min_size 2 --pg_autoscale_mode on --add_storages 1

Never set min_size to 1. That can cause data loss.

In a normal setup, a Ceph Tentacle Cluster on Proxmox does not need extra keyring files. Proxmox copies them for you. You can check the pool and storage:

Bash
ceph osd pool ls detailceph osd pool autoscale-statuspvesm statuscat /etc/pve/storage.cfg

In /etc/pve/storage.cfg you should see a block like this:

Bash
rbd: vm-pool        content images,rootdir        krbd 0        pool vm-pool

If you created the pool without --add_storages, you can add the storage manually:

Bash
pvesm add rbd vm-pool --pool vm-pool --content images,rootdir

Also, you can do it in the web UI by navigating to Datacenter > Storage > Add > RBD.

For an optional quick speed test, you can use the command below and then remove the test data:

Bash
rados bench -p vm-pool 10 write --no-cleanuprados -p vm-pool cleanup

Step 7: Create a Test VM on Ceph

At this point, you can create a test VM that stores its disk on Ceph. You will use this VM in the next steps to test live migration and node failure. We use a Debian 13 cloud image. Run this on pve1:

Bash
cd /rootwget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2 qm create 100 --name ceph-test --memory 2048 --cores 2 \  --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-single qm disk import 100 debian-13-genericcloud-amd64.qcow2 vm-pool qm set 100 --scsi0 vm-pool:vm-100-disk-0 --boot order=scsi0qm set 100 --ide2 vm-pool:cloudinitqm set 100 --serial0 socket --vga serial0qm set 100 --ciuser debian --cipassword 'ChangeThisPassword123' --ipconfig0 ip=dhcpqm resize 100 scsi0 20Gqm start 100

Change the password. If your network has no DHCP, set a fixed IP instead, for example, --ipconfig0 ip=192.168.10.50/24,gw=192.168.10.1.

Check that the disk is on Ceph with the commands below:

Bash
qm config 100rbd ls -p vm-pool

You should see vm-100-disk-0 in the list. To open the VM console and find its IP, run:

Bash
qm terminal 100

Log in as debian, run ip -br addr, then exit the console with Ctrl+O.

Step 8: Test Live Migration

Because the VM disk is on shared Ceph storage, Proxmox only moves the VM memory. It does not copy the disk. You can start a ping to the VM from your laptop or another server with the VM IP:

Bash
ping 192.168.10.50

In another terminal on pve1, migrate the VM while it is running:

Bash
qm migrate 100 pve2 --online

Check where the VM is, and the ping should continue with little or no loss:

Bash
qm status 100ha-manager status

You can move it back with qm migrate 100 pve1 --online, or move it to pve3 the same way.

Step 9: Test a Node Failure

In this last test, you must shut down one node on purpose. You will see how Ceph and Proxmox HA keep your VM running. Remember to use a test cluster only. Do not run this test on a production cluster.

9.1 Add the VM to HA

First, add the VM to Proxmox HA. With HA on, Proxmox restarts the VM on another node if its node fails:

Bash
ha-manager add vm:100 --state startedha-manager status

Then, move the VM to pve3, so you can fail that node:

Bash
qm migrate 100 pve3 --online

9.2 Shutdown the power on pve3

A normal poweroff is a clean shutdown, so HA may just move the VM first. For a real crash test, cut power with the server BMC (IPMI), or on pve3 run the command below:

Bash
echo o > /proc/sysrq-trigger

9.3 Watch what happens

Now check how Ceph and Proxmox react to the lost node. Run these commands on a node that is still online. On pve1, run:

Bash
watch -n 2 ceph -s

In another terminal, run the command below to check the status:

Bash
ha-manager status
  • Ceph shows HEALTH_WARN. One host, its OSDs, and one monitor are down. The cluster still has 2 of 3 monitors, so quorum stays.
  • Placement groups show active+undersized+degraded. Because min_size is 2 and two copies remain, reads and writes keep working.
  • After a few minutes, Proxmox HA sees that pve3 is down and starts VM 100 on pve1 or pve2. Wait about 2 to 3 minutes.

Next, use the commands below to check the VM and the health details:

Bash
qm status 100ceph health detailceph osd tree

By default, Ceph marks down OSDs as out after 10 minutes. With only three nodes and 3 copies, there is no other host to rebuild the missing copy, so the data stays degraded until pve3 comes back.

9.4 Bring the node back

At this point, you can power on the failed node and let Ceph heal. Ceph will copy the missing data back to the node's OSDs. This can take some time. Power on pve3 and watch the recovery with:

Bash
ceph -sceph osd tree

Wait until all OSDs are up and in, all PGs are active+clean, and the health is HEALTH_OK. You can move the VM back if you want:

Bash
qm migrate 100 pve3 --online

To clean up the test, remove the VM from HA and delete it:

Bash
ha-manager remove vm:100qm stop 100qm destroy 100 --purge

Conclusion

At this point, you built a full Ceph Tentacle Cluster on Proxmox. With three nodes, separate public and cluster networks, three monitors, managers, dedicated NVMe OSDs, a replicated pool, and RBD storage. Also, you have tested live migration and a node failure, and saw that the VM kept running on the other nodes.

For production, use more NVMe disks per node, 25 Gbps or faster links, a subscription repository, and monitoring. You can build this on multiple PerLod NVMe dedicated servers to get a fast and resilient Proxmox and Ceph platform.

We hope you enjoy this guide. For more detailed information, you can check the Proxmox VE Hyper-Converged Ceph Cluster documentation.

Ceph Tentacle 20.2 is the default for new Ceph installs. Squid 19.2 is still available.

Yes. Use --repository no-subscription. It is good for testing, but use the enterprise repository for production.

No, but it is best. The cluster network keeps copy and recovery traffic away from VM traffic.

Ceph keeps 3 copies. It accepts writes while at least 2 copies are online.