Kubernetes at home - Part 1: The hardware

A lot of my projects at home start with the phrase “because I can” or “I want to see what happens”. As it turns out, I actually have a reason this time: because I want to be in control of some infrastructure and environment. And “because I can”. Having gotten that justification out of the way, here’s a quick catch-up to where I am.

Some history

In late 2019, I was running a couple Raspberry Pis as an easy Kubernetes cluster with MicroK8s. This image clearly shows how much organization I put into it.

Cluster Picture

During early 2020, I treated these Raspberry Pis as experimental test machines. I kept taking apart the cluster, trying something new like maybe a new distro, and then putting it back together. I didn’t run any essential services on them which didn’t translate to much focus on maintenance or on sustaining it.

With all this experimentation, I kept coming back to an obsession with certificates. I tried once or twice to create my own personal home certificate authority. All of these attempts at having my own certificate authority made some progress, but more progress was made with annoying myself. I quickly realized that I didn’t want to host a certificate authority if I can help it.

Eventually, I dropped most attempts at this and started accepting a problem with certificates on my home network with self-hosted services, especially since I didn’t want to pay for a certificate. After this acceptance, I started experimenting with different pieces of Kubernetes but didn’t make a lot of noteworthy progress.

The current generation

A few months ago, I decided that I wanted to run some heavy workloads and more databases in Kubernetes, so I started looking at some new hardware. After a few holiday sales, I ended up with some quite solid desktop components in a Fractal Node 804 case sitting underneath a cabinet in the living room.

Neofetch

Fractal Node 804

The hardware choices were mostly based on what I could find cheap. The exception is that the sale on the AMD Ryzen 5 3600 CPU was not much of a discount. Also, I don’t like a lot of ambient hardware noise and so I did as best as possible to minimize that with a passively cooled GPU and quiet fans. A GPU isn’t strictly necessary, but I wanted one anyway for ease of access.

I did get a cheap M.2 drive as a boot drive and to run Kubernetes from, and then a large capacity cheaper SSD to serve as local persistent storage which I then backup to network storage every once in a while. The brand of drives doesn’t seem to matter much.

The intent

My stated reason above was because I want to be in control of some infrastructure and environment. To elaborate on that, I want to build Software-as-a-Service (SaaS) products. By controlling my hardware locally, any software dependency will become a clearly obvious and visible acceptance. Not to mention that by purchasing hardware, I have effectively purchased reserved space. A future retrospective will be very interesting to see whether I utilized the hardware fully and saved money compared to a public cloud offering.

Summary

Let’s see how many blog posts I can go down the road of self-hosted Kubernetes for a software developer.