Pod
The smallest deployable unit — one or more containers sharing network and storage. Pods are disposable; you rarely create them directly.
Lesson 1 of 4 · ⭐ Gap priority
A crash-looping pod at 2am doesn't care that you've never run kubectl before. Get fluent in the container and orchestration primitives before you're debugging them live.
The distinction trips up almost everyone new to Docker — get it straight once and diagnosis gets much easier.
An image is a read-only, layered filesystem snapshot — a Dockerfile compiled into something runnable. A containeris a running (or stopped) instance of an image, with its own writable layer on top. Deleting a container doesn't touch the image it came from; rebuilding an image doesn't affect containers already running from the old one.
Four objects cover most of what you'll touch day to day.
The smallest deployable unit — one or more containers sharing network and storage. Pods are disposable; you rarely create them directly.
Manages a set of identical Pod replicas, handling rolling updates and self-healing by replacing failed Pods.
A stable network endpoint that load-balances traffic across a set of Pods, even as individual Pods come and go.
A way to partition a cluster into isolated groups of resources — for teams, environments, or tenants.
You'll see these four constantly. Knowing which is which cuts diagnosis time dramatically.
The container starts, exits, and Kubernetes keeps restarting it with increasing backoff. Usually an application-level crash, not an infra problem.
The node can't pull the image — wrong tag, missing registry auth, or a typo in the image name.
The container exceeded its memory limit and the kernel killed it. Check `resources.limits.memory` against actual usage.
The scheduler can't place the Pod — insufficient node resources, an unsatisfied node selector, or an unbound volume claim.
Look at the sanitized kubectl output below, then work through both exercises.
$ kubectl describe pod payments-worker-7d9f8c6b45-x2kqp
...
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Restart Count: 6
...
Events:
Warning BackOff 32s (x12 over 4m) kubelet Back-off restarting failed container
$ kubectl logs payments-worker-7d9f8c6b45-x2kqp --previous
Error: connect ECONNREFUSED redis:6379
at TCPConnectWrap.afterConnect [as oncomplete]Answer in your head first, then click a question to reveal the answer.
Work through the sample kubectl output and check each item off. Progress is saved in your browser.
These primers are a starting point. Read the primary sources to build real fluency.
What building this project taught me.
Containers & Orchestration hands-on depth was Tom's #1 self-identified gap across a scan of 30+ job descriptions — it's sequenced first in this trail for that reason, not because it's the easiest starting point.
kubectl output formatting varies by version and configuration; the shape here (Restart Count, Last State, Reason) is what matters, not exact spacing or field order.