My Home Lab Setup with K3s (a.k.a. Kubernetes Without Tears)

HomeLab DevOps

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:

  1. Two mini PCs (BeeLink SER6) with Ryzen 9 6900HX and 32GB RAM each. Basically, tiny monsters.
  2. One Synology DS1019+ NAS, with 5×4TB WD Red drives in RAID 5 — because your data deserves redundancy.
  3. A 1Gbps internet connection — fast enough for experiments, backups, and the occasional Steam update.
  4. Ruckus ICX 7150-C12P switch — Enterprise-grade networking, because overkill is underrated.
  5. 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/hosts on 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.