Running Kubernetes at Home

I’ve been managing a bare-metal Kubernetes cluster at home for a while now to learn about Kubernetes and its ecosystem. You can check it out here: solanyn/home-ops

The Cluster

My Kubernetes cluster is deployed with Talos and is managed by Flux via GitOps. I handle backups of the cluster to my NAS via NFS and S3 and offsite to Cloudflare R2.

Core Components

  • Flux: GitOps operator that reconciles cluster state from Git
  • Renovate: Automatically updates dependencies and creates PRs via GitHub Actions
  • cert-manager: Manages SSL certificates across services
  • external-dns: Syncs DNS records for ingresses, services and Gateway API HTTP routes
  • external-secrets: Integrates Kubernetes Secrets with 1Password
  • cilium: High-performance networking for Kubernetes
  • rook: Provides persistent storage for the cluster
  • volsync: Provides volume replication and dissaster recovery

DNS with Split Horizon

I run two instances of external-dns:

  • One syncs private DNS records to my UniFi router using a webhook provider
  • The other pushes public records to Cloudflare

Ingresses/HTTPRoutes are tagged with internal or external classes to control which DNS provider is used.

Final Comments

This setup has been a great learning experience and has allowed me to explore the Kubernetes ecosystem in depth. I plan on building and expanding my cluster with compute, deploying more complex platforms and services (looking at you Kubeflow) and building AI/ML workloads on Kubernetes!