Skip to content

Repository files navigation

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


Discord   Talos   Kubernetes   Flux  


👋 Welcome

Welcome to the (Kubernetes) Humble Home Lab repo. The source of truth for my bare metal cluster running on Talos Linux. The goal here is to deepen my understanding of k8s, become the GitOps mindset, and share what I learn along the way.


🤖 Hardware

System Role CPU RAM Graphics Disk (boot) Disk (storage)
Minisforum MS-01 (3x) Control Plane/Worker Intel i9-12900H 96GB DDR5 Intel Iris XE Samsung PM983 960GB M.2 NVME Crucial 1TB M.2 NVME
HL15 2.0 NAS AMD Epyc 7452 256GB DDR4 Intel ARC A310 512GB NVME Mirror ZFS RaidZ2 Pool (12x 8TB Disks)

🔒 Operating System

I'm running Talos Linux, which is an immutable, API driven operating system designed specifically for Kubernetes. Talos is configured declaritively and is a great choice for a GitOps driven workflow.


🚀 Kubernetes

For me, a home lab about tinkering and learning. So I set off to learn Kubernetes with a goal to grow my skillset and have an infrastructure that allows me to scale and provide useful, locally hosted applications for my family.


🌏 Networking

My homelab network stack consists of Ubiquiti equipment with VLANS configured for IoT, Management, DMZ, and Cameras. Networking in my cluster is handled by Cilium. I'm using Envoy Gateway to manage application traffic coming into the cluster.


📈 Observability Stack

To keep a pulse on the cluster, I'm using: Prometheus, Grafana, VictoriaLogs, Alertmanager, Gatus, and Fluentbit.


💎 Storage: Rook + Ceph

Persistent storage is provided by Rook-Ceph, utilizing the 1TB NVMe drives on each node. Volumes are replicated across each node so if an app is rescheduled to a different node it will have access to it's data.


⚙️ GitOps with Flux

The backbone of this cluster is Flux CD — a GitOps controller that reconciles my entire Kubernetes state from a Git repository Flux and Renovate handle most of the deployments and updates to the cluster.

How does it work?

The core idea: Git is the single source of truth. Flux continuously compares what's in Git against what's running in the cluster, and corrects any difference — whether that's a new commit you pushed, or a "drift" caused by a manual change someone made directly on the cluster.

See Flux in action
flowchart TD
    %% MEANING: the GitOps loop — Git is the source of truth, Flux reconciles the cluster to match it

    Dev("You — edit YAML and git push") --> Git[("Git repository<br/>single source of truth")]

    subgraph FluxLoop["Flux — runs inside the cluster, never sleeps"]
        Pull("Pull the latest manifests") --> Diff{"Does the cluster<br/>match Git?"}
        Diff -->|"&nbsp;yes — in sync&nbsp;"| Wait("Wait for the next check")
        Wait -.-> Pull
        Diff -->|"&nbsp;no — out of sync&nbsp;"| Apply("Apply what changed")
    end

    Git -->|"&nbsp;Flux checks ~every minute&nbsp;"| Pull
    Apply --> K8s("Kubernetes updates<br/>pods, services and config")
    K8s -->|"&nbsp;cluster now matches Git&nbsp;"| Diff
    Drift("Manual kubectl edit") -.->|"&nbsp;drift! Flux puts it back&nbsp;"| Diff

    classDef human fill:#A7F3D0,stroke:#047857,stroke-width:2px,color:#000
    classDef git fill:#DDD6FE,stroke:#6D28D9,stroke-width:2px,color:#000
    classDef flux fill:#BFDBFE,stroke:#1D4ED8,stroke-width:2px,color:#000
    classDef k8s fill:#A5F3FC,stroke:#0E7490,stroke-width:2px,color:#000
    classDef warn fill:#FDE68A,stroke:#B45309,stroke-width:2px,color:#000

    class Dev human
    class Git git
    class Pull,Diff,Wait,Apply flux
    class K8s k8s
    class Drift warn

    style FluxLoop fill:#EFF6FF,stroke:#93C5FD,color:#1E3A8A
Loading

I made a Youtube video that gives a general overview of my configuration and the core components.

Youtube Video

🚧 Foundation: onedr0p's Cluster Template

Special thanks to the most excellent onedr0p/cluster-template. It provides a clean, modern foundation for Talos + Flux-based clusters — and taught me how to organize manifests properly, use SOPS, and implement GitOps the right way.

Flux Cluster Template Flux Cluster Template Stars


🤯 Start This Journey Today

If you're interested in this type of thing, I encourage you to build your own home lab. It doesn't have to be Kubernetes. Grab ANY old computer and see what you can deploy on it.

Embrace the process. It will be infuriating at times, blissful at others.

You'll build some really cool stuff along the way. And your brain waves will expand.


🌟 Stargazers

Star History Chart

About

The k8s, GitOps humble home lab.

Topics

Resources

Stars

185 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages