GitOps-managed Kubernetes homelab built on Talos Linux, Sidero Omni, and ArgoCD.
| Component | Description | |
|---|---|---|
| Talos Linux | Secure, immutable Kubernetes OS | |
| Sidero Omni | Kubernetes cluster management | |
| ArgoCD | GitOps continuous delivery |
| Component | Description | |
|---|---|---|
| Cilium | eBPF CNI with BGP & Gateway API | |
| cert-manager | TLS certificate automation | |
| External DNS | DNS record management | |
| Tailscale | VPN mesh networking |
| Component | Description | |
|---|---|---|
| Rook Ceph | Distributed storage | |
| Local Path Provisioner | Node-local storage | |
| CSI Driver NFS | NFS storage provisioning |
| Component | Description | |
|---|---|---|
| Prometheus | Metrics & alerting | |
| Grafana | Visualization & dashboards | |
| Loki | Log aggregation | |
| Thanos | Long-term metrics storage |
| Component | Description | |
|---|---|---|
| External Secrets | Secret sync from Infisical | |
| Velero | Backup & disaster recovery |
| Component | Description | |
|---|---|---|
| CloudNative PG | PostgreSQL operator | |
| ClickHouse | Analytics database | |
| GPU Operator | NVIDIA GPU support | |
| vLLM | LLM inference server |
| Cluster | Type | Purpose | Nodes |
|---|---|---|---|
| omni-local | Talos (Single Node) | Omni management cluster | 1 CP |
| zendo | Talos (Omni-managed) | Production workloads | 3 CP + 4 Workers |
| spark | RKE2 | Edge/experimental | Variable |
homelab/
├── apps/ # Application configs & Helm values
│ ├── argocd/ # ArgoCD + bootstrap chart
│ ├── argocd-apps/ # App-of-apps definitions
│ ├── cilium/ # CNI + BGP/Gateway config
│ ├── omni/ # Self-hosted Omni + BMIP
│ └── .../ # Other applications
└── clusters/ # Cluster-specific configs
├── omni-local/ # Talos config (talhelper)
└── zendo/ # Omni-managed cluster
- Install tools:
talosctl,kubectl,talhelper,helm,infisical - Store secrets in Infisical at
/omni/omni-local-cluster - Configure
clusters/omni-local/talos-config/talconfig.yaml - Generate configs:
just generate
- Boot node with Talos media
- Apply config:
talosctl apply-config --insecure --nodes <ip> --file <config> - Bootstrap cluster:
talosctl bootstrap -n <ip> - Get kubeconfig:
talosctl kubeconfig - Install CNI: Gateway API CRDs → Cilium → Cilium Config
- Install External Secrets: Helm chart → Infisical auth secret → ClusterSecretStore
- Install ArgoCD: Helm chart →
argocd-initbootstrap chart
ArgoCD manages everything via app-of-apps pattern:
argocd-init → argocd-apps → [all applications]
To add/update apps: Modify files in apps/, commit, push — ArgoCD auto-syncs.
Option A: Download Talos image from Omni UI
Option B: Configure Bare Metal Infrastructure Provider for PXE boot
- Boot machines with Omni media — machines auto-register via SideroLink
- Create cluster in Omni UI — assign control planes and workers
- Apply config via Omni (automatic with patches)
- Bootstrap components: Label nodes → Install Cilium → External Secrets → ArgoCD
Same as omni-local. ArgoCD syncs cluster-specific values from apps/*/settings/zendo/.
| Cluster | Pod CIDR | Service CIDR | VIP |
|---|---|---|---|
| omni-local | 10.11.0.0/16 | 10.12.0.0/16 | 10.96.10.100 |
| zendo | 10.111.0.0/16 | 10.112.0.0/12 | 10.96.10.150 |
Detailed bootstrap instructions: See clusters/omni-local/README.md
- Talos Linux · Sidero Omni · ArgoCD · Cilium