DEV Community

Cover image for How I Quit the Cloud and Built a 3-Node GPU K8s Cluster for ₹6,000
BhargavMantha
BhargavMantha

Posted on

How I Quit the Cloud and Built a 3-Node GPU K8s Cluster for ₹6,000

Last month, I realized I was paying ₹2,500/month across various cloud services—photo backups, file sync, a VPN, and a small VM for side projects.

When I added up the annual cost and compared it to the price of a used ThinkPad on OLX, the math was obvious. Three weeks later, I had a 3-node Kubernetes cluster running in my living room.

The Problem

I wanted the real Kubernetes experience—not Minikube, not Docker Compose pretending to be orchestration. I needed something that could:

  • Run GPU workloads for local LLMs (Ollama).
  • Host my photo library (Immich).
  • Sync files and run Home Assistant.

Every "budget homelab" guide I found assumed you'd drop ₹50,000+ on a NUC cluster. I had a laptop, an old desktop with a gaming GPU, and about ₹15,000 to spend.

What I Did

1. The Hardware Hustle

I started with what I had. My desktop had a GTX 1070 Ti collecting dust. My old ThinkPad E14 (16GB RAM, i5) was sitting in a drawer. The only purchase was a ₹6,000 used laptop with a GTX 1650 Ti from a local seller—decent specs, terrible screen, perfect for a headless node.

Total hardware cost: ₹6,000.

2. K3s over K8s

Full Kubernetes would have eaten my RAM alive. K3s gave me 90% of the functionality at ~20% of the resource overhead. The control plane runs on the ThinkPad, which also hosts lightweight services: Grafana, Prometheus, Home Assistant, and PostgreSQL. Installation was literally one command per node.

3. The GPU Scheduling "Hack"

I wanted to run Ollama on the 1070 Ti, but I also wanted to use that desktop for work/gaming. The solution? A simple script that joins/leaves the K3s cluster on demand.

# athena.sh
./athena.sh gpu claim   # Joins cluster, pulls workloads
./athena.sh gpu release # Drains node, returns GPU to OS

Enter fullscreen mode Exit fullscreen mode

The cluster adapts, pods reschedule, and life continues.

4. NodePort Everything

I wasted two days trying to get proper pod networking across nodes before accepting reality: my home network and cheap router weren't going to play nice with complex Ingress. I switched to NodePort services with a 30xxx range:

  • Prometheus: :30900
  • Grafana: :30300
  • Ollama: :31434

Not elegant? Maybe. Reliable? Absolutely.

What I Learned

Lesson 1: Scope is everything.
My first attempt tried to replicate a production setup (Traefik, cert-manager, etc.). It was fragile. The working version is simpler: hostPath volumes instead of a storage provisioner, and NodePorts instead of ingress. "Production-grade" and "Actually usable at home" are different goals.

Lesson 2: GPUs in K8s are easier than they look.
Install the NVIDIA device plugin, add a RuntimeClass, and set resource limits. The hard part isn't the tech; it's the workflow of sharing hardware between "Work" and "Cluster."

Current State

The cluster now runs 25+ services:

  • AI: Ollama + Open WebUI
  • Media/Files: Immich, Nextcloud, Jellyfin
  • Home: Home Assistant
  • Stack: Prometheus, Grafana, Postgres

The Financials:

  • Power Draw: ~80W idle / 200W load.
  • Monthly Electricity: ~₹400.
  • Annual Savings: ~₹25,000 (and I own my data).

Discussion

Have you built a homelab on a budget? What tradeoffs did you make between "doing it right" and "getting it done"? Let me know in the comments!

Top comments (2)

Collapse
 
ramakant701 profile image
Ramakant Singh •

Sounds awesome

Collapse
 
bhargavmantha profile image
BhargavMantha •

Thank you :)