~/felixhub.dev

The cluster in

my basement.

Everything on felixhub.dev (this site, the APIs, GitLab, the game servers, and the businesses I run) lives on hardware I built and maintain myself. Here's what that actually looks like.

The full cluster rack
the rack · K3s on NixOS

How it started

It started with my dad explaining what Kubernetes was. Once I understood the idea of running software across a group of machines instead of on one, we looked at the different ways to set it up and decided on K3s, a lightweight Kubernetes distribution, instead of full upstream Kubernetes or the other options.

The first deploy went onto a small Lenovo ThinkCentre I had already been using to run Docker. Moving from a handful of containers on one box to an actual cluster was where I learned how Kubernetes works in practice: how workloads get scheduled, how services find each other, and what happens when something breaks.

It didn't stay small for long. I started buying used Dell PowerEdge servers from Garland Computer, and when Christmas came around I asked for more of them. Today the cluster is eight nodes, two control-plane nodes and six workers, made up of two R630s, five R730xds and a Supermicro GPU server running eight AMD Instinct MI50s. The R730xds hold over 30 TB of storage on SAS drives.

Every node runs NixOS. Instead of setting up each server by hand, all of them are built from one standardized Nix configuration. When a new server arrives, I install NixOS on it over SSH with nixos-anywhere, and from then on I use Colmena to roll the configuration out to groups of machines at once. A new node comes up the same way as the rest, and a change ships to the whole fleet with one command.

What's in it

8nodes: 2 control-plane, 6 workers
2× R630Dell PowerEdge 1U
5× R730xdDell PowerEdge 2U storage
30 TB+SAS storage across the R730xds
8× MI50AMD Instinct GPUs in a Supermicro server
NixOS + K3sinstalled with nixos-anywhere, deployed with Colmena

The cluster

Stepped back
Stepped backThe whole thing from across the room. It started as one machine and grew into compute, storage and networking on a single rack.
The GPU server
The GPU serverA Supermicro server running eight AMD Instinct MI50 accelerators and dual CPUs. This is the compute node behind the local AI models and the heavier experiments.
Watching it
Watching itGrafana dashboards for node health, pod restarts and resource pressure. If something's about to fall over, I'd rather hear it here than watch the site go down.
The networking
The networkingThe switch and router in front of the cluster. Public traffic arrives through a Cloudflare tunnel, so none of this is exposed to the internet directly.

Hands on the hardware

MI50 accelerators
MI50 acceleratorsA stack of AMD Instinct MI50s, datacenter GPUs I run for local compute and model experiments.
Storage
StorageA home-built NAS. Bulk storage for backups, container images and datasets, kept separate from the nodes that do the work.
The bench
The benchSoldering iron and a hotplate for reflow, where the hardware side of all this actually happens.
My hardware & rework station
My hardware & rework stationWhere boards get built and fixed: a soldering station, a reflow hotplate, a fume extractor, and a pegboard of wire, tools and parts above it all.

All of it set up, broken, and fixed by me. The software side is on the projects page; the source is on my GitLab.