Back to Projects
Homelab Infrastructure

Homelab Kubernetes Cluster

RETIRED SURFACE: BARE METAL

Ansible handled node provisioning and Flux GitOps was partway to landing when the nodes died. Everything it was meant to run lives on the Docker host now.

Nodes
3 (retired)
Runtime
k3s
Provisioner
Ansible
GitOps
Flux (never finished)

The Problem

I started on a single Beelink running Docker Compose. It hit a ceiling when I wanted more services and a rollback path I trusted. Adding a second machine just doubled the coordination work.

Approach

Three Lenovo mini PCs, each running as both control plane and worker. k3s for the cluster runtime; less overhead than upstream Kubernetes and the same APIs. Ansible handles initial node provisioning and configuration. Flux is being added so every workload change is a Git commit instead of a kubectl apply.

Current State

The Lenovo nodes died before Flux reconciliation was finished. Rather than replace them, I consolidated everything back onto the Docker host — see Self-Hosted Services for where those workloads live now. The cluster is fully decommissioned.

Stack

k3s · Ansible · Flux · kubectl