← Back to blog

Building My Kubernetes Homelab

Brandon · July 31, 2026
homelabkubernetesdevopsci-cd
View on GitHub

Project Brief

I wanted to build a homelab because I wanted a permanent home for my self-hosted applications. This homelab is a single-node Kubernetes cluster running on a Raspberry Pi 5, managed entirely through Git utilizing the GitOps methodology.

The end goal was not just to get this project running, but further enhancing it with apps that I want to manage. I didn’t want hand-holding by utilizing AWS EKS, but wanted to get my hands dirty and debug issues as I started building out the infrastructure. Yes, managed Kubernetes would have been faster, but EKS and its equivalents hide the control plane, the container runtime, and most of the networking.

This is exactly what I wanted to avoid here. Running k3s on hardware I own meant configuring deployments, debugging a kubelet that refused to start, and working out why a Secret silently failed to decrypt after a rebuild. These are the failures that helped solidify my knowledge base.

In the following sections, I’ll go over why I made the architectural decisions I made. So, follow along!

Architecture Overview

The core idea of my architecture is to make the github repo the single source of truth. That is what the kubernetes cluster is reconciled against. Flux’s controllers then poll the repo and sync it into the cluster as a Kustomization. One for apps and one for monitoring, so that if one manifest is broken, it doesn’t affect the other.

The app Kustomization then decrypts SOPS-encrypted secrets with an age key in the cluster and deploys the linkding and cloudflared pods. Linkding uses k3s’ built-in SQLite DB for persistent volume storage. The monitoring Kustomization deploys the kube-prometheus-stack, which brings in Prometheus and Grafana.

Cloudflared maintains an outbound tunnel to Cloudflare, so requests coming from the internet are using the connection the cluster established, instead of going through a port. This allows my IP to be protected, while still being able to access my apps through the cloudflare tunnel.

diagram of the architecture

Design Decisions and Trade-offs

What I’d do differently