Pods Are No Longer the Right Scheduling Abstraction

Kubernetes has spent years getting very good at answering one fundamental question: Where should this Pod run? For a large class of traditional applications, that is exactly the right question. A stateless Deployment with ten API replicas usually does not care if replica seven starts 20 seconds after replica six. Each Pod makes progress independently. The scheduler evaluates them one at a time, finds a feasible Node, binds the Pod, and moves to the next item in its queue....

October 1, 2026

Cluster API Object Model: Mapping the Custom Resource Graph

When inspecting a Cluster API (CAPI) management cluster with kubectl, the number of Custom Resource Definitions (CRDs) can feel overwhelming: Cluster, Machine, MachineDeployment, KubeadmControlPlane, and various provider objects. You do not need to master the entire specification to navigate with confidence. Cluster API organizes resources into a predictable hierarchy. By understanding the core resource graph, you can inspect any running cluster with kubectl, recognize what each object does, and understand how the pieces connect....

October 1, 2026

Cluster API Architecture: How the Control Plane Pieces Cooperate

Managing Kubernetes clusters declaratively requires orchestrating very different systems: allocating cloud compute, provisioning virtual networks, injecting bootstrapping scripts, and managing etcd quorum. A single monolithic controller handling all of these concerns across dozens of cloud platforms and operating systems would be brittle and unmaintainable. Cluster API (CAPI) solves this by decomposing cluster lifecycle into modular, cooperating controllers that run inside a dedicated management cluster. Instead of tightly coupling these controllers through direct RPCs or internal APIs, Cluster API uses the Kubernetes API itself as its coordination backbone....

September 30, 2026

Kubernetes Cluster API: Kubernetes Managing Kubernetes

Introduction Kubernetes excels at managing containerized applications. When you deploy a service, you declare desired state in a manifest: replica counts, container images, resource limits, and network ports. You submit that manifest to the API server, and controllers reconcile reality. If a pod crashes, a controller replaces it. If a node fails, the scheduler moves pods elsewhere. You declare target state once, and Kubernetes continuously reconciles actual state to match....

September 29, 2026

Self-Hosting Temporal in Go to Replace Cron and Custom State Management

Most backend systems eventually grow a hidden workflow engine. It rarely starts that way. It usually begins with a simple cron job that wakes up every ten minutes, queries the database for pending records, processes them, and updates a status column. It seems simple enough, until production happens. A downstream API times out. A worker crashes halfway through processing. A deployment abruptly kills the process. A customer asks why their job is stuck....

June 20, 2026

The Problem With Chasing GPU Utilization

Walk into any AI infrastructure discussion and you’ll hear the same question: What’s your GPU utilization? It’s become the infrastructure equivalent of asking a web service for its CPU utilization. The assumption is simple: higher utilization is better. After all, GPUs are expensive, and a cluster running at 90% utilization sounds far more impressive than one running at 50%. For a long time, I believed that too. Then I spent more time working on GPU scheduling and multi-tenant AI workloads....

June 16, 2026

Retries, Timeouts, and Idempotency: The Trio That Defines Production Reliability

Distributed systems rarely fail in clean, obvious ways. They degrade. They stall. They partially succeed. They retry half a request, lose the response, and leave you wondering whether the operation happened once, twice, or not at all. In production, reliability is rarely about whether the code works on a happy path. It is about how the system behaves when dependencies are slow, networks are unreliable, and clients do not get a clear answer....

April 20, 2026

Building Boring, Reliable Go Services in Production

The software industry has a habit of celebrating novelty. New frameworks, new abstractions, new patterns, and new promises of developer productivity show up every few months. Production systems, however, rarely fail because they were not modern enough. They fail because they were difficult to reason about, fragile under stress, and painful to operate. Over time, I have become much less interested in clever backend services and much more interested in boring ones....

April 18, 2026