Introduction

The Artemis Cluster

... where YAML is law, Renovate never sleeps, and 2am
is just debugging hours.


Talos   Kubernetes   Flux   Renovate

Home-Internet   Status-Page   Alertmanager

Age-Days   Node-Count   Pod-Count   CPU-Usage   Memory-Usage   Alerts


📖 Overview

Artemis is my homelab Kubernetes cluster, built on Talos Linux and managed entirely through Git. Three bare-metal control planes, three VM workers (one with a GPU), all reconciled automatically by Flux CD — push to main, it shows up in the cluster.


⛵ Kubernetes

Directories

📁 kubernetes
├── 📁 apps
│   ├── 📁 actions-runner-system  # Self-hosted GitHub Actions runners for CI workflows
│   ├── 📁 cert-manager           # Automated TLS certificates via Let's Encrypt
│   ├── 📁 cortex                 # AI stack — Open WebUI, Qdrant, SearXNG, ToolHive MCP servers
│   ├── 📁 default                # Personal apps — Immich (photos), Komga (comics), Bookboss (books)
│   ├── 📁 external-endpoints     # ExternalName services bridging off-cluster resources into the mesh
│   ├── 📁 external-secrets       # 1Password-backed ExternalSecret operator for all cluster secrets
│   ├── 📁 flux-system            # Flux Operator, FluxInstance, and GitOps sync entrypoint
│   ├── 📁 home-automation        # Home Assistant, Frigate, Zigbee2MQTT, Mosquitto, Matter Server, ESPHome
│   ├── 📁 kube-system            # Cilium (CNI/BGP), CoreDNS, Multus, Intel GPU driver, cluster utilities
│   ├── 📁 media                  # Arr stack, Jellyfin, SABnzbd, qBittorrent+Gluetun, Prowlarr, Bazarr
│   ├── 📁 network                # Envoy Gateway ingress, ExternalDNS (Cloudflare + UniFi), Cloudflare Tunnel
│   ├── 📁 observability          # Prometheus, Grafana, VictoriaLogs, Fluent Bit, Gatus, Kromgo, KEDA
│   ├── 📁 openebs-system         # Local-path storage provisioner for single-node PVCs
│   ├── 📁 rook-ceph              # Distributed block storage across 3 OSD nodes (one per control plane)
│   ├── 📁 security               # Pocket-ID OIDC provider for cluster-wide SSO
│   ├── 📁 system-upgrade         # Tuppr — automated Talos and Kubernetes version upgrades
│   └── 📁 volsync-system         # PVC backup and restore via Kopia snapshots
├── 📁 components     # Reusable Kustomize components (volsync, etc.)
└── 📁 flux           # Flux sync entrypoint → kubernetes/apps

🔧 Hardware

DeviceCountDiskRAMOSPurpose
Lenovo M710q (talos-cp-01/02/03)3256GB NVMe (boot) + 256GB SATA SSD (Ceph OSD)16GBTalos LinuxKubernetes Control Plane
Proxmox VM on pantheon (talos-w-01/02)2Virtualized32GBTalos LinuxKubernetes Worker
Proxmox VM on pantheon (talos-gpu-01)1Virtualized32GBTalos LinuxKubernetes GPU Worker (ASRock Arc A380 6GB passthrough)
HPE ML150 G9 (pantheon)1T-FORCE 1TB SSD192GBProxmoxVirtualization Host
Supermicro (atlas)13× RAIDZ2 6-wide (~41TB usable)94.3GB ECCTrueNAS SCALENAS / Media Storage

🌐 Networking

DeviceRole
UniFi Cloud Gateway MaxWAN/NAT, L3 gateway, DHCP, BGP (FRR), DNS, UniFi controller
Mikrotik CRS309-1G-8S+L2 switch only — downstream of UCG-Max on VLAN 1099 (LAB)
UniFi US-48 PoE 500WL2 switch (upstream: UCG-Max)
UniFi US-16 PoE 150WL2 switch (upstream: US-48)

🤝 Acknowledgments

Thanks to the following for their work and shared knowledge:


📝 License

This repository is available under the WTFPL License. See LICENSE for details.