Kubernetes for Beginners: What I Wish I Knew Before My First Cluster
My first Kubernetes cluster taught me more from its failures than its successes. If I could go back and hand myself one page of notes before starting, this would be it.
Pods are disposable, not precious
The biggest mental shift: a Pod is not a server. It has no persistent identity, and Kubernetes will kill and reschedule it without asking. I spent my first week debugging "why did my app lose its in-memory session state" before realizing the answer was: because that's exactly what Kubernetes is supposed to do. Anything that needs to survive a restart belongs in a Deployment's environment, a PersistentVolume, or an external store — never in Pod memory or local disk you assume is permanent.
Deployments, Services, and Ingress are three different jobs
- A Deployment manages how many replicas of your Pod run and how they get replaced.
- A Service gives those Pods a stable internal address, since Pod IPs change constantly.
- An Ingress routes external traffic to Services.
Conflating these three (which I did constantly early on) makes debugging "why can't I reach my app" needlessly hard. When something's unreachable, check each layer separately: are Pods running, does the Service have endpoints, does the Ingress rule match your hostname/path.
kubectl describe before kubectl logs
Logs tell you what your app said. describe tells you what Kubernetes did — image pull failures, failed readiness probes, resource limits killing your Pod with OOMKilled. Most of my "why won't this deploy" issues were visible in kubectl describe pod events long before I needed to look at application logs at all.
Resource requests/limits aren't optional
Skipping them "for now" is how one noisy Pod takes down a node. Setting sane CPU/memory requests is what lets the scheduler actually do its job, and setting limits is what stops a memory leak in one service from starving everything else on the same node.
Takeaway
Kubernetes has a steep start, but almost all of the early confusion comes from not having a clear model of what each primitive owns. Once Pods, Deployments, Services and Ingress each have a distinct, separate mental slot, most beginner debugging gets a lot faster.