Introduction

I have been running my homelab for more than half a year now and it seems like a good time to document my self-hosting journey thus far. This post will be the beginning of a multi-part series, covering the homelab at a high level before zooming in to greater details.

Hardware

At the time of writing this post, my homelab includes:

  • 2 Raspberry Pi 4 Model B (4GB) with PoE+ HAT
  • 1 Raspberry Pi 5 (8GB)
  • 1 Synology DS920+ NAS with 2 Seagate Ironwolf 4TB hard drives
  • 1 TP-Link TL-SG108PE switch
  • 1 Linksys E9450 router

Hardware top view

The Pis provide the compute layer while the NAS provide the storage layer for the services I self-host.

Software

Let’s start with the operating system. All the Pis are running Raspberry Pi OS Lite (64-bit) which is a port of (Debian 12 Bookworm) while the NAS is running Synology’s DSM 7.2.

For orchestration, all the Pis come together to form a Kubernetes (K8s) cluster with a single control plane node and two worker nodes. The K8s distribution I have went for was K3s, a lightweight distribution that packs all K8s components into a single binary. Just a few curl commands and a cluster is at your disposal.

In terms of deploying services into the cluster, I have decided to go with ArgoCD as my GitOps tool. I have deployed a grand total of 35 ArgoCD apps thus far, excluding one which serves as an app of apps.

ArgoCD apps

Broadly speaking, the apps/services running in the cluster can be divided into two realistic categories:

Conclusion

This concludes the introductory post to my homelab. In the future, I plan to cover networking, storage, as well as some of the pitfalls I have ran into along the way. Stay tuned for more posts if you are interested in any of the above!