... managed by Flux and serviced with RenovateBot 🤖
Welcome to my home Kubernetes cluster.
Lots of fun (to me at least 😉) stuff can be found, poke around my cluster directory to see what my cluster is running. Feel free to open a GitHub Issue.
-
All nodes are running bare-metal on Ubuntu Server 20.04.
-
My nodes are provisioned using the Ansible galaxy role ansible-role-k3s.
-
System Upgrade Controller to apply updates to k3s.
-
Renovatebot keeps my applications up-to-date by scanning my repo and opening pull requests when it notices a new container image update.
-
Actions Runner Controller dynamically operates a set of self-hosted Github runners.
This cluster runs on the following hardware:
Device | OS Disk Size | Data Disk Size | Ram | Purpose |
---|---|---|---|---|
Lenovo ThinkCentre M93p Tiny (i5-4570T) | 250GB SSD | N/A | 8GB | k3s Master |
Intel NUC8i5BEH | 512GB NVMe | 1TB SSD. | 32GB | k3s Worker |
Intel NUC8i5BEH | 480GB SSD | 1TB NVMe | 32GB | k3s Worker |
Intel NUC8i3BEH | 512GB NVMe | 1TB SSD | 32GB | k3s Worker |
Raspberry Pi4 | 128GB SD Card | N/A | 4GB | k3s Worker (currently dedicated to Octoprint) |
Synology NAS (librarium) | N/A | 3x6TB SHR, 512GB SSD | 8GB | Media and general (S3-compatible) storage bucket |
In my cluster I run coredns, etcd, and two instances of external-dns.
The "internal" External-DNS instance populates CoreDNS with all my ingress records and stores it in etcd. When I'm browsing any of the webapps while on my home network, the traffic is being routed internally and never makes a round trip. The way I set this up is in my router. When a DNS request is made for my domain or any of my subdomains it uses coredns as the DNS server, otherwise it uses whatever upstream DNS I provided.
The "external" External-DNS instance populates my Cloudflare DNS with all ingress records that are running on the external ingress controller.
A lot of inspiration for my cluster came from the people that have shared their clusters over at awesome-home-kubernetes