TL;DR
I outgrew a single Raspberry Pi running Docker for everything—media, personal cloud, and experiments. Encoding was slow, storage was tight, and I had more hardware lying around doing nothing. So I built a 3-node, multi-architecture K3s cluster with a Pi 4B, a Pi 400, and an old Lenovo laptop to host CTFd, media services, and my personal cloud—while learning a ton about home lab infrastructure along the way.
This is Part 1 of my multi-arch K3s home lab series. If you want the next steps:
- Part 1: Why and Hardware (you are here)
- Part 2: Networking, Storage, and Apps – How I wired up networking, storage, and actually ran CTFd, Nextcloud, and media apps on the cluster.
- Part 3: Failures, Lessons, and What’s Next – What broke, what I learned, and how I’d do it differently next time.
- Part 4: Rebuilding from Scratch (The Right Way) – The laptop HDD died. So I rebuilt the cluster from scratch—this time with monitoring from day one, Helm charts, and a tutorial you can actually follow.
Why I Built a Multi-Arch K3s Cluster
This whole thing started with pain.
My original setup was pretty simple: a Raspberry Pi 4B running Docker. It hosted my media server and a few other containers. It worked, but:
- Media encoding was painfully slow on the Pi.
- Storage was tiny. The Pi just couldn’t keep up with large media files.
- I had an old Lenovo Ideapad with a 1 TB HDD just sitting around, collecting dust.
At the same time, I was getting more serious about CTFs (Capture The Flag). My team had spun up a CTF team, and I noticed a pattern:
- Other teams had their own CTF platforms.
- I wanted the same—but cloud providers cost money, and my budget was basically zero.
So instead of renting someone else’s servers, I decided to use the hardware I already had and turn it into something more powerful and flexible.
Why K3s?
I had heard of K3s as a lightweight way to:
- Run Kubernetes on small devices like Raspberry Pis.
- Connect multiple machines in the same network.
- Let them work together as a single cluster.
It sounded like exactly what I wanted:
- Use all the hardware I had.
- Learn real Kubernetes concepts while doing it.
- Run CTFd, media, and cloud services in a more reliable way than just random Docker containers.
Why Multi-Arch?
The multi-architecture part happened quite naturally.
I already had:
- A Raspberry Pi 4B (8 GB) with a 128 GB SSD (USB boot).
Then a friend from my CTF team sent me:
- A Raspberry Pi 400 (4 GB) with an SD card.
And lying around was:
- An old Lenovo Ideapad with an Intel i5 (4th gen), 4 GB RAM, and a 1 TB HDD.
Instead of letting these devices sit idle, I decided to:
- Use the Pis as ARM nodes.
- Use the laptop as an x86 node with lots of storage.
The laptop also solved some of my earlier problems:
- Media encoding and heavy workloads could move to x86.
- The 1 TB HDD gave me space for media and data.
The Hardware and Cluster Layout
Here’s the final cluster:
Node 1 – Master
- Raspberry Pi 4B (8 GB RAM)
- 128 GB SSD (USB boot)
- Runs K3s server (control plane)
Node 2 – Worker
- Raspberry Pi 400 (4 GB RAM)
- SD card storage
- Lighter workloads
Node 3 – Worker
- Lenovo Ideapad
- Intel i5 4th gen, 4 GB RAM
- 1 TB HDD
- Runs the heavier services (media, downloads, etc.)
OS Choices
- Both Pis run Raspberry Pi OS.
- The laptop runs Ubuntu.
Nothing exotic—just familiar Linux distros so troubleshooting stays simple.
K3s Topology
I kept the cluster layout straightforward:
- 1 K3s master (Pi 4B).
- 2 K3s workers (Pi 400 + laptop).
K3s brought along:
- Traefik as the built-in ingress controller.
- Network and control-plane components managed automatically.
I didn’t overcomplicate the control plane early on—the goal was to get things running, then iterate.
What’s Coming Next in This Series
This is Part 1 of a three-part series on my multi-arch K3s home lab.
Part 2 – Cluster Plumbing & Apps
I’ll dive into the actual setup: networking with K3s + Traefik, storage with Longhorn and the laptop HDD, how I wired up Tailscale and Cloudflared, and how services like CTFd, Nextcloud, Jellyfin, qBittorrent, and Syncthing are scheduled across nodes.Part 3 – Failures, Lessons, and Future Plans
I’ll talk about the real-world issues (like x86-only images, YAML struggles, and a dying Pi Wi‑Fi card), how I operate the cluster day-to-day with just the CLI, what this taught me about infra and home labbing, and what I’d change if I rebuilt it today.
If you’re curious about the full cluster repo, you can already peek at it here:
References: Tools & Services Used
Throughout this series and in my home lab journey, I’ve relied on a mix of open-source tools and managed services. Here are references to all the core tools mentioned:
- K3s – Lightweight Kubernetes distribution designed for edge and home labs.
- Raspberry Pi OS – Official OS for the Raspberry Pi.
- Ubuntu – Popular Linux distribution, used here on the Lenovo Ideapad.
- Traefik – Modern, cloud-native ingress controller for Kubernetes.
- Longhorn – Cloud-native distributed block storage for Kubernetes.
- Tailscale – Mesh VPN for secure networking between devices and clusters.
- Cloudflared – Tunnels inbound traffic securely to the cluster using Cloudflare’s global network.
- CTFd – Open-source Capture The Flag (CTF) competition platform.
- Nextcloud – Self-hosted productivity platform for cloud file sync and sharing.
- Jellyfin – Open-source media system for streaming personal media.
- qBittorrent – Open-source BitTorrent client, used for downloads.
- Syncthing – Continuous file synchronization for distributed environments.
- Docker Hub – Public container image registry, used for pulling official and community Docker images.
I’ve used these across different nodes and parts of the stack, each helping handle a specific piece of cluster infrastructure or the apps I wanted to run. For more implementation details and exact manifest files, check out the k3s_cluster GitHub repo.