aly badawy/homelab
all systems operational
// the homelab

Cluster Overview

A single-node k3s cluster running the full self-hosted stack on Ubuntu 26.04. Every component is declared in Git and reconciled by ArgoCD — nothing is applied to the cluster by hand.

All systems operational k3s v1.36.1+k3s1 Ubuntu 26.04 14 ArgoCD apps

One physical server running a full Kubernetes cluster — secrets management, storage, TLS, SSO, photo backup, cloud storage, monitoring, and more. Every piece is a Helm chart or Kustomize overlay, versioned in Git, deployed by ArgoCD, and automatically recovered after a reboot.

01 Key facts

PropertyValue
Distributionk3s v1.36.1+k3s1 — Traefik disabled, ingress-nginx installed instead
Node OSUbuntu 26.04 LTS — single control-plane node
GitOpsArgoCD app-of-apps — root points at k8s/apps/ in this repo
SecretsHashiCorp Vault (KV v2) → ESO → app namespaces
StorageLonghorn (single replica) — NAS NFS backup target
TLSOne wildcard cert *.in.alybadawy.com via cert-manager + Let's Encrypt DNS-01
Ingressingress-nginx — default-ssl-certificate at controller level, no per-Ingress TLS
Post-reboot recoveryFully automatic — Vault unseals, ESO reconnects, apps recover (~6 min)

02 Platform components

The platform layer — everything that supports the application stack. Each links to its reference page.

03 Deployment order — sync waves

ArgoCD deploys apps in wave order. The platform layer must be healthy before applications can start, because apps depend on Vault secrets and Longhorn PVCs.

Vault at wave -1. Vault must be unsealed before ESO can read secrets, and ESO must have secrets before apps can start. The vault-auto-unseal CronJob handles unsealing automatically — no manual steps after a reboot.
WaveAppsWhy first
-1vaultSecrets backend — everything else depends on it
0 (default)longhorn, cert-manager, ingress-nginx, external-secretsPlatform layer — storage, TLS, ingress, secret sync
1+db, monitor, auth, cloud, immich, whoami, alyApplication layer — depend on platform being healthy

04 Namespace layout

Namespaces are created by ArgoCD (CreateNamespace=true in sync options) and group related services together.

NamespaceContents
argocdArgoCD server, repo-server, application-controller, dex, redis
securityVault StatefulSet, vault-auto-unseal CronJob, ESO operator, eso-recovery CronJob
networkingingress-nginx controller, cert-manager controller, ClusterIssuer, wildcard Certificate + Secret
longhorn-systemLonghorn manager, driver, UI frontend, CSI components
monitorPrometheus, Grafana, Alertmanager
dbPostgreSQL, pgAdmin, Redis
authAuthentik server + worker
cloudNextcloud
immichImmich server + ML worker
last updated 2026-06-08 · view source on GitHub