Kubernetes starters, one object per page
Thirty-two objects for developers who paste kubectl commands from tutorials and want the grammar: the cluster, desired state and the reconcile loop, Pods and Deployments, the Service as a stable address, Ingress, ConfigMap and Secret, labels and namespaces, probes, requests and limits, HPA, StatefulSet and DaemonSet, one object per page.
A diagram, the classic trap, and one command to go try this week. That's a page.
Kubernetes starters, one object per page
Thirty-two objects for developers who paste kubectl commands from tutorials and want the grammar: the cluster, desired state and the reconcile loop, Pods and Deployments, the Service as a stable address, Ingress, ConfigMap and Secret, labels and namespaces, probes, requests and limits, HPA, StatefulSet and DaemonSet, one object per page.
Set in Space Grotesk, Inter and JetBrains Mono (SIL Open Font License).
Kubernetes behaviour checked against the official Kubernetes documentation (kubernetes.io/docs), pages fetched and read during this build: Components; Objects; Controllers; Pods; Deployments; Service; Ingress; ConfigMaps; Secrets; Labels and Selectors; Namespaces; Probes; Resource Management; Horizontal Pod Autoscaling; StatefulSets; DaemonSet; Persistent Volumes; kubectl Quick Reference. Concepts are named as the docs name them. The one practice claim, spaced practice beats cramming, is Cepeda et al. 2006, Psychological Bulletin, a meta-analysis of 317 experiments (PubMed 16719566). Teaching conventions are named as conventions. Kubernetes docs are licensed under CC BY 4.0; this book quotes no verbatim passages and is an independent guide not affiliated with or endorsed by the Kubernetes project or the CNCF.
General information only. Not professional advice; verify against your own cluster and the current docs.
Your purchase is for personal use only. You do not have redistribution rights: please do not share, resell, or republish this book or its pages.
© 2026 Steve Hodgkiss. All rights reserved. Personal use only; no redistribution rights.
Edition 1.0 · stevehodgkiss.net
Contents
The machine
What a cluster physically is, and the one idea that runs everything on it: objects as records of intent, chased by reconcile loops.
- 01The cluster, two halves
- 02A record of intent
- 03spec and status
A Kubernetes cluster consists of a control plane and one or more worker nodes. Control plane: kube-apiserver exposing the HTTP API, etcd storing API data, kube-scheduler assigning pods to nodes, kube-controller-manager running controllers. Nodes run kubelet, kube-proxy, a container runtime. Per the Kubernetes docs, Components.
The cluster, two halves
Let's say you run kubectl get pods and something, somewhere, answers. Here's who.
A cluster is a control plane plus one or more worker nodes, say the docs. The control plane holds the API server everything talks to, etcd for state, the scheduler, the controllers. Each node runs the kubelet keeping pods alive, kube-proxy, a runtime. Thinking kubectl talks to your containers is the first leftover; it talks to the API.
Machines below, control plane above. You talk to the API.
Run kubectl version and kubectl get nodes this week and name the two halves of your cluster out loud.
Kubernetes objects are persistent entities representing cluster state. An object is a record of intent: once created, the system constantly works to ensure the object exists. You create objects through the Kubernetes API, usually via kubectl. Per the Kubernetes docs, Objects in Kubernetes.
A record of intent
Let's say kubectl apply -f feels like uploading a config file. It's stranger and better.
An object is a record of intent: once created, the system constantly works to ensure it exists, say the docs. Your YAML becomes an object in etcd, a standing order the cluster keeps chasing. Thinking of apply as a script that ran and finished is the model that makes the rest confusing.
You declare. The cluster ensures. That's the trick.
Read one object back with kubectl get deployment -o yaml this week and find your intent, recorded.
Almost every Kubernetes object includes spec and status. You set the spec at creation: desired state. The system supplies and updates status: current state. The control plane continually manages actual state to match desired state. Per the Kubernetes docs, Object spec and status.
spec and status
Let's say a pod dies and a new one appears, and nobody ran a command. Somebody was chasing.
The spec is the desired state you set; the status is what the system reports back, say the docs. Ask for replicas: 3 and the system starts three, records what it finds, replaces any that die. Editing the status to fix a problem is painting the smoke detector. The spec is yours.
You declare. The controller does the chasing.
Run kubectl describe deployment on any deployment this week and find the spec's wish, then the status's report.
A Pod is the smallest deployable unit of computing you can create and manage in Kubernetes: a group of one or more containers with shared storage and network resources, co-located and co-scheduled. The one-container-per-Pod model is the most common use case. Per the Kubernetes docs, Pods.
The Pod: smallest unit
Let's say you deploy one container and kubectl answers in pods. That box is the unit.
A Pod is the smallest deployable unit: containers sharing storage and network, co-located, co-scheduled, say the docs. One IP for the whole pod, containers talking over localhost. One container per pod is the common case. Squeezing loosely-related containers into one pod couples their lives for no prize.
Kubernetes doesn't run your container. It runs a pod around it.
Run kubectl get pods -o wide this week and read the NODE and IP columns for one of your pods.
The Service API is an abstraction to expose a group of pods behind a single outward-facing endpoint. Its endpoint list updates whenever the set of pods changes. Per the Kubernetes docs, Service.
The Service
Let's say your app calls a pod IP that worked yesterday. Pods don't keep addresses. Something has to.
A Service exposes a group of pods behind one stable endpoint, updated whenever the pods change, say the docs. The IP and DNS name stay put while the pods behind them rotate. Hardcoding pod IPs in config is the bug this object exists to delete.
A Service is an address, not a box.
Run kubectl get endpoints (or endpointslices) for one service this week and watch it list the live pods.
The practice
Declarative habits, the spacing evidence behind one object a day, and the whole model on one page.
- 01One object a day
- 02The whole model
Cepeda et al. 2006, a meta-analysis of 317 experiments (PubMed 16719566), found that spaced practice beats massed practice for retention. The one-object-a-day convention applies that finding. Named as a convention.
One object a day
Let's say you binge this book in one sitting and by Thursday it's fog. That's the forgetting curve, not a character flaw.
Spaced practice beats cramming: Cepeda et al. 2006, a meta-analysis of 317 experiments (PubMed 16719566), the one practice claim this book allows. So the convention, named as a convention: one object a day, one command, on a real cluster. The Saturday binge feels productive and doesn't survive the week.
A little, often, on a real cluster. That's the method.
Pick five pages and spread their TRY THIS WEEK reps across your next five working days.
The complete chain: a Deployment whose pod template labels match the Service selector, ConfigMap and Secret injected, Ingress at the door, probes for health, requests and limits for the node, HPA for scale. Per the Kubernetes docs throughout.
The whole model
Let's say it clicked somewhere around the Service page and you want the whole machine in one look.
One declaration: Deployment for copies, labels wiring the Service, ConfigMap and Secret injecting, Ingress at the door, probes for health, requests and limits for the node, HPA for the count, every piece from the docs. The reconcile loop under it all holds it true. Learning commands before this shape is sentences in a language you can't yet speak.
Declare the objects. The loop holds them true.
Draw your own stack on paper this week, from memory: ingress, service, deployment, pods, config, probes.