About the Project
Constellation is a homelab; a collection of consumer and enterprise hardware that I use to learn about various technologies, and provide hosting for services. I've been working on the project since Summer 2024, and since then it's seen many, many iterations and refactors. I can't go into the project's entire history here, but I can talk about the current state of the project, what I hope to achieve with it in the future, and what I've learnt from it.
Constellation's Architecture
Constellation is stored in a 20U server rack in my bedroom, and the hardware can be split into four main categories:
- Networking
- Kubernetes cluster
- Proxmox cluster
- Storage
Networking
Constellation has its own MikroTik router separate from the rest of my home network. This allows me to make mistakes without affecting the others in my household (though it does create a double NAT which is not very efficient). It also includes a Power-over-Ethernet (PoE) capable switch, which allows me to power the devices in my Kubernetes cluster without needing a spare power socket for each device.
Kubernetes Cluster
My Kubernetes cluster (codename: Hydra) is made up of five identical Raspberry Pi 5s. Each Pi has:
- 8GB RAM
- 128GB SATA SSD over USB
- 16GB microSD for the OS
- PoE HAT
On the software side, the cluster runs K3s, a lightweight Kubernetes distribution that's easy to get up-and-running without a faff. It also includes various controllers that expand its functionality, such as:
- Traefik, an ingress controller
- MetalLB, which provides Highly Available networking
- Longhorn, for Highly Available clustered storage
My goal with Hydra is for it to be a Highly Available cluster that runs most of the services in my homelab. Having HA means that if any two of the Raspberry Pis go offline, the cluster will still operate as normal. This is important for a lot of the services that run on my other hardware, as they may depend on the software running on Hydra.
Proxmox Cluster
OK, so my Proxmox cluster (codename: Olympus) isn't actually a cluster. Currently, it's just a single node running all of my virtual machines. However, I do plan to expand upon it and make it a fully HA cluster in the future.
My needs with Olympus are quite different to Hydra. While Hydra handles all the essential things, Olympus tends to be more of a playground: it runs testing VMs, game servers, and anything I simply can't put elsewhere.
Storage
Constellation also happens to have its own storage server (codename: Sagittarius). Sagittarius runs TrueNAS SCALE, with over 20TB of usable storage across 8x 4TB hard drives in a 2x4 RAIDZ1 configuration. It also has two additional 128GB SSDs for metadata and small files, and in future will have a dedicated SLOG and L2ARC SSD for caching.
The storage server is primarily used for backups, including of the other hardware in Constellation, and of my own devices through macOS Time Machine. It also serves as a media server, hosting my personal collection of music, videos and photos.
Sagittarius is also capable of running virtual machines, but this is reserved for things like Proxmox Backup Server, which can only be run as an OS. As a general rule: if it doesn't have to run on Sagittarius, it shouldn't.
What I've Learnt
Constellation has been invaluable in teaching me various skills that can be applied in industry. Primarily, I've learnt about the basics of Kubernetes and horizontal scaling, along with networking topics like subnetting, VLANs and cybersecurity.
It's been so instrumental, that I've even decided to teach others what I've learnt. I've already ran a workshop on Kubernetes, and in the future plan to run workshops on subnetting and VLANs under ShefESH.