Skip to content

Network Topology

The cluster uses a single network with 10G switch infrastructure:

  • Main LAN (192.168.10.0/24) - All cluster traffic via 10G switch
  • TrueNAS Storage - 192.168.10.133 (10G connected via switch)
┌─────────────────────────────────────────────────────────────────────────────┐
│ NETWORK TOPOLOGY │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Proxmox │ │ TrueNAS │ │
│ │ hp-server-1 │ │ 192.168.10.133 │ │
│ │ 192.168.10.14 │ │ │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ 10G │ 10G │
│ │ │ │
│ ▼ ▼ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ 10G SWITCH │ │
│ │ 192.168.10.0/24 │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Control Plane│ │ Control Plane│ │ Control Plane│ │ Workers │ │
│ │ .237 │ │ .76 │ │ .140 │ │ .164/.219/.159│ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ GPU Worker VM 100 │ │
│ │ ┌─────────────────┐ │ │
│ │ │ net0 (ens18) │ │ │
│ │ │ vmbr0 → 10G LAN │ │ │
│ │ │ 192.168.10.x │ │ │
│ │ │ (DHCP) │ │ │
│ │ └─────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
DeviceIPPurpose
Router/Gateway192.168.10.1Default route
Proxmox (hp-server-1)192.168.10.14Hypervisor
TrueNAS192.168.10.133NAS (NFS/SMB/RustFS S3) - 10G
Control Plane 1192.168.10.237K8s master
Control Plane 2192.168.10.76K8s master
Control Plane 3192.168.10.140K8s master
Worker 1192.168.10.164K8s worker
Worker 2192.168.10.219K8s worker
Worker 3192.168.10.159K8s worker
GPU Worker192.168.10.x (DHCP)K8s GPU worker
Wyze Bridge192.168.10.46RTSP camera streams
LoadBalancer Pool192.168.10.32-63 (/27)Cilium L2 announcements
machine:
network:
interfaces:
- interface: ens18
dhcp: true
kubelet:
nodeIP:
validSubnets:
- 192.168.10.0/24
BridgePhysical NICCIDRPurpose
vmbr0ens2192.168.10.14/24Main LAN (10G)
InterfaceIPSpeedPurpose
enp67s0192.168.10.133/2410G SFP+Main LAN (via 10G switch)

The Cilium network policy allows these storage connections:

DestinationPortsPurpose
192.168.10.1332049, 111NFS
192.168.10.133445SMB
192.168.10.1339000, 30292, 30293RustFS S3 (Loki, Tempo, pgBackRest)
Terminal window
# Test connectivity to TrueNAS
ping 192.168.10.133
# Test NFS mount
showmount -e 192.168.10.133
Terminal window
# Test raw wire speed (should be ~9.4 Gbps)
iperf3 -c 192.168.10.133
# Test NFS throughput from inside a pod
kubectl exec -n <ns> <pod> -- dd if=/mnt/nfs/testfile of=/dev/null bs=1M status=progress
# Test NFS throughput from Proxmox host (bypasses VM layer)
mount -t nfs -o nfsvers=4.1,nconnect=16,rsize=1048576,wsize=1048576 192.168.10.133:/mnt/BigTank/k8s/llama-cpp /mnt/nfstest
dd if=/mnt/nfstest/testfile of=/dev/null bs=1M status=progress

The default Linux kernel read_ahead_kb of 128 KB limits NFS sequential reads to ~140 MB/s on any link speed. The cluster applies these fixes via Talos machine config:

LayerSettingValue
VFS readaheadudev rule ATTR{read_ahead_kb}16384 (16MB)
NFS readaheadsiderolabs/nfsrahead extensionInstalled on all nodes
RPC concurrencysunrpc.tcp_slot_table_entries128 (default was 2)
TCP congestionnet.ipv4.tcp_congestion_controlbbr
TCP buffersnet.core.rmem_max / wmem_max64MB
NIC ring buffersProxmox + TrueNAS8192 (max)
NFS mount optionsPer-PV CSI mountOptionsnconnect=16,rsize=1M,wsize=1M

Verified performance (from TrueNAS ARC-cached 4GB file):

LayerSpeed
iperf3 (wire)9.4 Gb/s
Proxmox host → NFS2.7 GB/s
Talos VM → NFS (before tuning)~128 MB/s

Debug commands:

Terminal window
# Verify readahead is 16384 (not 128)
kubectl exec -n <ns> <pod> -- cat /sys/class/bdi/0:*/read_ahead_kb
# Verify sunrpc slots are 128 (not 2)
kubectl exec -n <ns> <pod> -- cat /proc/sys/sunrpc/tcp_slot_table_entries
# Full NFS mount stats (connections, slots, RTT)
kubectl exec -n <ns> <pod> -- cat /proc/self/mountstats

See scripts/debug-nfs-server.sh (TrueNAS) and scripts/debug-nfs-client.sh (Proxmox) for comprehensive debugging.