Kubernetes at Home
I like tinkering. It shows in my home setup. For a bit of background, I've had some form of media and file server on my home network since the early 2000s. In that time I've accumulated quite a number of services that I rely on, not including my own development stack. With the advent of containers, this made tinkering and management easy. I started out with a bash script to start things. Then I moved everything into a `docker-compose.yml` file.Over holiday break last year I realized my `docker-compose.yml` file had fifteen entries and it took effort to scroll through and add or update entries. I can do better.
Hello beautiful.
Here's a quick glance at the services I'm running (minus custom apps):
Cacher | Grafana | Prometheus |
Docker Registry | InfluxDB | Sabnzbd |
Drone | Kibana | Transmission |
Elasticsearch | MySQL | |
Emby | OpenHAB | |
Gogs | PiHole |
The deciding factor was PiHole. If I'm running my own DNS, I don't want me patching a single box to cause my network's DNS to go down. On top of that, I'd be able to have custom DNS entries for my home network.
And because I have a sense of humor, it only made sense to have Gogs URL be a wonderful homage to my friends that play Dark Souls: git.gud
Take your medicine.
Where things stand now, I have a keepalived-vip cloud provider consuming a small (/29) portion of my network. Services route through nginx-ingress, and pods are mounting NFS through persistent volumes.
On top of all of this, the entire stack including deployment scripts are in git. Meaning to add a DNS entry and a new service, I add them to my infrastructure repo and push to master. That will kick off a drone job to update Kubernetes to the desired state. Once I have more time I'll be posting a scrubbed version of the git repo onto Github.
And a glance at the current state of things if you run `kubectl get svc` on the `default` namespace
External IPs are managed by Keepalived
Overkill? No. Look at my future goals:
- Namespace things appropriately (media, development)
- Mixed architecture cluster (ARM + x86)
- Federated households
- Containerize Kodi (not just headless)
- Daemonset on Pi-nodes labeled "htpc"
While I wouldn't call this a series of posts, I want to cover why I run each of my services in the near future.
Feel free to reach out if you have questions!