jcardena.com Blog Running 30+ apps on one home cluster: the ops reality
145 posts
EN ES

Running 30+ apps on one home cluster: the ops reality

Web

A 25-year enterprise architect on the operational reality of running a self-hosted AI development cluster, focusing on the architectural patterns that work.

The cluster went silent at 2 AM. Not a single alert fired. The overnight data enrichment agent, which was supposed to be processing a million records, had flatlined hours ago. The dashboards were live but showed no errors—just a void where activity should be. The cause, I'd later find, wasn't a crash. It was resource starvation, triggered when a vector re-indexing job choked the storage I/O, silently killing the agent’s connection to its database. This is the central tension of building with AI: the elegant efficiency of consolidation versus the brutal reality of shared fate.

User PromptAgent OrchestratorDeterministic ToolSynthesizedResponse
Simple Agentic Workflow

The Illusion of Idle Capacity in AI Workloads

The logic for a unified R&D cluster is compelling. Why run a separate server for a vector database, another for model inference, and yet another for the data pipelines that feed them? Consolidating them onto a single Kubernetes cluster seems like an obvious win. But the "idle" capacity you reclaim is a mirage. In general-purpose computing, workloads are often predictable. In AI development, they are anything but.

An LLM agent reasoning through a complex task can spike CPU unpredictably. A batch embedding job will saturate storage I/O for hours. These workloads are fighting for the same resources, and their peaks overlap in chaotic ways. Many architects still favor a serverless-first approach to avoid these problems entirely, but for deep R&D, understanding these failure modes is the entire point. My experience shows the real killer is rarely CPU or RAM; it's I/O contention. As noted in classic SRE texts like the Google SRE Book, the most dangerous failures are the ones that cascade, and a storage bottleneck is a primary cause of correlated, system-wide meltdowns.

Observability for Hybrid Systems

On a single-purpose server, monitoring can be simple. In a consolidated AI cluster, it's the most critical work you'll do. You aren't just managing containers; you're managing a system where deterministic and non-deterministic processes collide. Answering "why is the agent slow?" requires seeing its activity in the context of everything else.

My stack is standard—Prometheus, Grafana, Loki—but my philosophy is grounded in frameworks like the USE Method from Brendan Gregg, which focuses on utilization, saturation, and errors for every resource. I don't just track pod health. I have dashboards correlating node-level disk latency with pod activity. When I see a high time-to-first-token from my inference server, I can instantly check if it corresponds to a data pipeline writing to the same underlying storage volume. Without that context, I'd be chasing ghosts in application code for hours.

Isolating Deterministic and Agentic Workloads

If there is one pattern that makes this manageable, it’s using namespaces as hard isolation boundaries. It's the most effective tool for building firebreaks between workloads with wildly different performance profiles. The official Kubernetes documentation on Resource Quotas provides the blueprint, but applying it to a hybrid AI stack requires a specific strategy.

  • Data Infrastructure: Databases and vector stores live here. They get guaranteed memory and CPU reservations because their performance is non-negotiable.
  • Deterministic Pipelines: ETL jobs and data processors. They have CPU caps but generous memory to avoid out-of-memory kills during large batch runs.
  • Agentic Sandbox: LLM agents and experimental services. These are treated as cattle. They have strict CPU and memory limits and are the first to be throttled.
  • Model Inference: The local LLM server. It gets a high CPU priority but is carefully monitored, as a runaway request can easily starve other processes.

This isn't just about resource contention. It’s a security and stability tool. Using NetworkPolicies, I can ensure that an experimental agent in its sandbox cannot directly access a production database, forcing all interaction through a hardened API. It forces a clean separation of concerns.

Embracing the Shared-Fate Trade-Off

You cannot escape the primary downside: a single point of failure. A botched kernel update or a failing storage controller can take down the entire R&D environment. For this use case, I accept that trade-off for the ability to iterate quickly and observe complex interactions locally. But I plan for it.

Mitigation is about rapid recovery, not perfect uptime. The stateful parts—model weights, database volumes, vector indexes—are backed up off-cluster continuously. The applications themselves are defined entirely as code in Git. If the cluster melts down, I can rebuild it from scratch. This reality is a powerful design constraint. It forces me to favor simple, resilient patterns over complex, brittle ones. It's a constant, humbling reminder that all this abstraction still runs on physical hardware.

INGESTION AND SOURCESExternal APIsEvent StreamsVector DBsFile StoresCORE PROCESSING AND R&DDeterministicPipelinesLLM AgentsModel InferencePersistent StateSERVING AND OBSERVABILITYApplication APIsMonitoring StackExperimentTrackingAlerting
Unified Data and AI Architecture on a Single Cluster

Durable Principles for Self-Hosted AI Development

Running a dense, hybrid AI cluster is a microcosm of the architectural challenges emerging in the enterprise. The patterns that hold up are not about specific tools, but about enduring principles. First, architect your system assuming I/O is the scarcest resource and the primary source of failure. Second, use the strongest logical isolation primitives available—like namespaces and network policies—to build firebreaks between unpredictable agentic workloads and stable deterministic ones. Finally, invest more in your observability stack than any single component, because understanding the interactions *between* the parts is the whole game now.

JC
Juan Cardena
Enterprise Architect, Data & AI

Enterprise architect with 25 years across web, software, data, and AI. MIT CDAO ’25. Writing on agentic AI in production.