Welcome! This is my personal Kubernetes homelab, built as a platform for learning, experimenting, and refining cloud-native technologies. Using a GitOps-driven approach, it hosts and manages the applications and services that support my day-to-day self-hosted workloads listed in the Applications section.
The progress of the homelab is documented in a storytelling format through my blog, where I share updates, challenges, and lessons learned during the development and expansion of the cluster.
This repository uses the app of apps pattern to trigger the installation all the Kubernetes resources with ArgoCD. Moreover, it uses a three tier structure based on environment hierarchy (homelab, gke, eks, lke, jet).
+---------------------------+
| App of Apps | Tier 3
| (root.yaml) |
+---------------------------+
|
v
+---------------------------+
| ApplicationSet | Tier 2
| (appsets) |
+---------------------------+
|
| creates Argo CD
| Applications from
v
+---------------------------+
| Helm / Kustomize | Tier 1
| Manifests |
+---------------------------+
root.yaml: The entrypoint defines a bootstrap application that points to all the homelab ApplicationSetsappsets: Contains all the ApplicationSet Custom Resource to applykustomize-apps: Contains all the applications that are installed via Kustomizecharts: Contains all the applications that are installed via Helm Chartsstandby: Apps archive, serves as the uninstall place for apps.docs: The homelab documentationcharts/<app>/envs, kustomize-apps/<app>/envs: Subdirectory that controls the installation of a tier 1 into the corresponding k8s environment.
Applications running in the cluster are split by the installation strategy which can be: Kustomize, and Helm Charts.
| App | Description | Homelab Kustomize | |
|---|---|---|---|
| Argo UI | The Argo UI | Kustomize | |
| Blog | My personal blog | Kustomize | |
| Homepage | Cluster Dashboard Entrypoint | Kustomize | |
| Koffan | Shopping List App | Kustomize | |
| Linkding | Bookmark manager application | Kustomize | |
| Uptime Kuma | Service Uptime Monitoring | Kustomize |
| App | Description | Chart | Values | |
|---|---|---|---|---|
| Cilium | Cilium is the CNI of choice for the cluster | Chart | Values | |
| Cloud Native PG | Kubernetes operator to manage the full lifecycle of a PostgreSQL database cluster | Chart | Values | |
| Infisical Secrets Operator | Implements the external secret operator pattern (ESO) to manage Kubernetes secrets in the cluster | Chart | Values | |
| Kube-Prometheus Stack | Monitoring stack with Prometheus and Grafana | Chart | Values | |
| OpenCost | Cost monitoring stack | Chart | Values | |
| Tailscale Operator | Tailscale kubernetes operator (enable ingress to access services on all authorized tailnet devices) | Chart | Values | |
| Traefik | Traefik serves as an ingress controller for cloud based clusters | Chart | Values |
