Upgrades six PARTIAL modules to the gold-module standard (lesson/demonstration/ knowledge-check/guided-exercise/lab(s)/reflection), preserving every existing lab activity_id and scenario_id: root-06-m03 (jobs/cronjobs/daemonsets), root-07-m04 (ingress/networkpolicy), root-07-m02 (configuration/secrets, converted in place from a bare 5-lab bank), root-09-m02 (serviceaccounts/rbac), root-09-m03 (network/supply-chain security), root-10-m03 (troubleshooting framework). root-05-m01 (20-task kubectl-fluency bank) gets a minimal bookending lesson + reflection rather than a full redesign, since each task already carries its own explanation. root-12-m01, root-capstone-m01, and root-09-m04 are promoted to READY via documented exceptions (no new activities) where adding one would misrepresent their intentional design. Wires a new rootnode-security-assessment (exam, 60min, hint_policy disabled) using the existing Phase 3B assessment engine: 3 required hands-on CORE scenarios + 4 random-draw pools covering SecurityContext, RBAC, network policy, and the 7 previously-unwired CKS MCQs. Wires the previously-unwired readiness-probe-task scenario as an OPTIONAL practice lab in root-10-m01, using the existing is_required model. Adds root-11-m01-devops-platform-thinking — an honest, lesson-only ROOT 11 orientation module naming DevOps/platform engineering practices already exercised in ROOT 05-10/12, explicit that GitOps/CI-CD/IaC/observability need lab infrastructure this platform doesn't yet provide. No fake labs. Adds infra/scripts/validate-course-content.js: cross-checks the DB against scenario/content files for duplicate ids, orphans, invalid references, cycles, sequence collisions, instructor-notes leakage, and (new) self-paced content deferring explanation to a live instructor. 0 errors against the resulting 22 courses/modules, 163 activities, 98 scenario files. No application code changed — every gap was satisfiable with existing tables (course_modules, module_activities, assessment_definitions) and the existing content-delivery pipeline. Co-Authored-By: Claude Sonnet 5 <[email protected]>
41 lines
2.1 KiB
Markdown
41 lines
2.1 KiB
Markdown
# Reflection: The Right Primitive Is a Correctness Decision, Not a Style Choice
|
|
|
|
You just built a one-shot Job and a scheduled CronJob for real. Take a few minutes to connect
|
|
this to production thinking.
|
|
|
|
## Reflection questions
|
|
|
|
1. If your team accidentally deployed the database backup script as a Deployment instead of a
|
|
CronJob, what's the FIRST symptom you'd likely notice — and would it look like a bug in the
|
|
backup script itself, or something else?
|
|
2. A CronJob that fails silently every night for a week is a real, common incident pattern. What
|
|
would you want monitored to catch this quickly?
|
|
3. Why does "it ran once and worked" not prove a CronJob is configured correctly?
|
|
|
|
## Real Ops takeaway
|
|
|
|
**Workload-primitive mistakes often look like application bugs at first.** A backup script
|
|
"crashing" every few minutes on a Deployment isn't a bug in the script — the script did exactly
|
|
what it was told to do (exit when finished) and the Deployment is "correctly" restarting it
|
|
according to its own contract. Recognizing "wrong primitive," not "buggy code," as the root
|
|
cause saves real debugging time.
|
|
|
|
**A schedule you never verify is a schedule you can't trust.** A CronJob failing every single
|
|
run since deployment is easy to miss if nobody checks — unlike a Deployment's crash-looping
|
|
Pods, which are visible in `kubectl get pods` by default, a CronJob's failed history requires
|
|
someone to actually look at `kubectl get jobs` or the CronJob's own status. Real teams monitor
|
|
CronJob success/failure explicitly rather than assuming silence means success.
|
|
|
|
This module is complete. Continue to the next module.
|
|
|
|
## Instructor Notes
|
|
|
|
**Discussion questions for a live classroom:** question 1 is worth pushing on — many students'
|
|
first instinct is to debug the "crashing" script rather than question the workload type it's
|
|
running under.
|
|
|
|
**Approximate timing:** 8 minutes live discussion; 5 minutes self-paced writing.
|
|
|
|
**Optional extension:** ask students to name one alerting rule they'd add for a critical nightly
|
|
CronJob (e.g. "alert if no successful completion recorded in the last 25 hours").
|