Thirteen modules built on one realistic application, running on a real four-node Kubernetes cluster. Every terminal in this course is a captured session with real output — including the failures, because the failures are where the learning is.
Seven workloads — enough to produce every real failure mode, small enough to hold in your head. You do not restart with a fresh example in every module.
| Workload | Kind | What it teaches |
|---|---|---|
gateway | Deployment · NodePort | Edge routing, Ingress, the only externally reachable component |
catalog | Deployment ×3 | Probes, rolling updates, ConfigMap/Secret provenance, topology spread |
orders | Deployment ×2 + HPA | CPU throttling, OOMKilled, autoscaling, graceful shutdown from a scratch image |
postgres | StatefulSet + PVC | Stable identity, headless DNS, persistent volumes, surviving pod deletion |
redis | Deployment | Cache tier, resource limits, read-only root filesystem |
nightly-reindex | CronJob | Batch workloads, backoff, concurrency policy, TTL cleanup |
NetworkPolicy set | 5 policies | Default-deny, allow-lists, and the DNS mistake everybody makes once |
The OOMKill, the 97%-throttled CPU counter, the Secret sitting in plaintext inside etcd,
the FailedScheduling message naming every node — all captured from a live cluster,
replayed verbatim.
You will watch a container get killed for 33 MB, a rollout drop requests without a readiness probe, a NetworkPolicy cut DNS, and a pod escalate to more privilege than it should have — then close each hole.
Scripts in lab/ build the same 4-node cluster and the same application on any
Ubuntu box with Docker. Same manifests, same images, same exercises.