Platform Engineering · Home Lab

I built a production-grade platform at home, then wrote down everything I learned.

A 6-node Talos Kubernetes cluster on Proxmox with full GitOps delivery, zero-trust networking, and local GPU inference — plus the applications running on top of it. Three rebuilds from scratch. One data loss. All of it documented, including the parts that didn't work.

6Talos K8s nodes
3Proxmox hosts
72ArgoCD applications
37Monitored endpoints
8Network trust zones
100%GitOps delivered

The platform

This didn't start as a platform. It started in 2024 with Home Assistant, some ESP32s, and wanting to learn a little Linux — and got serious in July 2025.

Platform capability map showing seven areas: GitOps delivery, networking and segmentation, data persistence, observability, security and compliance, local AI platform, and user applications. The platform's seven capability areas — see all diagrams →
Compute

Talos on Proxmox

3-node Proxmox cluster with ZFS. 6-node Talos Kubernetes cluster — immutable, API-driven, no SSH. One worker dedicated to GPU inference.

Networking

Zero-trust by default

Cilium eBPF networking with per-namespace egress policy. Istio ambient mode for mTLS without sidecars. VLAN segmentation across eight trust zones.

Delivery

Git is the only way in

App-of-Apps ArgoCD bootstraps everything. Vault is the single source of truth for secrets, synced at runtime by External Secrets. No kubectl apply.

AI Platform

Inference that stays home

GPU passthrough from Proxmox through Talos into Kubernetes, serving local models on the GPU worker. No prompt leaves the network, and there's no per-token bill.

How it grew

Eighteen months of tinkering, then a year of building. It didn't arrive as a platform — it accreted, one problem at a time, through a couple of rebuilds and one fight I lost outright.

2024 – mid 2025 · the prelude
Home Assistant, ESP32s, Docker on the NAS

It started small and stayed small for a while: Home Assistant and a handful of ESP32s on an existing Unifi and Synology foundation, then containers running straight on the NAS. The goal was to learn a little Linux. Eighteen months of tinkering that looks unremarkable on a timeline — and taught me enough to want something better.

Jul 2025 · it gets serious
Bare-metal k0s, and GitOps from day one

Containers moved off the NAS onto a dedicated server, run as a pet. ArgoCD and self-hosted Gitea made Git the only way to change what was deployed. This is where the homelab stopped being a hobby project and started being infrastructure.

Aug 2025
The platform layer

SSO through Authentik, secrets through Vault and External Secrets, automated certificates. It stopped being "some containers" and started being a platform.

Sep 2025 · a loss
The GPU passthrough fight — lost

A dedicated AI workstation joined the lab, but GPU passthrough into k0s containers never came together. I lost that one outright — and it forced the next two steps.

Nov 2025 · the big migration
Nodes became cattle

Kubernetes moved onto disposable Proxmox VMs running immutable Talos Linux. GPU passthrough worked on the first serious attempt, and the mental model flipped from "repair the server" to "rebuild the node."

Nov 2025
Zero-trust networking

Cilium eBPF with per-namespace egress policy, and Istio ambient mTLS across the mesh. A new service reaching the internet became a deliberate change to Git, not a default.

Dec 2025 – today
Local AI, first-class

Ollama on the GPU worker, then eleven MCP servers giving AI tooling scoped access to the platform, then vLLM for throughput. The lab now helps operate itself.

The reasoning behind each step is in the decision records; what broke getting there is in lessons learned.