Comparison
ControllervsReconciliation loop
Controller
you never create the individual containers; you create an object, and a background process creates them to match it.
A process that owns one kind of object and runs a reconciliation loop for it — creating replicas, attaching storage, updating a load balancer. Understanding that there are many of them, running independently and asynchronously, explains why one change ripples outwards over seconds and why the events are the log. Most debugging in an orchestrator is working out which controller is unhappy and reading what it said.
Full entry →Reconciliation loop
something reads the difference between what you asked for and what exists, takes one step to close it, and then does it all again forever.
The pattern every controller implements: observe actual state, compare to desired state, act, repeat. It is level-triggered rather than edge-triggered — it looks at where things are, not at what event just happened — which is why a missed message or a crashed controller is self-healing rather than fatal. It also explains the characteristic feel of these systems: nothing fails outright, things simply stay wrong while something retries, so timeouts and events matter more than error codes.
Full entry →