Self Hosting and Home Lab

I have spent a lot of time with my home lab setup to experiment with Kubernetes, and Grafana. I use a set of private Github repos to store my configuration for all of my services. Jenkins deploys any changes to my cluster when they are committed to my git repos. I have spent a lot of time tinkering with the setup to try to make it do the things I want it to do and think I have done a decent job.

The server that hosts the Kubernetes cluster also has a PostgreSQL database, Grafana, Jenkins, Prometheus, and Nginx ingress server.

Diagram of the interpreter

All of my services, that are within Kubernetes, use Helm to create the Kubernetes configuration files. Since I only have one node it makes the ingress a lot easier. I have setup a master ingress server that reverse proxies requests to the relevants services and handles TLS/SSL. Interestingly, this setup makes routing UDP and TCP requests to the same destination port a lot easier (this is done to get my Garry's Mod server working).

To keep my internal services secure I have setup Vouch Proxy to authenticate requests with my Github account. This has proven to work quite well and was fairly easy to setup.

Updating these applications, and configurations is done with a Jenkins pipeline for each service. Most of these jobs build a Docker image, then publish and install a Helm package to the cluster. I have found that this makes tracking what versions of software are deployed a lot easier as I can look at the latest build and get all of the data.

A picture of a Jenkins dashboard

To keep an eye on all of my services I have setup Grafana. There are lots of Grafana dashboards that show lots of things. Most of them are not that useful but the graphs are pretty.

A picture of a Grafana dashboard