Skip to content

GitOps principles to define kubernetes cluster state via code

License

Notifications You must be signed in to change notification settings

onedr0p/k8s-gitops

 
 

Repository files navigation

My home Kubernetes cluster managed by GitOps

... managed by Flux and serviced with RenovateBot 🤖




Discord k3s pre-commit renovate


👋 Overview

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.


⚙️ Software

  • 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.


🗄️ Hardware

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

🌐  Networking

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.

🤝  Thanks

A lot of inspiration for my cluster came from the people that have shared their clusters over at awesome-home-kubernetes

About

GitOps principles to define kubernetes cluster state via code

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 93.7%
  • HTML 6.3%