Files
rootnode-academy/content/root/root-10-kubernetes-troubleshooting-observability/m01-health-probes/04-guided-exercise-readiness-probe.md
T
ced4568andClaude Sonnet 5 28c925069b feat(root): author the health-probes gold-standard module
content/root/root-10-kubernetes-troubleshooting-observability/m01-health-probes/:
lesson (probe concepts) -> demonstration (reading kubectl describe pod
Events for a probe failure) -> knowledge check -> guided exercise
(write a readiness probe on paper) -> Launch Lab intro
(rootnode-probe-port-mismatch) -> reflection (root cause + Real Ops
prevention takeaway). 5 of 6 activities carry instructor notes (demo
plan, misconceptions, timing, discussion questions, extensions).

This is the reference implementation docs/COURSE_AUTHORING_STANDARD.md
documents for all future RootNode lesson authoring.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-25 23:29:32 -05:00

62 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Guided Exercise: Configure a Readiness Probe
This is a paper-and-thinking exercise, not a Lab task — you won't run these commands against a
real cluster here (that comes next). The goal is to practice reading and writing a probe
definition correctly before you're diagnosing someone else's broken one.
## The scenario
You're deploying a small HTTP API that listens on port `3000` and exposes a health endpoint at
`/healthz`. It takes a couple of seconds to finish connecting to its database on startup — if a
request arrives before that finishes, it correctly returns a `503` at `/healthz` until it's
ready.
## Your task
Work out, on paper (or in a scratch file), what you'd write for this container's readiness
probe. Think through:
1. Which mechanism fits — `httpGet`, `tcpSocket`, or `exec`? (Hint: you have a real health
endpoint that returns a meaningful status code — use it rather than a shallower check.)
2. What `port` and `path` should the probe target?
3. Roughly what `initialDelaySeconds` makes sense, given the database connection takes a couple
of seconds?
4. Should this be a `readinessProbe`, a `livenessProbe`, or both? Justify your answer using the
distinction from the lesson — what actually goes wrong if you get this specific choice wrong
here?
## A worked shape to check yourself against
Your answer should end up structurally similar to this (exact field names matter more than the
precise numbers you chose):
```yaml
readinessProbe:
httpGet:
path: /healthz
port: 3000
initialDelaySeconds: 3
periodSeconds: 5
```
If you reached for `livenessProbe` instead of `readinessProbe` for this specific scenario,
re-read the lesson's distinction before continuing — "returns 503 while warming up" is
precisely the readiness case, not the liveness case. A liveness probe here would restart a
perfectly healthy, still-starting container over and over, which never lets it finish starting.
## Instructor Notes
**Facilitation:** Have students write their probe block on paper or a shared doc before showing
the worked shape — resist showing the answer early, since the value here is in students
committing to an answer and comparing, not passively reading a correct one.
**Approximate timing:** 10-15 minutes live with discussion; 10 minutes self-paced.
**Common mistake to watch for:** choosing `livenessProbe` because "the app isn't healthy yet"
— this is the single most common real-world probe mistake and exactly what question 4 is
designed to surface before the next activity's real diagnostic task.
**Optional extension:** ask what would need to change in this same YAML if the health endpoint
took up to 60 seconds to become available on cold start (answer: a `startupProbe` with a
generous `failureThreshold` × `periodSeconds`, so liveness/readiness don't engage too early).