Wednesday, January 31, 2018

Kubernetes at Home (Overview)

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!

No comments:

Post a Comment