In the last blog we created our proxmox VM’s pve-{n1-n3} so we will just create a cluster form it.

Login to pve-n1 and go to the network section and we can see three NIC’s here. Here we will need to configure NIC1 as our Migration IP and NIC2 as our Ceph IP
| Name | Alternative name | VM NIC | Use |
|---|---|---|---|
| nic0 | enp6s18 | net0 | Management ,1611 |
| nic1 | enp6s19 | net1 | Migration, 1612 |
| nic2 | enp6s20 | net2 | Ceph, 1613 |

Set the migration IP to 1612
- Double-click enp6s19
- IPv4/CIDR:
172.16.12.41/24 - Gateway: leave empty
- Autostart: ticked
- Comment:
Migration (vMotion)

Set the Ceph IP to 1613
- Double-click enp6s20
- IPv4/CIDR:
172.16.13.41/24 - Gateway: leave empty
- Autostart: ticked
- Comment:
Ceph (vSAN)

Click Apply Configuration and then Review the configuration from the UI

These changes from UI were made into /etc/network/interfaces so just run the ip command from cli to recheck if changes are committed

Repeat the above steps on pve-n2 (.42) and pve-n3 (.43) as well
Join the Cluster
Create the cluster on pve-n1: Datacenter → Cluster → Create Cluster

Create Cluster
- Name:
pve-cluster - Row 1: Link 0 →
172.16.11.41 - Click Add. Row 2: Link 1 →
172.16.12.41 - Create

The pve-nested cluster is now created.

Corosync is the cluster’s messaging and membership engine that lets the nodes talk to each other, know who’s alive, and agree on things. Here is the file it just updated cat /etc/pve/corosync.conf and how to interpret the file. This shows
The Primary HA Network is ring0_addr: 172.16.11.41 and the secondary HA network is ring1_addr: 172.16.12.41, the name of the cluster which can’t be changed once its deployed, sec auth on says the cluster traffic is encrypted.
root@pve-n1:~# cat /etc/pve/corosync.conf
logging {
debug: off
to_syslog: yes
}
nodelist {
node {
name: pve-n1
nodeid: 1
quorum_votes: 1
ring0_addr: 172.16.11.41
ring1_addr: 172.16.12.41
}
}
quorum {
provider: corosync_votequorum
}
totem {
cluster_name: nested-cluster
config_version: 1
interface {
linknumber: 0
}
interface {
linknumber: 1
}
ip_version: ipv4-6
link_mode: passive
secauth: on
token_coefficient: 125
version: 2
}
To join the nodes to cluster, Copy the join info: pve-n1 → Datacenter → Cluster → Join Information → Copy Information

Login to pve-n2: open https://172.16.11.42:8006 → Datacenter → Cluster → Join Cluster

Under join, we copy the code into the information section
- Password: pve-n1’s root password
- Link 0:
172.16.11.42 - Link 1:
172.16.12.42 - Click Join nested-cluster

Repeat the same for the 3rd node as well and after few minutes we can see all three are joined to a cluster

Run pvcem status from any node to see teh detailed stats
root@pve-n1:~# pvecm status
Cluster information
-------------------
Name: nested-cluster
Config Version: 3
Transport: knet
Secure auth: on
Quorum information
------------------
Date: Mon Oct 19 21:05:52 2026
Quorum provider: corosync_votequorum
Nodes: 3
Node ID: 0x00000001
Ring ID: 1.d
Quorate: Yes
Votequorum information
----------------------
Expected votes: 3
Highest expected: 3
Total votes: 3
Quorum: 2
Flags: Quorate
Membership information
----------------------
Nodeid Votes Name
0x00000001 1 172.16.11.41 (local)
0x00000002 1 172.16.11.42
0x00000003 1 172.16.11.43
root@pve-n1:~# corosync-cfgtool -s
Local node ID 1, transport knet
LINK ID 0 udp
addr = 172.16.11.41
status:
nodeid: 1: localhost
nodeid: 2: connected
nodeid: 3: connected
LINK ID 1 udp
addr = 172.16.12.41
status:
nodeid: 1: localhost
nodeid: 2: connected
nodeid: 3: connected
