CephXCI · Adding Storage NodesAdding Storage Nodes
Pre-check: network configuration
What you'll learn
- Verify network configuration matches the cluster
- Test both networks explicitly
- Confirm time and name resolution
- Catch asymmetries before they cause problems
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
A node whose network differs subtly from the cluster’s produces failures that appear later and elsewhere.
What must match
| Property | Why |
|---|---|
| Both networks present and addressed | OSDs bind to both |
| MTU on both, end to end | large transfers fail otherwise |
| Bond mode and hash policy | traffic distribution |
| VLAN configuration | reachability |
| Link speed | a slower node limits the PGs it holds |
| Firewall rules | daemons must communicate |
| Time synchronisation | monitors depend on it |
| Name resolution | both forward and reverse |
Testing both networks
# addresses present
ip -br addr show | grep -E '10\.0\.[23]\.'
# MTU on the interfaces
ip link show | grep -oE 'mtu [0-9]+'
# reachability and MTU to every existing node, on both networks
for n in 10.0.2.11 10.0.2.12 10.0.2.13; do
printf 'public %-14s ' "$n"
ping -M do -s 8972 -c 2 -W 2 "$n" >/dev/null 2>&1 && echo OK || echo FAIL
done
for n in 10.0.3.11 10.0.3.12 10.0.3.13; do
printf 'cluster %-14s ' "$n"
ping -M do -s 8972 -c 2 -W 2 "$n" >/dev/null 2>&1 && echo OK || echo FAIL
done
# throughput, both directions
iperf3 -c 10.0.3.11 -t 20 -P 8
iperf3 -c 10.0.3.11 -t 20 -P 8 -R
A node reaching only half the throughput of its peers becomes the bottleneck for every PG it holds.
Bond configuration
cat /proc/net/bonding/bond0 | grep -E 'Bonding Mode|Hash Policy|MII Status'
Compare against an existing node:
same mode
same hash policy
same member count
both members up
A bond with a different hash policy distributes traffic differently, which produces uneven utilisation that is hard to attribute later.
Time and name resolution
chronyc tracking
chronyc sources
# forward and reverse must both work
getent hosts ceph-07
dig +short -x 10.0.2.27
# and from the cluster's perspective
ceph orch host ls
Reverse resolution matters because some Ceph components and much tooling use it, and a missing PTR record produces confusing output rather than a clear error.
Catching asymmetries
# a comparison script, run on the new node and an existing one
{
ip -br addr show | grep -E '10\.0\.[23]\.'
ip link show | grep -oE 'mtu [0-9]+' | sort -u
cat /proc/net/bonding/bond0 2>/dev/null | grep -E 'Mode|Hash Policy'
ethtool bond0 2>/dev/null | grep Speed
chronyc tracking | grep -E 'Reference|Stratum'
} > /tmp/netcheck-$(hostname -s).txt
Diffing the output between the new node and an existing one surfaces every difference at once.
Quiz
Knowledge check · 4 questions
Q1. Why does a node with slower network links affect more than its own OSDs?
Q2. Testing MTU to one existing node confirms the configuration for the cluster.
Q3. Pre-check a new node's network.
A new node is racked and ready to add. It was configured by a different team from the one that built the existing nodes.
Q4. Why does reverse name resolution matter for a Ceph node?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Test MTU and reachability to every existing node on both networks separately — one misconfigured port affects only its paths, and a node correct publicly and wrong on the cluster network backfills nothing while appearing healthy. Diff a configuration summary against a known-good node to surface every difference at once.
Cross-course references
- Kubernetes: node configuration drift is caught the same way, by comparison
- Linux: verifying a new member matches the fleet is standard before adding it