This repository contains the full infrastructure-as-code and GitOps configuration for my home Kubernetes cluster. It is the single source of truth for the cluster's state, which is automatically managed and reconciled by FluxCD.
My Kubernetes cluster is deployed with Talos Linux, a Linux distribution build spefically for running Kubernetes. I run a three bare-metal node cluster on Intel 12th gen N95's and using Longhorn for cluster persistence block, object, and file storage.
- Networking & Service Mesh: cilium provides eBPF-based networking, cloudflared secures ingress traffic via Cloudflare, and external-dns keeps DNS records in sync automatically.
- Security & Secrets: cert-manager automates SSL/TLS certificate management. For secrets, I use sops to store and manage encrypted secrets in Git.
- Storage & Data Protection: Longhorn provides distributed storage for persistent volumes.
- Automation & CI/CD: actions-runner-controller runs self-hosted GitHub Actions runners directly in the cluster for continuous integration workflows.
Flux watches the clusters in my kubernetes folder (see Directories below) and makes the changes to my clusters based on the state of my Git repository.
The way Flux works for me here is it will recursively search the Infrastructure/apps folder until it finds the most top level kustomization.yaml per directory and then apply all the resources listed in it. That aforementioned kustomization.yaml will generally only have a namespace resource and one or many Flux kustomizations (ks.yaml). Under the control of those Flux kustomizations there will be a HelmRelease or other resources related to the application which will be applied.
Renovate watches my entire repository looking for dependency updates, when they are found a PR is automatically created. When some PRs are merged Flux applies the changes to my cluster.
This Git repository contains the following directories under Infrastructure.
📁 infrastructure
├── 📁 apps # applications
├── 📁 components # re-useable kustomize components
├── 📁 sources # source of the commonly used apps(deprecated)
└── 📁 flux # flux system configuration
This README is a living document and will be updated as the homelab evolves.
Thanks to all the people who donate their time to the Home Operations Discord community. Be sure to check out kubesearch.dev for ideas on how to deploy applications or get ideas on what you could deploy.