Skip to content

GitOps Configuration and documentation of my Kubernetes homelab powered by Talos and FluxCD.

Notifications You must be signed in to change notification settings

mischavandenburg/homelab

Repository files navigation

🏠 Homelab

As featured on YouTube and in my private DevOps community.

Frequent updates with in-depth explanations are posted here:

https://skool.com/kubecraft

You can also ask me questions directly when you join this community. I'm happy to mentor you on your homelab journey!

Introduction

This repo contains all of the configuration and documentation of my homelab.

The purpose of my homelab is to learn and to have fun. Being a Cloud Native Engineer by trade, I work with Kubernetes every day, and my homelab is the place where I can try out and learn new things. On the other hand, by self-hosting some applications, it makes me feel responsible for the entire process of deploying and maintaining an application from A to Z. It forces me to think about backup strategies, security, scalability and the ease of deployment and maintenance.

Cluster Provisioning & Architecture

I use Talos Linux to set up my machines. I prefer Talos because it is lightweight and minimal, and provides production grade security right out of the box. After running plain Talos for over a year, I switched to using Sidero Omni to manage my Talos clusters. Omni allows me to freely add nodes and destroy them, scaling my clusters as desired.

I am currently testing out a new architecture of single-node clusters where the workloads are scheduled on the control plane. A wise man taught me the phrase "no in-place upgrades", and I desire to move in that direction. Instead of one big cluster, I'm now running several. Omni makes this extremely easy.

Number Name Description
1 Jotunheim Contains all end-user applications. Stateless, fully provisioned from code. Can be torn down and spun up within minutes on different hardware.
2 Data Contains all my databases & state. Multi-node. Can be fully restored from Blob storage.
3 Moria Private cluster provisioned from private repository.

💻 Hardware

Nodes

I use a combination of HP ELITEDESK mini pc's, old laptops and sometimes a few virtual machines. The mini PC's are great because they are small and cheap to buy when you get them refurbished from a reseller.

HP ELITEDESK 800 G2 MINI i5-6400T/16GB/240GB SSD

HP ELITEDESK 800 G2 MINI i3-6100T/8GB/240GB SSD

HP ELITEDESK 800 G2 MINI i3-6100T/8GB/240GB SSD

HP ELITEDESK 800 G2 MINI i3-6100T/8GB/240GB SSD

Lenovo ThinkPad T430 i5 8GB RAM

🚀 Installed Apps & Tools

Apps

End User Applications

Logo Name Description
Commafeed Bloat free RSS feed reader
Homepage My customized portal to my homelab & internet
n8n Secure, AI-native workflow automation
Wallabag Save articles & posts from the web for storage & reading later

Quantified Self

I store data about myself in self-hosted Postgres databases.

A combination of n8n workflows & APIs I coded myself are used.

Logo Name Description
Body Metrics Storing Oura & other data to Postgres
Health API An API to sync Apple Health data to my personal database
Home IoT Logs MQTT messages from sensors to databases

Infrastructure

Everything needed to run my cluster & deploy my applications

Logo Name Description
Cert Manager X.509 certificate management for Kubernetes.
Cilium My CNI of choice, used on all clusters. eBPF-based Networking, Observability, Security
Cloudflare Zero Trust Used for private tunnels to expose public services (without requiring a public IP).
CloudNativePG Database operator for running PostgreSQL clusters
External DNS Synchronizes exposed Kubernetes Services and Ingresses with DNS providers.
External Secrets Operator Used to sync my secrets from Azure Key Vaults to my cluster
Flux CD My GitOps solution of choice. Better than Argo.
Grafana The open observability platform.
Prometheus An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.
Renovate Automated dependency updates.
Synology CSI Driver Used to provision Persistent Volumes directly on my Synology

Build your own Home Lab?

Do you feel inspired by this project, but don't know where to start?

I created the only Kubernetes homelab course on the internet and helped hundreds of people start their homelab journey.

https://skool.com/kubecraft

To get access to the course, go here:

https://skool.com/kubecraft

📷 Full Walkthrough

Watch this video:

YouTube

Networking

I use a Unifi Express Router, configured with 7 different VLANs which are all locked down by strict traffic rules.

I use Cilium as my CNI. I use LoadBalancer IPAM to assign IP addresses to my LoadBalancer services and use Cilium as an ingress controller. This way, I don't need to install and maintain a seperate ingress controller like Traefik, which I used in the past.

Storage

I use a Synology DS224+ as a NAS. I use the Synology CSI driver to provision Persistent Volumes from my clusters directly on the NAS. I also have an NFS share for data that needs to be shared between clusters.

Secret Management

Azure Key Vaults are used to store my secrets. I sync them to my cluster using the External Secrets Operator.

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •