Nine tracks
Each track is a question the control plane already answers and almost nobody watches it answer. Prose on one side, a running cluster and live traffic on the other, and every claim an apply you can run against it.
Desired and observed
2 lessonsWho are you actually arguing with?
The loop, and the two halves of every object:
specis what you asked for,statusis what the cluster has.resourceVersionand the conflict you get for writing a stale one, whyapplyreturns before anything has happened, and which controller is going to undo the change you just made by hand.Pods and the kubelet
2 lessonsWhat is the kubelet doing with this right now?
Pod lifecycle from accepted to running, image pull as a duration rather than an instant, restart backoff and what
CrashLoopBackOffis actually counting, init containers and the ordering they buy, and what a pod is before it is a unit of scheduling.Probes
1 lessonWhich of the three did you mean?
Readiness, liveness and startup, and the difference between them. The probe that returns 200 before the connection pool is up, the liveness probe whose timeout is under the service's p99 and so restarts healthy pods under load, the cascade that follows, and what happens when you probe a dependency you do not own.
Rollouts
lands in M3What will this change cost in failed requests?
maxSurgeandmaxUnavailableas arithmetic on small replica counts, where 25% of four is one and the service needed three. Rollout status, rollback, the rollout that is stuck forever with a green-looking cluster, andminReadySecondsas the cheapest fix in the gym.Traffic and endpoints
2 lessonsWhen exactly does traffic stop arriving at this pod?
Service to endpoints to pod, and the race at the end of a pod's life: endpoint removal and
SIGTERMare two independent loops and neither waits for the other.preStopand why it is a sleep, graceful shutdown, connection draining, and the long-lived connection nobody rebalances.Scheduling
1 lessonWhy is this pod still Pending?
Requests versus limits and which one the scheduler reads, Pending and the reason recorded at the moment the decision was made, taints, tolerations and affinity, the cluster that is half empty and cannot fit anything, and what happens when you set requests by copying the limits.
Pressure
1 lessonIs this slow, or is it being held back?
CPU throttling that looks exactly like a slow dependency, OOMKill and the number that was too small, QoS classes and who the kubelet evicts first, and node pressure with the eviction order it implies.
Disruption
1 lessonWhat happens to this service at two in the morning?
Drains and what they wait for, the PodDisruptionBudget that blocks a node upgrade indefinitely, preemption by priority, and a horizontal autoscaler acting on a metric that lags the thing it is meant to track.
Reading a generated manifest
lands inWhat will this rollout cost, before you run it?
The track the rest exists for. You are handed the Deployment, Service and HPA a model wrote for a stated service, and asked what its rollout will cost in failed requests. Then you apply it and count them.
/audit