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:


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.