Skip to content

frzifus/hmlb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Frzifus Homelab

A GitOps-managed Kubernetes homelab built on Talos Linux, featuring specialized nodes for storage, GPU compute, and application workloads.

Overview

This repository contains the complete infrastructure-as-code configuration for a multi-node Kubernetes cluster running various applications including media servers, AI/ML platforms, game servers, and development tools.

Architecture Stack

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                    APPLICATIONS                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚   Jellyfin   β”‚  β”‚     LLM      β”‚  β”‚ AzerothCore  β”‚  β”‚    Atuin     β”‚     β”‚
β”‚  β”‚ Media Stack  β”‚  β”‚   Platform   β”‚  β”‚   WoW        β”‚  β”‚ Shell Sync   β”‚     β”‚
β”‚  β”‚              β”‚  β”‚              β”‚  β”‚   Server     β”‚  β”‚              β”‚     β”‚
β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ... β”‚
β”‚  β”‚ β”‚Jellyfin  β”‚ β”‚  β”‚ β”‚OpenWebUI β”‚ β”‚  β”‚ β”‚Auth/Worldβ”‚ β”‚  β”‚ β”‚PostgreSQLβ”‚ β”‚     β”‚
β”‚  β”‚ β”‚Jellyseerrβ”‚ β”‚  β”‚ β”‚LlamaStackβ”‚ β”‚  β”‚ β”‚Servers   β”‚ β”‚  β”‚ β”‚Server    β”‚ β”‚     β”‚
β”‚  β”‚ β”‚Radarr    β”‚ β”‚  β”‚ β”‚vLLM      β”‚ β”‚  β”‚ β”‚MySQL DB  β”‚ β”‚  β”‚ β”‚          β”‚ β”‚     β”‚
β”‚  β”‚ β”‚Sonarr    β”‚ β”‚  β”‚ β”‚ComfyUi   β”‚ β”‚  β”‚ β”‚PHPMyAdminβ”‚ β”‚  β”‚ β”‚          β”‚ β”‚     β”‚
β”‚  β”‚ β”‚          β”‚ β”‚  β”‚ β”‚Sigstore  β”‚ β”‚  β”‚ β”‚          β”‚ β”‚  β”‚ β”‚          β”‚ β”‚     β”‚
β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                   CORE SERVICES                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚   Gateway    β”‚  β”‚ Observabilityβ”‚  β”‚   Storage    β”‚  β”‚   Security   β”‚     β”‚
β”‚  β”‚              β”‚  β”‚              β”‚  β”‚              β”‚  β”‚              β”‚     β”‚
β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚     β”‚
β”‚  β”‚ β”‚Envoy     β”‚ β”‚  β”‚ β”‚SigNoz    β”‚ β”‚  β”‚ β”‚OpenEBS   β”‚ β”‚  β”‚ β”‚Cert-Mgr  β”‚ β”‚     β”‚
β”‚  β”‚ β”‚Gateway   β”‚ β”‚  β”‚ β”‚Clickhouseβ”‚ β”‚  β”‚ β”‚Mayastor  β”‚ β”‚  β”‚ β”‚Tailscale β”‚ β”‚     β”‚
β”‚  β”‚ β”‚Nginx     β”‚ β”‚  β”‚ β”‚Kepler    β”‚ β”‚  β”‚ β”‚Cache     β”‚ β”‚  β”‚ β”‚SOPS      β”‚ β”‚     β”‚
β”‚  β”‚ β”‚Ingress   β”‚ β”‚  β”‚ β”‚OTEL      β”‚ β”‚  β”‚ β”‚Replicatedβ”‚ β”‚  β”‚ β”‚Age       β”‚ β”‚     β”‚
β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚  Networking  β”‚  β”‚     GPU      β”‚  β”‚   MetalLB    β”‚  β”‚   KubeVirt   β”‚     β”‚
β”‚  β”‚              β”‚  β”‚              β”‚  β”‚              β”‚  β”‚              β”‚     β”‚
β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚     β”‚
β”‚  β”‚ β”‚Cilium    β”‚ β”‚  β”‚ β”‚AMD GPU   β”‚ β”‚  β”‚ β”‚L2/BGP    β”‚ β”‚  β”‚ β”‚VM        β”‚ β”‚     β”‚
β”‚  β”‚ β”‚CNI       β”‚ β”‚  β”‚ β”‚Plugin    β”‚ β”‚  β”‚ β”‚LoadBal.  β”‚ β”‚  β”‚ β”‚Platform  β”‚ β”‚     β”‚
β”‚  β”‚ β”‚No Proxy  β”‚ β”‚  β”‚ β”‚Intel GPU β”‚ β”‚  β”‚ β”‚Address   β”‚ β”‚  β”‚ β”‚CDI       β”‚ β”‚     β”‚
β”‚  β”‚ β”‚Mesh      β”‚ β”‚  β”‚ β”‚Plugin    β”‚ β”‚  β”‚ β”‚Pool      β”‚ β”‚  β”‚ β”‚          β”‚ β”‚     β”‚
β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                               KUBERNETES LAYER                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚                        β”‚        Flux CD             β”‚                       β”‚
β”‚                        β”‚        GitOps              β”‚                       β”‚
β”‚                        β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚                       β”‚
β”‚                        β”‚   β”‚  Git Repository    β”‚   β”‚                       β”‚
β”‚                        β”‚   β”‚  SOPS Encryption   β”‚   β”‚                       β”‚
β”‚                        β”‚   β”‚  Kustomization     β”‚   β”‚                       β”‚
β”‚                        β”‚   β”‚  Auto Sync         β”‚   β”‚                       β”‚
β”‚                        β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚                       β”‚
β”‚                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                NODE TOPOLOGY                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚Control Planeβ”‚  β”‚  Storage    β”‚  β”‚   Worker    β”‚  β”‚     GPU     β”‚         β”‚
β”‚  β”‚   Nodes     β”‚  β”‚   Nodes     β”‚  β”‚   Nodes     β”‚  β”‚   Nodes     β”‚         β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚         β”‚
β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚         β”‚
β”‚  β”‚ β”‚master1  β”‚ β”‚  β”‚ β”‚storage1 β”‚ β”‚  β”‚ β”‚worker1  β”‚ β”‚  β”‚ β”‚gpu1     β”‚ β”‚         β”‚
β”‚  β”‚ β”‚master2  β”‚ β”‚  β”‚ β”‚storage2 β”‚ β”‚  β”‚ β”‚worker2  β”‚ β”‚  β”‚ β”‚gpu2     β”‚ β”‚         β”‚
β”‚  β”‚ β”‚master3  β”‚ β”‚  β”‚ β”‚         β”‚ β”‚  β”‚ β”‚         β”‚ β”‚  β”‚ β”‚         β”‚ β”‚         β”‚
β”‚  β”‚ β”‚         β”‚ β”‚  β”‚ β”‚Bonded   β”‚ β”‚  β”‚ β”‚General  β”‚ β”‚  β”‚ β”‚AMD/Intelβ”‚ β”‚         β”‚
β”‚  β”‚ β”‚Mixed HW β”‚ β”‚  β”‚ β”‚Network  β”‚ β”‚  β”‚ β”‚Workload β”‚ β”‚  β”‚ β”‚GPU      β”‚ β”‚         β”‚
β”‚  β”‚ β”‚Schedul. β”‚ β”‚  β”‚ β”‚Hugepage β”‚ β”‚  β”‚ β”‚         β”‚ β”‚  β”‚ β”‚ML/AI    β”‚ β”‚         β”‚
β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                TALOS LINUX                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”‚
β”‚           β”‚               Security Features                     β”‚           β”‚
β”‚           β”‚  β€’ LUKS2 Disk Encryption                            β”‚           β”‚
β”‚           β”‚  β€’ Secure Boot Support                              β”‚           β”‚
β”‚           β”‚  β€’ Immutable OS                                     β”‚           β”‚
β”‚           β”‚  β€’ API-driven Configuration                         β”‚           β”‚
β”‚           β”‚  β€’ No SSH/Shell Access                              β”‚           β”‚
β”‚           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                              PHYSICAL HARDWARE                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Architecture

  • Operating System: Talos Linux with secure boot support
  • Kubernetes Distribution: Vanilla Kubernetes managed by Talos
  • GitOps: Flux CD for continuous deployment
  • Networking: Cilium CNI with Tailscale mesh networking
  • Storage: OpenEBS with Mayastor for high-performance storage
  • Observability: SigNoz for logs/metrics/tracing, Kepler for power monitoring

Cluster Topology

The cluster consists of specialized node types:

  • 3 Control Plane Nodes (master1-3): Mixed hardware for control plane workloads
  • 2 Storage Nodes (storage1-2): Dedicated storage with bonded networking and hugepages
  • 2 Worker Nodes (worker1-2): General application workloads
  • 2 GPU Nodes (gpu1-2): ML/AI compute with AMD and Intel GPU support

Quick Start

Prerequisites

  • Talos Linux nodes configured and running
  • kubectl configured for cluster access
  • sops-key.txt file for secret decryption

Bootstrap Cluster

# Bootstrap Flux CD and initial configuration
make bootstrap-k8s-homelab

This command sets up Flux CD and creates the necessary secrets for GitOps operations.

Repository Structure

Infrastructure (infra/)

Contains the core Talos configuration:

  • talconfig.yaml: Complete cluster and node definitions
  • talenv.yaml: Environment variables for Talos configuration
  • talsecret.sops.yaml: Encrypted secrets (disk encryption, Tailscale auth)

Cluster Configuration (clusters/)

GitOps configuration organized by environment:

Base Configuration (clusters/base/)

  • Flux CD installation and Git repository setup
  • Shared Kustomization bases

Homelab Environment (clusters/homelab/)

Bootstrap (bootstrap/): Initial Flux setup and bootstrapping

Core Infrastructure (core/): β†’ View Core Components Documentation

  • Networking: Cilium, MetalLB, Envoy Gateway, Nginx Ingress
  • Storage: OpenEBS, persistent volume configurations
  • Security: Cert-manager, Tailscale
  • Observability: SigNoz, OpenTelemetry, Kepler
  • GPU support: Device plugins and Node Feature Discovery

Applications (apps/): β†’ View Applications Documentation

Container Images (images/)

Custom container builds:

  • acore/: AzerothCore image for WOTLK World of Warcraft server
  • desktop/: Custom Fedora desktop bootc image with development tools
  • ganesha-nfs/: NFS Ganesha server image

Key Applications

AI/ML Platform

Enterprise-grade ML infrastructure β†’

Development Tools

Media Server Stack

Complete media automation and streaming setup β†’

Game Servers

Security Features

  • Disk Encryption: LUKS2 encryption for all system and ephemeral storage
  • Secret Management: SOPS with age encryption for GitOps secrets
  • Network Security: Tailscale mesh networking for secure external access
  • Model Integrity: Sigstore-based verification for ML models
  • Secure Boot: Support for UEFI secure boot on Talos nodes

Development Workflow

Making Changes

  1. Modify configurations in the appropriate clusters/homelab/ directory
  2. Commit and push changes to the main branch
  3. Flux CD automatically applies changes to the cluster
  4. Monitor reconciliation with kubectl get kustomizations -A

Adding New Applications

  1. Create a new directory under clusters/homelab/apps/
  2. Add Kubernetes manifests with appropriate namespace, storage, and networking
  3. Include ServiceMonitor for observability if applicable
  4. Update clusters/homelab/apps/kustomization.yaml to include the new app

Custom Images

Build and push custom images from the images/ directory. Each subdirectory contains a Containerfile and any necessary build context.

Maintenance

Dependency Updates

Renovate automatically creates pull requests for:

  • Kubernetes manifest updates
  • Helm chart version bumps
  • Container image updates
  • Flux CD component updates

Monitoring

  • Cluster Health: SigNoz dashboards for infrastructure metrics
  • Application Logs: Centralized logging through observability stack
  • Power Consumption: Kepler for energy monitoring
  • Storage Performance: OpenEBS metrics and alerts

Documentation Structure

This repository includes comprehensive documentation for all components:

Core Infrastructure Documentation

Application Documentation

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •