Infrastructure · k3s

The Homelab

One k3s node under my desk, run like production — GitOps, full observability, and a bot that tells me before my users do.

99.8%server uptime
5systems in production
$0/mo cloud spend
The problem

Learning SRE by running something that can actually break

Reading about Kubernetes and GitOps only gets you so far. I wanted a system with real users — friends on a Minecraft server — where an outage is embarrassing, so the incentives to monitor, automate, and recover are real.

The catch: it all runs on one machine at home. Every choice had to earn its keep on a single node, stay free to host, and be reproducible if I ever wiped it.

  • One node — no spare capacity to hide sloppy resource use behind.
  • $0 budget — Cloudflare Pages, Azure free tier, Tailscale personal.
  • Reproducible — if the disk dies, Git should rebuild the cluster.
Architecture

One node, layered like a real platform

Traffic enters through Cloudflare and an Istio gateway; workloads run on k3s with mTLS; everything is observed, declared in Git, and alerts route out through a Discord bot and a serverless watchdog.

Key decisions

What I chose, and why

Decision

k3s

over full kubeadm Kubernetes

k3s gives me the real Kubernetes API in a single lightweight binary that fits one node — the concepts transfer, the overhead doesn’t.

Decision

GitOps with ArgoCD

over kubectl apply by hand

Every object lives in Git and reconciles automatically, so the cluster is reproducible and I can’t forget what I changed at 2am.

Decision

A Discord incident bot

over a paid pager service

Alerts land where I already am, for free, and double as a control surface — status, restart, and lag checks over slash commands.

Measured outcomes

The results

99.8%Uptimemeasured, not claimed
5Services in prod
20Grafana panels
7Alert rules
$0Monthly costfree tiers + self-host