Architecture Decision Record

ADR 011: Local LLM Inference with Ollama on a Dedicated GPU Worker

GPU passthrough from Proxmox through Talos into Kubernetes, so no prompt ever leaves the network.

Status: Accepted — runtime extended by ADR 014  ·  Date: Dec 2025  ·  ← All ADRs


Context

I wanted LLM capabilities available in the homelab — both for personal use (chat, document Q&A) and as a foundation for in-cluster AI agents. Options:

The workloads I had in mind — MCP servers, in-cluster agents (Hermes), policy enforcement (Policyclaw) — all benefit from low-latency access to an LLM that doesn’t require an API key rotation strategy or a credit card.


Decision

Dedicate one Kubernetes worker node (kube-worker-ai) to GPU workloads. Use Ollama as the model serving runtime, exposed as an in-cluster service. All LLM-dependent workloads point at ollama-service.ollama.svc.cluster.local.


Reasoning


Tradeoffs


Outcome

The GPU worker runs stably with Ollama serving models at ollama-service.ollama.svc.cluster.local:11434. Open WebUI consumes it daily, and it powers Cortexa’s evaluation runs. The agent-runtime experiments that drove the original requirement (Hermes, Openclaw, Policyclaw) ran on it before being shelved for a future home inside Cortexa — see ADR 013. The stack has survived Talos upgrades and node reboots without requiring manual intervention.

The four-layer debugging story behind getting here is in Lessons Learned. The hard-won VRAM sizing data this rig produced is written up on the Cortexa page.

Update (Aug 2026): This ADR’s core decision — a dedicated GPU worker running local inference, no prompt leaving the network — still holds. What’s changed is the runtime: Ollama is no longer the sole engine. Generation is moving to vLLM for throughput and tensor parallelism, with Ollama retained for embeddings and experimentation. The reasoning and mid-flight status are in ADR 014.