Lesson 8 · Workloads, config & networking
Probes & resources
How Kubernetes knows a Pod is healthy — and how much CPU/memory it's promised and capped at.
Your win: distinguish the three probes (liveness / readiness / startup) — the single most-confused K8s topic in interviews — and explain requests vs limits and what happens when you hit them.
The three probes — different questions, different actions
The kubelet (Lesson 2) runs health checks on each container. There are three, and mixing them up is the classic mistake:1
| Probe | Asks | On failure |
|---|---|---|
| startup | "has it finished booting?" | keep waiting; hold off the other two until it passes |
| readiness | "should it get traffic?" | remove the Pod from Service endpoints (no restart) |
| liveness | "is it stuck / dead?" | kill & restart the container |
Requests & limits — the two numbers per resource
- request — what the Pod is guaranteed. The scheduler (Lesson 2) uses it to place the Pod on a node with enough room; it's reserved.
- limit — the ceiling. Exceed the CPU limit → the container is throttled. Exceed the memory limit → it's OOMKilled (memory can't be throttled).2
Requests drive scheduling and the Quality-of-Service class; limits protect the node from a runaway container. A common production bug: too-low a memory limit → periodic OOMKills that look like random crashes.
- readinessProbe (:78) →
/bin/grpc_health_probe -addr=localhost:{port}(:92) - startupProbe (:103,
failureThreshold: 12) → same probe (:117) - livenessProbe (:123) → same probe (:137)
grpc_health_probe binary was downloaded into the image back in
local/Dockerfile.development (Course 1 L2) — it queries the
gRPC health service your Go server exposes. Resources come from
.Values.resources (:145-146); concrete example
backend/tom/values.yaml:53-59
(requests.memory: 128Mi, probes enabled). So health and sizing are per-service
values, one shared template.
Kubernetes docs — Probes & managing resources
The three probe types with their failure semantics, and how requests/limits drive scheduling and QoS.
→ kubernetes.io — Probes
(how-to: configure probes)
→ kubernetes.io — Resource requests & limits
Check yourself (from memory)
Q1. A failing readiness probe causes Kubernetes to…
Q2. A container that exceeds its memory limit is…
Q3. The request value is primarily used to…
grpc_health_probe
-addr=localhost:{port} in _workload_containers.tpl (:92/:117/:137),
querying the Go server's gRPC health service; resources from .Values.resources
(tom: requests.memory 128Mi).conversationmgmt, L7), and keep them healthy and sized (probes + resources,
L8). Part 3 is production behaviour: autoscaling (KEDA on Kafka lag!),
scheduling, disruptions/PDB, and namespaces/RBAC.