The infrastructure under everything else here: tenno.club, the trip maps, the recipe database, and the build-time vitals on this very page all run on a Kubernetes cluster in my house on a volcanic rock in the Atlantic - alongside the usual suspects like Plex, HomeAssistant, and whatnot. Every project ships a Helm chart and deploys to it from CI; Authentik guards the private bits, Prometheus watches the lot.
source: private (it knows too much)
Let's start physical. What is actually humming away on the volcanic rock — and does your cat have opinions about it?
As little as a year ago, it was a cubby hole in an IKEA Kallax shelf full of Raspberry Pis and dangly wires, that Ted just loved to “cable manage” for me. But I found one of those little Asus or something mini-PCs on Amazon with a decent CPU (mobile Ryzen 7) and 32GB for something like €300 (remember when RAM was cheap?) and decided to go for both the power upgrade and the cable sanity. So: not as much as “cluster” makes it sound, to be honest! Just the mini PC and a switch, and an ESP32 for some IoT stuff. And the obligatory pile of Unifi gear.
Why full Kubernetes at home instead of a VPS and docker-compose like a normal person? Defend the control plane.
Honestly, I’ve done the VPS / docker / Ansible thing enough and it always
devolves into chaos. This time, I wanted proper discipline when it came to
my IaC. The RasPis were running k3s, but then I came across Talos Linux -
which doesn’t even have a shell or SSH access, only zuul Kubernetes API -
and knew that would force some discipline. So the main reason is, take
away the temptation to be undisciplined.
Additionally, now with LLM-assisted development, the cost of throwing together some Terraform code to ensure the cluster is deterministic, idempotent, all that good stuff, became so much lower, that it felt like the perfect storm of timing and technology.
Every one of your projects ships a Helm chart and a CI pipeline. Describe the paved road from git push to running pod — and which parts are still gravel.
So often the cobbler’s shoes are the worst maintained. I wouldn’t accept
a sudo ./deploy.sh at work, so why should I hold myself to lower
standards?
The control plane is protected with Tailscale, so it’s as simple as
connecting to that and running helm. I’m still copy/pasting the CI
pipeline into a new project each time though, so the next stop is shared
actions to centralise that.
Authentik, Traefik, Prometheus — an enterprise platform stack for a household of two people and a cat. Where's the line between practice for the day job and cosplay?
Blurry. I very much learn by tinkering and doing, and sometimes in my line of work I go full weeks without touching code, so this is a perfect way to have some fun, unwind in the evenings, and still keep my skills sharp. It’s no coincidence how closely this matches the stack we use at work.
And, honestly, it’s a dopamine hit that it all does just work so well - this is by far the smoothest self-hosting setup I’ve ever had, and feels like the one that will finally stand the test of time without me ripping it down again in a couple of years.
What's the worst outage you've caused yourself, and what did it take down with it?
Not really “caused myself”, but one thing I didn’t realise is that here in Spain, there’s a court order against Cloudflare by La Liga, the national football association. When there’s a match on, anything passing through Cloudflare with the “orange cloud” setting turned on fails to resolve.
Given an older version of the homelab ran everything through Cloudflare - including Tunnels instead of Tailscale - I had a very baffled weekend when football season started, and figuring out why involved a lot of cursing.