Show me how gave the commands the audit runs: sed, awk and yq edits, heredoc manifests, JSON patches, --overrides, sleeps and wait loops - nothing anyone types in the exam. A step's show is now a list of parts (sim/bank.py): cmd() is what you type as it stands; hand() is what you do by hand - vim on a generated skeleton or on a manifest pasted from the docs page it names, kubectl edit, ssh NODE and sudo -i, a value you read and echo - with a script that does the same for the audit. All 135 CKA steps are rewritten so, with k for kubectl; their checks, titles and texts are unchanged. Add ./ksim lesson lint, which reads what every step has you type and flags scripts. The lesson audit runs it first. Record the hosts whose setup failed when a session started. The page warns above that task or lesson and offers Rebuild this host; the CLI names ./ksim reset N on each step. Render *italics* in lessons and tasks, outside code spans. Audited on v1.37: CKA lessons 27/27, 135/135 steps, done the exam way; lint clean. kubectl edit --subresource resize, the one edit the audit replaces with a patch, was proven on its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
32 lines
2.3 KiB
Python
32 lines
2.3 KiB
Python
"""CKA lessons: guided labs, one per curriculum objective, on a cluster of your own and without a
|
|
clock. A lesson explains, then walks you through steps that you do on its host; each step has a
|
|
check, a hint and the commands that do it. It ends by sending you to the objective's timed drill.
|
|
Lessons write nothing to the history or the scores - only a "lesson done" mark on the objective.
|
|
|
|
./ksim lesson the lessons of this track, and which you have done
|
|
./ksim lesson 1.1 start the lesson of objective 1.1 (id or key)
|
|
./ksim lesson STOR a domain's lessons not done yet, back to back; ./ksim lesson next moves on
|
|
./ksim lesson check check the step you are on; the next one follows
|
|
./ksim lesson audit [OBJ..] prove lessons: every step fails before its commands and passes after
|
|
|
|
A lesson's host is named after its id - lesson 9101 runs on `cka9101` - which never clashes with a
|
|
task's. Its files go under {WS}/lesson-<objective>/. A step's `show` is how you would do it in the
|
|
exam: cmd() for what you type as it stands, hand() for what you do by hand - `vim` a generated
|
|
skeleton or a manifest pasted from the docs, `kubectl edit`, `ssh NODE` and `sudo -i`, a value you
|
|
read and `echo` - each with a script that does the same unattended. The audit runs the commands
|
|
as `candidate` on the host and, for each hand() part, its script; `./ksim lesson lint` keeps
|
|
scripts (sed, awk, yq, heredocs, loops, JSON patches) out of what you type. In a script, a command
|
|
on another node is `ssh NODE sudo bash <<'EOF' ... EOF` or `ssh -n NODE 'COMMAND'`: without -n,
|
|
ssh would read the rest of the script as its input.
|
|
|
|
One file per domain, as with the task banks. Besides the curriculum's competencies, the lessons
|
|
cover what a full CKA course teaches under each of them (2026-10-19: the topics of KubeDojo's CKA
|
|
course, written here from scratch): projected volumes, eviction thresholds, debug containers,
|
|
kube-proxy's rules, encryption at rest, in-place resize, PodDisruptionBudgets, QoS classes,
|
|
ServiceAccount tokens, a real kubeadm upgrade, EndpointSlices.
|
|
"""
|
|
from cka import lessons_arch, lessons_net, lessons_storage, lessons_tshoot, lessons_work
|
|
|
|
LESSONS = (lessons_storage.LESSONS + lessons_tshoot.LESSONS + lessons_work.LESSONS
|
|
+ lessons_arch.LESSONS + lessons_net.LESSONS)
|