Describing the destination
The lesson Containers From First Principles ends where a single host runs out: addresses that change on restart, no way to find a service, and no bridge spanning machines.
The obvious response is a program that runs the steps: start three copies here, register them there, watch for failures, restart what died. That is imperative orchestration, and it fails in a specific way. Every step assumes the state it expected, so an interruption halfway leaves the system somewhere the script cannot reason about, and recovery means enumerating partial states nobody anticipated.
Kubernetes takes the other approach. You submit a description of the desired end state, and never say how to reach it.
apiVersion: apps/v1
kind: Deployment
spec:
replicas: 3
template:
spec:
containers:
- name: api
image: myapp@sha256:abc123
That says three copies of this image should be running. It does not say start, or check, or restart. Something else continuously makes it true, and that shift is the whole system.

