Bare-Metal Kubernetes: My $200 Scrap Hardware Build
This isn't a polished guide; it's a record of what happens when you stop relying on a managed control plane.
The Stack
I went with an immutable, API-driven approach to keep things clean:
- Talos Linux: The OS. No SSH, just an API.
- Cilium: eBPF-based CNI. I replaced kube-proxy with this to get better networking and cluster mesh.
- ArgoCD: For GitOps deployment.
- Longhorn: Distributed block storage.
- MetalLB: To handle load balancing on bare metal via BGP.
- Prometheus & Grafana: For monitoring the cluster and my ISP router.
Why I avoided the Cloud
I use AWS daily for work, but there's a massive gap between passing a CKA exam and actually operating a cluster. In the cloud, everything is "safe." In a homelab, you can delete the CNI and watch the entire cluster melt in real-time.
The biggest lesson? Certifications don't tell you what happens when etcd runs out of disk space because Longhorn replicas ballooned, or how Cilium's eBPF replacement can silently break firewall rules that kubectl won't show you. If you haven't seen it fail without a "Reset" button, you don't fully understand the architecture.
Hardware Architecture
┌─────────────────────────────────────────────────────────────┐
│ DELL OPTIPLEX (Control Plane) │
│ Talos Linux · x86_64 · 16GB RAM │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ etcd (q=1) │ │ API Server │ │ Controller Manager │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Scheduler │ │ Cilium Agent│ │ Talos API Server │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ RPI-01 (arm64) │ │ RPI-02 (arm64) │ │ RPI-03 (arm64) │
│ 4GB RAM · 64GB │ │ 4GB RAM · 64GB │ │ 4GB RAM · 64GB │
│ USB-SSD boot │ │ USB-SSD boot │ │ USB-SSD boot │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ Cilium Agent│ │ │ │ Cilium Agent│ │ │ │ Cilium Agent│ │
│ │ kubelet │ │ │ │ kubelet │ │ │ │ kubelet │ │
│ │ Longhorn │ │ │ │ Longhorn │ │ │ │ Longhorn │ │
│ │ (replica) │ │ │ │ (replica) │ │ │ │ (replica) │ │
│ └─────────────┘ │ │ └─────────────┘ │ │ └─────────────┘ │
└─────────────────┘ └─────────────────┘ └─────────────────┘Moving from a managed AI workflow or cloud environment to this kind of deployment is a steep learning curve, but it's the only way to truly master the underlying LLM agent infrastructure or any containerized app.