Skip to content
Active
Tools
Open Source
Jan 2026

homelab

The second version of my homelab: a K3s cluster with a declarative service catalogue, TLS from cert-manager, secrets encrypted in git, and a Prometheus stack watching all of it. It replaced a Raspberry Pi running Docker Compose.

65 entries
Catalogue
18
Default install
31/31 up
Prometheus targets
10
ADRs
homelab project visual

The constraint

pi-lab answered whether one Raspberry Pi could carry a homelab, and then hit the limits of Compose: every service its own snowflake, secrets in env files, and no way to say which services should exist without reading every directory.

The approach

Describe each service once in a catalogue, choose what is installed per environment, and let the cluster converge. Traefik and cert-manager handle ingress and TLS, External Secrets with SOPS and age keep secrets encrypted in git, and kube-prometheus-stack watches everything. ArgoCD is optional.

Process
  1. 1
    Catalogue first

    Refactored the service list into a catalogue so adding a service is one entry, and choosing what runs is configuration.

  2. 2
    Test against a real API server

    Applied the manifests to a real Kubernetes API server, which catches failures that schema linting passes.

  3. 3
    Deploy, then measure

    Counted Prometheus targets after the first real deploy rather than assuming the monitoring was wired.

Outcomes

  • A 65-entry service catalogue: 18 installed by default, the rest opt-in
  • 58 of 64 manifests applied cleanly to a real API server, not just linted
  • 31 of 31 Prometheus targets up on the first real deploy
  • Garage replaced MinIO for object storage
Details

Rebuilt a self-hosted homelab as a K3s cluster with a declarative service catalogue, cert-manager TLS, SOPS-encrypted secrets and a Prometheus stack.