| Running k3s on a small cluster of mini pcs and RPis. Use Tailscale for MagicDNS and access from any network. Have a custom wildcard domain pointing to my tailscale k3s node ips, and a traefik ingress controller. This means exposing a service from my cluster on a subdomain just requires creating an ingress object in k3s, and it's only accessible via tailscale. cert-manager and let's encrypt handle TLS. All services are deployed via gitops using ArgoCD, so changes are auditable and can be easily rolled back. Replacing hardware is just a matter of installing k3s and joining the cluster, then everything automatically comes up. Restic for backups to s3. For home automation I use a USB zigbee controller, mosquitto, zigbee2mqtt, room assistant, and home assistant, all deployed on k3s. These control my lights, HVAC, and various garage doors and gates. Also have mains-powered zigbee switches bound directly to devices so everything still works even if network or home assistant goes down. The RPis are used for Room Assistant, which can automatically control lights/HVAC based on presence detection via a smartwatch. More intrusive actions (e.g. making lights brighter when already turned on, opening blinds) are pushed to the smartwatch for confirmation. Grafana/prometheus to monitor sensors. For media, jellyfin and sonarr/ radarr. The native Jellyfin app works very well on modern LG TVs. Pihole to block ads on any device connected to Tailscale. Works globally. Right now it's zero maintenance, and changes are automatically synced after a git push, so I almost never SSH into the servers directly. |
I have the same setup with K3S running on a couple PIs. You have a nice CI but I decided to use cdk8s[1] which lets you compile Typescript into K8 files. For access I did almost exactly the same but with CloudFlare Tunnels (might look into Tailscale). Stealing the zigbee2mqtt and room assistant ideas.
Where do you store volumes? I eventually just bought a NAS and mount persistent NFS volumes off it.
1. https://cdk8s.io/