My Home Lab Setup with K3s (a.k.a. Kubernetes Without Tears)
Note: This blog post was enhanced with the help of AI to improve grammar and refine tone. All content and opinions are my own.
There comes a point in every techie’s life when they look at their perfectly functioning home network and think:
“You know what this needs? A lightweight Kubernetes cluster.”
And thus, a home lab is born. In this post, I’ll walk you through my home lab setup featuring K3s, the minimalist Kubernetes distribution that doesn’t ask for 16 vCPUs and your soul.
Let’s dive in.
🏗️ Infrastructure Overview
Here’s the humble but mighty setup powering my home lab:
- Two mini PCs (BeeLink SER6) with Ryzen 9 6900HX and 32GB RAM each. Basically, tiny monsters.
- One Synology DS1019+ NAS, with 5×4TB WD Red drives in RAID 5 — because your data deserves redundancy.
- A 1Gbps internet connection — fast enough for experiments, backups, and the occasional Steam update.
- Ruckus ICX 7150-C12P switch — Enterprise-grade networking, because overkill is underrated.
- A personal PC (Windows 11) — also my gaming rig. Now moonlighting as a K3s admin terminal.
🤔 Why K3s?
When choosing a Kubernetes distro for home use, you want three things:
- Low overhead
- Easy setup
- A community that won’t ghost you
Here were the top contenders:
- k3s – lightweight, popular, backed by Rancher
- k0s – also lightweight, but less buzz
- MicroK8s – backed by Canonical, but felt a bit heavier
- minikube – great for local dev, not really multi-node-friendly
I Googled. I asked ChatGPT. I squinted at GitHub stars.
K3s won.
🧹 Pre-K3s Housekeeping
Before installing K3s, I made sure the hardware and network were ready for the cluster life.
🧑💻 OS Installation
I went with Debian 12 on both mini PCs. Why? Honestly, because I know how to apt-get install stuff without
googling every flag.
📦 Storage
My trusty Synology NAS already housed years of photos, videos, and embarrassing backups. For the cluster, I simply enabled NFS on the NAS — perfect for persistent volumes.
🕸️ Networking
To avoid the pain of dynamic IPs:
- I set static DHCP leases on my router based on MAC addresses.
- Then I updated
C:/Windows/System32/drivers/etc/hostson my personal PC:
10.0.0.101 beelink1
10.0.0.102 beelink2
Now I can SSH with ssh beelink1 like it’s 1999.
And to skip password prompts forever:
ssh-keygen -t ed25519
ssh-copy-id beelink1
ssh-copy-id beelink2
🚀 Installing K3s
Honestly, installing K3s felt illegal—it was that easy.
🧠 On the primary node (beelink1):
curl -sfL https://get.k3s.io | sh -
That’s it. Seriously. It starts right up.
Get the worker token from:
cat /var/lib/rancher/k3s/server/node-token
🧑🔧 On the worker node (beelink2):
curl -sfL https://get.k3s.io | K3S_URL=https://beelink1:6443 K3S_TOKEN=<token> sh -
Boom. Clustered.
🔧 Accessing the Cluster from My PC
K3s puts the kubeconfig here on the master:
/etc/rancher/k3s/k3s.yaml
So I copied it over:
scp beelink1:/etc/rancher/k3s/k3s.yaml ~/.kube/config
…then edited it to replace the internal IP with beelink1. Now I can run:
kubectl get nodes
and feel like a cloud god, right from my gaming PC.
🛠️ Tools That Make Life Better
🧪 k9s
If kubectl is the command-line Swiss Army knife, k9s is like having a live command center for your cluster.
Terminal-based, fast, and incredibly useful.
📦 helm
Installing apps without Helm is like writing YAML for fun. Don’t.
Helm lets me deploy complex setups (databases, monitoring, etc.) in seconds.
🔀 Swapping Traefik for NGINX Ingress
K3s ships with Traefik as the default ingress controller. It’s fine. But I like nginx because I’m familiar with it, and let’s be honest — sometimes you just want your reverse proxy to do exactly what you expect.
🧹 Step 1: Remove Traefik
helm uninstall traefik -n kube-system
helm uninstall traefik-crd -n kube-system
Also delete the manifests so it doesn’t respawn like a horror movie villain:
rm -rf /var/lib/rancher/k3s/server/manifests/traefik*.yaml
🆕 Step 2: Install NGINX Ingress
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install nginx-ingress ingress-nginx/ingress-nginx
Now I can route traffic with configs I actually understand.
🧘♂️ Final Thoughts
This K3s setup has been smooth, stable, and surprisingly fun. It’s given me a playground to test deployments, monitor clusters, and break things safely without AWS charging me $13.22 every time I blink.
If you’re building a home lab and want a no-fuss Kubernetes experience, K3s is 100% worth it.
Now if you’ll excuse me, I’m off to install Prometheus for no reason other than it looks cool on a Grafana dashboard.
🏡✨ Long live the home lab.