My Homelab setup and how I got here
In this blogpost I will describe my homelab setup, as well as giving a bit of context about how I got to this point.
It all started with this old gaming laptop which I used during the last few years of university, including during my master, which is when I actualy used the specs a bit more.
Eventually, this laptop started working very slowly, and sometimes I was pretty much unable to turn it on. After having it laying around for months, and almost considering it to be dead, I decided to bring it back to life. At the time, I remembered that a few months back it could take about 10-15 minutes for it to be up and running. Even though I was not an IT geek back then, I did have basic knowledge and fully blamed the performance on the old HDD the laptop had. In Christmas, I asked Santa to bring me a new SSD, and a Raspberry Pi.
When replacing the disk in the old laptop, I decided to install Ubuntu 20.04 on the new SSD, instead of re-using the old Windows license. This was, unknowingly, probably one of the best decissions I have ever taken, which ultimately led me to where I am today. After installing Ubuntu, my old gaming laptop was flying. It truly brought the performance to a level that I had never experienced (even when it was new).
To me, this laptop, was a near-to-death patient that I saved (note that all I did was replacing the SSD and installing an OS on it, but that felt like a huge achievement at the time), so, during the next months, I spent a lot of time on it, mostly learning the basics of Linux. This experience I built, together with some theoretical knowledge on Kubernetes / public cloud from my previous job , and some programming experience (Python, Javascript, SQL…), allowed me to join ITQ Consultancy in June 2021. After joining, I agreed with my manager that my most immediate goal was learning vanilla Kubernetes, and then eventually moving into Infrastructure as Code, Tanzu Kubernetes Grid and some CI/CD tools (starting with Concourse, carrying on with Tekton and ArgoCD).
So, my first task was then clear: I had to learn Kubernetes, but, how? Where? Even though I knew about the existance of minikube, I wanted to get a bit closer to the real situation. Therefore, a couple weeks before joining ITQ, I bought myself another two RPIs, with 4GB and 8GB RAM, respectively. So, what was I going to do with 3 RPIs and a TP Link switch? Well, of course the answer is bare-metal Kubernetes, and due to my hardware limitations, that could almost only be k3s. I first heard about k3s at my previous job in Rijkswaterstaat, as a lightweight way to run Kubernetes on Raspberry Pis.
Eventually, after learning the basics of Kubernetes, I started learning Tanzu Kubernetes Grid (and Community Edition). Since TKG is based on the ClusterAPI project, you NEED a cloud infrastructure provider to create Tanzu Kubernetes Clusters. That could, at that time, be vSphere, AWS, Azure. At the ITQ office we have a few servers, so I first started using them in order to learn Tanzu.
Once I my first Intel NUC, I installed ESXi on it and deployed vCenter. Even though that left me with little resources, it was enough to deploy TKG(m). Eventually I bought the second NUC, which allowed me to deploy more clusters. At this point I had my compute sorted, but everything was still running on my home network, and I only had one network segment, where I deployed everything. This is obviously far from what you find on a production environment, where there is at least a bunch of network segments, with firewalling in between them.
So, what are the main components of my lab? Like in any other environment, there are three main parts you need: compute, networking and storage.
Compute Hardware
Respect to the compute aspect of the lab, I have two different clusters.
Intel NUC cluster:
- x2 Intel NUC10i7FNH. These are the intel NUCs with 6 cores, and 12 threads.
Raspberry Pi cluster:
Then, what was my first lab, turned into a small part of the current lab.
- RaspberryPi Model 2GB RAM
- RaspberryPi Model 4GB RAM
- RaspberryPi Model 8GB RAM
Networking Hardware
As I previously mentioned, at some point I had to build a bit of a more complex network setup. Nevertheless, this is still quite simple, and it includes the following components:
- Ziggo router (ISP): The standard router my Internet Service Provider provides to their clients. Just a regular household router.
- Zyxel LTE3316-M604 router: This is a router that was on a cupboard on the flat I moved into a few weeks ago. By placing it “under” the UniFi USG, it provides WiFi access to the lab network(s). DHCP set on Relay mode, forwarding DHCP requests to the UniFi USG.
- UniFi USG: Used for separating my home network from my lab network, as well as for routing, network segmentation, firewalling and VPN.
- UniFi USW Flex Mini: This is a managed switch, and since I already had my Unifi USG, I decided to pay a little extra (compared to other managed switches), and stick to UniFi for my network setup.
- TP Link LS105G: Since the USW Flex only has 5 ports, I have an additional (unmanaged) switch to connect the Raspberry Pis to the rest of the network.
Storage Hardware + RAM
Respect to the storage, I do not really have any dedicated storage hardware, such as a NAS, but I do have some top of the line consumer grade SSDs.
- Samsung 980 PRO M.2 NVME 2TB SSD (Read: 7000 MB/s | Write: 5100 MB/s)
- Samsung 980 PRO M.2 NVME 1TB SSD (Read: 7000 MB/s | Write: 5000 MB/s)
- Samsung 870 QVO SATA III 1TB SSD (Read: 560 MB/s | Write: 530 MB/s)
When it comes to the RAM, I have fully maxed out what the Intel NUCs allow me (64GB):
Last words
This is an everchanging lab environment, and I do expect it to grow in the coming years, but I will try to keep it small scale since, you know, I have to pay the electricity bills. Fortunately, during VMware Explore EU in Barcelona, all vExperts were giving a small NUC from Maxtang, which I will be adding to my ESxi cluster soon.
Do you have a homelab? How is it different from mine? Is there anything you think I am missing in my lab? Let me know in the comments!