$ lscpu --lab

The lab

This is the hardware the blog keeps talking about. Five Proxmox nodes, a Ceph pool measured in hundreds of terabytes, a 10GbE fabric with jumbo frames, three different NVIDIA generations, and a small fleet of Raspberry Pis doing the jobs that should never share a failure domain with everything else. It's over-built on purpose. That's the whole point.

captured July 2026 · addressing and VLAN details left out on purpose

The homelab rack in a basement corner: a 4U EPYC node, three small form-factor machines, and a switch
fig 01The whole cluster, in one corner of a basement. It is probably fine.
9
Talos K8s nodes
~38
services, GitOps
~230 TiB
Ceph raw
3
GPU generations
40C/80T
cluster CPU
528 GB
cluster RAM

# how it fits together

One diagram for the whole shape of it. Traffic comes in from the top, through the edge and the firewall, across the 10GbE core, and down onto the compute and storage that run the workloads. The Pi fleet hangs off to the side on purpose, so home automation keeps working when the cluster is down for maintenance.

Internetthe hostile sideCloudflareDNS + proxied edgeOPNsenseHA firewall pair, CARP failoverBrocade ICX661010GbE core, jumbo framesProxmox + Cephfive nodes, ~230 TiB rawpve-00pve-01pve-02pve-03pve-04Talos Kubernetesnine nodes, ArgoCD GitOpscontrol x3worker x6GPU x3Raspberry Pi fleetout-of-band + home automation
How traffic flows, top to bottom. Addressing and VLANs left out on purpose.

# the cluster

NodeCPUCoresRAMGPU
pve-00AMD EPYC 728216C / 32T256 GB ECCRTX 4070 Ti + GTX 1660
pve-01Threadripper 2920X12C / 24T128 GB ECCGTX 1080 Ti
pve-02Core i7-67004C / 8T64 GBiGPU only
pve-03Core i7-67004C / 8T48 GBiGPU only
pve-04Core i7-77004C / 8T32 GBiGPU only
totals5 nodes40C / 80T528 GB3 discrete GPUs

Two tiers on purpose. pve-00 and pve-01 are the heavy compute and GPU hosts, both on ECC memory, with discrete NVIDIA cards passed through to Kubernetes workers. The three HP small-form-factor boxes are consumer hardware doing honest work as quorum and Ceph OSD hosts. Not everything needs to be a server to be useful.

# three GPU generations

Three NVIDIA architectures, each passed straight through to a Talos Kubernetes worker. The newer cards get sliced up with MPS so several workloads can share them; the 1080 Ti stays dedicated. Transcode, local inference, and the occasional experiment all land here.

CardArchitectureHostPassed to
RTX 4070 TiAda Lovelacepve-00K8s GPU worker (MPS shared)
GTX 1660Turingpve-00K8s GPU worker (MPS shared)
GTX 1080 TiPascalpve-01K8s GPU worker (dedicated)

# storage

Everything sits on Ceph, on the order of 230 TiB raw spread across every node. Spinning disks make up the bulk pool, NVMe backs the fast pool and local VM storage, and a couple of Intel Optane drives handle metadata. The big NVMe counts hang off ASUS Hyper M.2 carrier cards using PCIe bifurcation. This is the layer that taught me the most, mostly the hard way, which is a story the blog gets into. Backups run to a dedicated Proxmox Backup Server, because "I have backups" and "I have tested restores" are not the same sentence.

# the fabric

A Brocade ICX6610 sits at the core, with 10GbE SFP+ uplinks to every node and jumbo frames end to end. Each node runs a two-bridge, VLAN-aware layout over two 10GbE links: one trunk carries tenant and VM traffic, the other isolates the latency-sensitive storage and cluster replication on its own physical port. That split is what lets a firewall VM live-migrate between nodes without dropping a packet. Routing between the dozen or so segments is handled by a high-availability OPNsense pair with CARP failover.

The per-node 10GbE cards are a museum of whatever was good and cheap at the time: Intel X550, Mellanox ConnectX-3 Pro, and Chelsio T320. They all do the same job. Edge switching and wireless are UniFi, and an APC UPS with a network card keeps the rack alive long enough to shut down cleanly.

# the pi fleet

A handful of Raspberry Pis run the things that should keep working even when the cluster is down for maintenance, mainly home automation and out-of-band tooling. They are named after Culture ships, which felt appropriate for machines whose entire job is to be quietly competent.

HostModelStorageRole
ocislyRaspberry Pi 5 (16 GB)2 TB NVMe via PCIe HATHome automation primary
mistakenotRaspberry Pi 5 (8 GB)512 GB NVMeIaC toolchain and edge services
flereRaspberry Pi 4 (4 GB)microSD / USBLightweight services

They share a small bag of USB radios that move between nodes as needed: a Z-Wave controller, a multiprotocol Zigbee/Thread stick, and a Google Coral TPU for edge ML.

# what it runs

The hardware is only half the story. Here's what runs on it, grouped and not exhaustive. It drifts as I add and retire things.

# media

Plex, the full *arr automation stack, request management, and download clients pinned behind a VPN.

The reason any of this started.

# home

Home Assistant, Frigate NVR with Coral TPU detection, Music Assistant, and a bag of Zigbee, Z-Wave, and Thread radios.

Runs on the Pi fleet so it survives cluster maintenance.

# personal cloud

Nextcloud, a recipe box, a wiki, and Penpot for design.

The stuff I'd otherwise rent from someone else.

# platform

Self-hosted GitLab with CI runners, Prometheus and Grafana plus Graylog for observability, Authentik for SSO, Infisical and Vaultwarden for secrets, Umami for analytics, and a public status page.

The boring, important layer that keeps the rest honest.

# chassis and power

NodeChassisPSU
pve-00Rosewill RSV-L4412 4U (12 hot-swap bays)EVGA SuperNOVA 1600 P2 (Platinum)
pve-01Corsair Carbide 330R mid-towerEVGA SuperNOVA 850 T2 (Titanium)
pve-02/03/04HP EliteDesk 800 G2 SFF (stock)HP stock SFF

Want the story behind all this instead of the spec sheet? The blog has the how-it-got-here and the incidents that shaped it.