Lesson 1 of 4 · ⭐ Gap priority

Containers & Orchestration

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.

Images vs. containers

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.

Core Kubernetes objects

Four objects cover most of what you'll touch day to day.

Pod

The smallest deployable unit — one or more containers sharing network and storage. Pods are disposable; you rarely create them directly.

Deployment

Manages a set of identical Pod replicas, handling rolling updates and self-healing by replacing failed Pods.

Service

A stable network endpoint that load-balances traffic across a set of Pods, even as individual Pods come and go.

Namespace

A way to partition a cluster into isolated groups of resources — for teams, environments, or tenants.

Common failure modes

You'll see these four constantly. Knowing which is which cuts diagnosis time dramatically.

CrashLoopBackOff

The container starts, exits, and Kubernetes keeps restarting it with increasing backoff. Usually an application-level crash, not an infra problem.

ImagePullBackOff

The node can't pull the image — wrong tag, missing registry auth, or a typo in the image name.

OOMKilled

The container exceeded its memory limit and the kernel killed it. Check `resources.limits.memory` against actual usage.

Pending

The scheduler can't place the Pod — insufficient node resources, an unsatisfied node selector, or an unbound volume claim.

Exercises

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]

Concept check

Answer in your head first, then click a question to reveal the answer.

Scenario checklist

Work through the sample kubectl output and check each item off. Progress is saved in your browser.

Go deeper

These primers are a starting point. Read the primary sources to build real fluency.

Training Notes

What building this project taught me.

This is a flagged gap-priority module

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.

The example output is representative, not exact

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.