What Are You Delegating?
Every abstraction is a trade: it removes work by making decisions for you. Those decisions are still being made — just not by you, and not visibly. For each abstraction: what it genuinely handles, what remains yours, and the escape hatch.
An ORMAn HTTP client or SDKA managed database or cloud platformAn identity providerAn LLM or coding agentA web frameworkA library functionA managed message queueA cacheA container runtime and orchestrator
What are you delegating to a container runtime and orchestrator?
Operating SystemsYou write
1$ docker build -t api . && kubectl apply -f deploy.yamlThe abstraction handles
- ✓A reproducible filesystem and environment
- ✓Isolation via namespaces, limits via cgroups
- ✓Placement, restarts, rolling deploys, service discovery
- ✓Health checks and traffic shifting
Still your responsibility
- →Memory limits are enforced by the kernel — exceed the cgroup and the process is killed, which looks like a crash with no stack trace
- →PID 1 semantics — your process must reap children and handle signals, or zombies and slow shutdowns follow
- →Ephemeral filesystems — writes vanish with the container; state belongs elsewhere
- →Networking is still networking — DNS, ports, connection limits and NAT all still apply inside the overlay
- →Steal time and noisy neighbours — the VM under your container is shared
Know your escape hatch
When: A container restarts "randomly", is slow only sometimes, or cannot connect to something it can resolve.
Drop to: The OS underneath: cgroup events, process states, ss, the network namespace, the node's metrics.
A container is an ordinary process with boundaries drawn around it. Everything you know about processes still applies.
Go deeper on this one: