cka-sim/weak-spots-cka.md
vumast3r 55ab18f814 fix: repair the CKA bank and harness after a live audit; add Simulator Set D
Every changed task was seeded, graded untouched, solved and re-graded on a
separate kind cluster. The four sim sets were rehearsed as full sittings (real
baseline, seed everything, solve in order, grade at the end): A 150/150,
B 176/176, C 163/163, D 122/122. Every random-pool task was either passed in a
real session or cycled the same way.

Graders that could never pass, or passed for free:
  Q306 (local-path cannot resize; now graded as an in-place resize), Q314 (GNU
  grep prefixed file names), Q305 (plain `get events` has no SOURCE column and
  events expire; now managedFields), Q410 (kindnet DOES enforce NetworkPolicy;
  the expected answer is now derived from the CNI), Q35, Q212 (missing `]`),
  Q101 (`can-i create pods/exec` asks about a pod NAMED exec; multi-type get),
  Q109 (an emptyDir over nginx's /var/log crash-loops it), Q40 (TTL was
  measured at grading time), Q121, Q106, Q104, Q41, Q26, Q403, Q409, Q417,
  Q113, Q22, Q24/Q108 (flaky right after a rollout), and free points on
  untouched Q24/Q102/Q108/Q119/Q122.

Reference solutions: S[43], S[107], S[121], S[106] rewritten; S[116] (a
Completed Job pod still pins its PVC), S[119] (a pods quota equal to replicas
deadlocks the rollout); DNS checks use FQDNs; the explainer and exam guide
are corrected (etcd restore is etcdutl's job on 3.6+).

Cross-session leaks: the pre-session baseline now also repairs Q114 (the
kube-system NetworkPolicy and CoreDNS replicas), Q117/Q39 kubelet CA paths,
Q317, kubelet drop-in binary paths, a moved scheduler manifest, leftover
static pods and the default StorageClass. Q115 releases its fixed PVs from
claims left by earlier sessions.

Conflicts: `breaks` may be a list and `solo` keeps Q102's etcd restore out of
mixed sessions. Q118, Q5/Q103, Q26 vs the W1 taints, set A 203/204/208/212 and
set B 305/309 no longer sabotage each other. Q317 now disables only CSR
signing (the old break killed the whole controller-manager). Q110/Q311 no
longer compare against the whole cluster at submit time. Two delete/recreate
races in setups are fixed.

Harness: the weak list clears after two clean passes in a row, weak entries
show the latest attempt's failures, domain scores use the exam's own tasks,
history entries can be marked synthetic (entry 11 is), the web UI lists
every sim set, `./exam grade` refuses mid-exam (--force), preflight checks W1.

Set D (`./exam sim d`): 17 original killer.sh-style tasks, ids 501-517,
122 points - control-plane inventory, event forensics with crictl, a broken
kubelet unit, kubelet certificates, manual scheduling with the scheduler
stopped, Helm housekeeping with a stuck release, an enforced AND-vs-OR
NetworkPolicy, dnsPolicy and access-mode troubleshooting, and more.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-22 21:59:35 -06:00

18 KiB

CKA weak spots

Generated by exam from 10 attempt(s); regenerated on every end.

Domain scores (latest full exam, 2026-09-08T19:59, 14.3%)

  • ARCH 12/26 — Cluster Architecture, Installation & Configuration (25%)
  • WORK 1/16 — Workloads & Scheduling (15%)
  • NET 0/17 — Services & Networking (20%)
  • STOR 0/11 — Storage (10%)
  • TSHOOT 2/35 — Troubleshooting (30%)

Drill next (./exam drill weak)

Q02 · ARCH · etcd snapshot (1/2 failed, last 0/7 pts, last failed 2026-09-19T12:27)

  • ✗ /opt/cka/etcd-snapshot.db exists on the control-plane node
  • ✗ snapshot is a real etcd backup (> 100 KB)

Q06 · ARCH · Certificates: expiry check and user CSR (2/3 failed, last 6/6 pts, last failed 2026-09-12T22:17)

  • passed last time (6/6) - one more clean pass takes it off this list

Q15 · STOR · PersistentVolume, claim and pod (3/4 failed, last 6/6 pts, last failed 2026-09-15T20:55)

  • passed last time (6/6) - one more clean pass takes it off this list

Q16 · STOR · Default StorageClass and dynamic provisioning (4/4 failed, last 0/5 pts, last failed 2026-09-16T19:40)

  • ✗ StorageClass fast-local: local-path, WaitForFirstConsumer, Delete
  • ✗ fast-local is default and standard is not
  • ✗ fast-claim picked up fast-local and is Bound
  • ✗ fast-pod Running with claim at /data

Q17 · TSHOOT · Node NotReady (3/4 failed, last 8/8 pts, last failed 2026-09-13T01:06)

  • passed last time (8/8) - one more clean pass takes it off this list

Q19 · TSHOOT · CrashLoopBackOff diagnosis (4/5 failed, last 6/6 pts, last failed 2026-09-14T16:49)

  • passed last time (6/6) - one more clean pass takes it off this list

Q28 · WORK · Init container prepares content (4/4 failed, last 0/4 pts, last failed 2026-09-16T19:40)

  • ✗ pod Running, init container named setup completed
  • ✗ emptyDir 'content' shared by both containers
  • ✗ nginx serves the init-written content

Q29 · WORK · Immutable ConfigMap rotation (3/4 failed, last 4/4 pts, last failed 2026-09-15T20:55)

  • passed last time (4/4) - one more clean pass takes it off this list

Q30 · NET · Named ports (2/3 failed, last 4/4 pts, last failed 2026-09-14T16:49)

  • passed last time (4/4) - one more clean pass takes it off this list

Q32 · WORK · ResourceQuota and LimitRange (1/1 failed, last 0/4 pts, last failed 2026-09-19T12:27)

  • ✗ ResourceQuota limits pods/6, requests.cpu 1, limits.memory 2Gi
  • ✗ LimitRange defaults set
  • ✗ worker pods Running with defaulted requests

Q33 · ARCH · Aggregated ClusterRole (2/3 failed, last 5/5 pts, last failed 2026-09-14T16:49)

  • passed last time (5/5) - one more clean pass takes it off this list

Q37 · TSHOOT · Cluster DNS is broken (4/5 failed, last 6/6 pts, last failed 2026-09-14T16:49)

  • passed last time (6/6) - one more clean pass takes it off this list

Q38 · TSHOOT · Deployments never create pods (2/3 failed, last 7/7 pts, last failed 2026-09-13T01:06)

  • passed last time (7/7) - one more clean pass takes it off this list

Q40 · ARCH · kubeadm join token (4/4 failed, last 0/5 pts, last failed 2026-09-16T19:40)

  • ✗ join.sh contains a kubeadm join with token and CA hash
  • ✗ the token in the file exists in the cluster with TTL ~24h

Q42 · NET · Egress-only NetworkPolicy (2/3 failed, last 4/4 pts, last failed 2026-09-14T16:49)

  • passed last time (4/4) - one more clean pass takes it off this list

Q102 · ARCH · etcd restore (1/1 failed, last 2/10 pts, last failed 2026-09-19T12:27)

  • ✗ ConfigMap restore-proof-67 exists again with its original data
  • ✗ etcd uses a restored data directory (manifest changed)

Q106 · ARCH · CRD with validation and defaults (4/4 failed, last 0/7 pts, last failed 2026-09-19T12:27)

  • ✗ CRD exists, Namespaced, replicas has min/max and is required
  • ✗ good created with environment prod
  • ✗ replicas 0 is rejected and the message was saved
  • ✗ defaulting works: defaulted.spec.environment == dev

Q109 · WORK · Native sidecar with probes and an exact report (1/1 failed, last 2/8 pts, last failed 2026-09-19T12:27)

  • ✗ native sidecar: initContainer agent with restartPolicy Always
  • ✗ probes on app as specified
  • ✗ Running, shared log written by agent, grace period 5

Q112 · NET · TLS Ingress with a generated certificate (4/4 failed, last 0/7 pts, last failed 2026-09-19T12:27)

  • ✗ Secret secure.lab.local-tls is kubernetes.io/tls with CN secure.lab.local
  • ✗ Ingress web: class nginx, host, TLS secret, ssl-redirect annotation
  • ✗ fp.txt matches the secret's certificate fingerprint

Q115 · STOR · Bind the right local volume (3/3 failed, last 1/6 pts, last failed 2026-09-15T20:55)

  • ✗ PVC uses a selector and is Bound to lv-nvme
  • ✗ consumer Running on the nvme node with /data mounted

Q120 · TSHOOT · Cluster facts, exactly (3/3 failed, last 0/5 pts, last failed 2026-09-15T20:55)

  • ✗ pod-cidr and service-cidr
  • ✗ dns-ip and proxy-mode
  • ✗ cka-sim-worker3 pod CIDR

Q121 · WORK · The context's namespace (3/3 failed, last 1/6 pts, last failed 2026-09-15T20:55)

  • ✗ Deployment ledger-21 in ac-echo (the context's namespace), 2 available, owner=ac
  • ✗ Service ledger-21 port 9000 in the same namespace
  • ✗ ns.txt has the namespace

Q202 · ARCH · Helm chart with CRDs, then a custom resource (1/1 failed, last 3/8 pts, last failed 2026-09-19T12:27)

  • ✗ watchAllNamespaces=true reached the pod env
  • ✗ Ledger main-ledger has currency USD and retentionDays 30

Q204 · WORK · Which Pods get evicted first (1/1 failed, last 0/8 pts, last failed 2026-09-19T12:27)

  • ✗ evicted-first.txt lists exactly the BestEffort pods
  • ✗ api-qos.txt says Burstable
  • ✗ guaranteed.txt names orion-ledger

Q217 · TSHOOT · Inspect a container with crictl (1/1 failed, last 0/10 pts, last failed 2026-09-19T12:27)

  • ✗ Pod tiger-probe Running with both labels
  • ✗ container.txt holds a real container ID for that Pod
  • ✗ container.txt records the runtimeType
  • ✗ container.log holds the httpd startup output

Q313 · NET · Two hosts, TLS, and a default backend (1/1 failed, last 0/11 pts, last failed 2026-09-19T12:27)

  • ✗ Secret classic-tls is a TLS secret with CN classic.r700.io
  • ✗ both host rules route to the right Services on /
  • ✗ TLS covers both hosts with classic-tls
  • ✗ defaultBackend points at web-classic:80, class is nginx

Attempt matrix

Q Domain Title D1 E2 D3 D4 D5 D6 D7 D8 D9 D10
1 ARCH RBAC for a deployment bot 2/6 · · ✓ · · · · · ·
2 ARCH etcd snapshot · ✓ · · · · · · · 0/7
3 ARCH Kustomize overlay · 0/5 · · · · ✓ · · ·
4 ARCH CustomResourceDefinition · ✓ · · · · · · · ✓
5 ARCH Static pod 0/5 · · · · · ✓ · · ·
6 ARCH Certificates: expiry check and user CSR 0/6 · · 3/6 · · ✓ · · ·
7 WORK Rolling update & scaling · · · · · · · · · ·
8 WORK Multi-container pod with shared volume · 0/4 · · · · ✓ · · ✓
9 WORK Scheduling with node affinity and resources · · · · · · · · · ✓
10 WORK ConfigMap and Secret consumption · · · · · · · · · ·
11 NET NetworkPolicy · · · · · · · · · ·
12 NET NodePort Service · 0/4 · · · · ✓ · · ·
13 NET Ingress routing · 0/5 · · · · 0/5 ✓ · ✓
14 NET Cluster DNS · · · · · · · · · ·
15 STOR PersistentVolume, claim and pod · 0/6 · · · · 0/6 0/6 ✓ ·
16 STOR Default StorageClass and dynamic provisioning · 0/5 · · · · 0/5 0/5 0/5 ·
17 TSHOOT Node NotReady · 0/8 · · 4/8 4/8 ✓ · · ·
18 TSHOOT Broken deployment and service · 0/7 · · · · ✓ · · ·
19 TSHOOT CrashLoopBackOff diagnosis · 1/6 · · 1/6 1/6 4/6 ✓ · ·
20 TSHOOT Control plane component failure · 0/8 · · · · ✓ · · ·
21 ARCH Helm release install and upgrade · · · ✓ · · · · · ·
22 NET Gateway API HTTPRoute · · · · · · · · · ·
23 WORK metrics-server repair and HPA · · · · · · · · · ·
24 WORK PriorityClass · · · · · · · · · ·
25 WORK Taints and tolerations · 0/4 · · · · 0/4 0/4 ✓ ✓
26 WORK DaemonSet on every node · · · · · · · · · ·
27 WORK CronJob with a manual run · · · · · · · · · ·
28 WORK Init container prepares content · 0/4 · · · · 0/4 0/4 0/4 ·
29 WORK Immutable ConfigMap rotation · 1/4 · · · · 1/4 1/4 ✓ ·
30 NET Named ports · 0/4 · · · · 0/4 ✓ · ·
31 WORK Parallel Job · · · · · · · · · ·
32 WORK ResourceQuota and LimitRange · · · · · · · · · 0/4
33 ARCH Aggregated ClusterRole · 1/5 · · · · 1/5 ✓ · ·
34 ARCH Discover a CRD field with kubectl explain 0/4 · · ✓ · · · · · ✓
35 STOR Re-bind a Released PersistentVolume · · · · · · · · · ·
36 STOR Data survives the pod · · · · · · · · · ·
37 TSHOOT Cluster DNS is broken · 1/6 · · 1/6 1/6 1/6 ✓ · ·
38 TSHOOT Deployments never create pods · · · · 0/7 0/7 ✓ · · ·
39 TSHOOT kubelet misconfiguration · · · · 4/7 4/7 0/7 ✓ · ✓
40 ARCH kubeadm join token · 0/5 · · · · 0/5 0/5 0/5 ·
41 ARCH Component versions 0/4 · · ✓ · · · · · ·
42 NET Egress-only NetworkPolicy · 0/4 · · · · 0/4 ✓ · ·
43 NET Headless and ExternalName services · · · · · · · · · ·
101 ARCH Exact RBAC with an existing over-grant · · · · · · · · · ·
102 ARCH etcd restore · · · · · · · · · 2/10
103 ARCH Static pod on a relocated manifest path · · · · · · · · · ·
104 ARCH User onboarding to a working kubeconfig · · · · · · · · · ·
105 ARCH Kustomize with generators and patches · · · · · · · · · ·
106 ARCH CRD with validation and defaults · · 0/7 · · · 0/7 0/7 · 0/7
107 WORK Spread, tolerate, prioritise — under a quota · · · · · · · · · ·
108 WORK Rollback to a specific revision, then pause · · · · · · · · · ·
109 WORK Native sidecar with probes and an exact report · · · · · · · · · 2/8
110 WORK Namespace audit to exact files · · · · · · · · · ·
111 NET Zero-trust namespace · · · · · · · · · ·
112 NET TLS Ingress with a generated certificate · · 0/7 · · · 0/7 0/7 · 0/7
113 NET Gateway API canary with header match · · · · · · · · · ·
114 NET DNS down: three faults · · · · · · · · · ·
115 STOR Bind the right local volume · · 1/6 · · · 1/6 1/6 · ·
116 STOR Migrate data between claims · · · · · · · · · ·
117 TSHOOT Worker node: three things wrong · · · · · · · · · ·
118 TSHOOT Two control-plane components down · · · · · · · · · ·
119 TSHOOT Application down for four reasons · · · · · · · · · ·
120 TSHOOT Cluster facts, exactly · · 0/5 · · · 0/5 0/5 · ·
121 WORK The context's namespace · · 1/6 · · · 1/6 1/6 · ·
122 ARCH Renew control-plane certificates · · · · · · · · · ·
123 TSHOOT Nothing works: kube-apiserver itself is down · · · · · · · · · ·
124 ARCH Prepare a node join without shell access to the control plane · · · · · · · · · ·
201 ARCH kubeconfig forensics · · · · · · · · · ·
202 ARCH Helm chart with CRDs, then a custom resource · · · · · · · · · 3/8
203 WORK Find the controller, then scale it · · · · · · · · · ·
204 WORK Which Pods get evicted first · · · · · · · · · 0/8
205 ARCH Kustomize: drop a ConfigMap, add an HPA, override in prod · · · · · · · · · ·
206 STOR PV, PVC and a Deployment that mounts it · · · · · · · · · ·
207 TSHOOT Resource usage scripts · · · · · · · · · ·
208 ARCH Drain a node for maintenance · · · · · · · · · ·
209 ARCH Query the API from inside a Pod · · · · · · · · · ·
210 ARCH ServiceAccount limited to two resources · · · · · · · · · ·
211 WORK DaemonSet on every node · · · · · · · · · ·
212 WORK One Pod per node, on purpose · · · · · · · · · ·
213 NET Convert an Ingress to Gateway API, then split on a header · · · · · · · · · ·
214 ARCH Certificate expiry, two ways · · · · · · · · · ·
215 NET Egress policy with paired destinations · · · · · · · · · ·
216 NET CoreDNS: back up, extend, verify · · · · · · · · · ·
217 TSHOOT Inspect a container with crictl · · · · · · · · · 0/10
301 ARCH etcd configuration facts · · · · · · · · · ✓
302 NET Service rules on the node · · · · · · · · · ·
303 NET A second Service CIDR · · · · · · · · · ·
304 ARCH Bound tokens versus legacy tokens · · · · · · · · · ·
305 WORK Schedule without the scheduler · · · · · · · · · ·
306 STOR Grow a volume in place · · · · · · · · · ·
307 TSHOOT Node accepts nothing new · · · · · · · · · ·
308 ARCH API resource reference card · · · · · · · · · ·
309 WORK A PodDisruptionBudget that blocks maintenance · · · · · · · · · ·
310 NET Route to something outside the cluster · · · · · · · · · ·
311 ARCH Image inventory across the cluster · · · · · · · · · ·
312 WORK A Job that fails, then one that doesn't · · · · · · · · · ·
313 NET Two hosts, TLS, and a default backend · · · · · · · · · 0/11
314 TSHOOT A static pod that never starts · · · · · · · · · ·
315 STOR Keep the data when the claim goes · · · · · · · · · ·
316 ARCH Plan a control-plane upgrade · · · · · · · · · ·
317 TSHOOT Certificates stop being issued · · · · · · · · · ·
401 STOR Provision geo-fence persistent storage · · · · · · · · · ·
402 ARCH Render a chart, then install it · · · · · · · · · ·
403 TSHOOT Fix the driver onboarding app · · · · · · · · · ·
404 NET Expose and verify the dispatch API · · · · · · · · · ·
405 STOR Migrate ride history to a Retain volume · · · · · · · · · ·
406 TSHOOT Fix ETA service connectivity · · · · · · · · · ·
407 NET Fleet dashboard canary with Gateway API · · · · · · · · · ·
408 ARCH Cluster-wide read access for the auth team · · · · · · · · · ·
409 WORK Add an init container to the trip logger · · · · · · · · · ·
410 NET Audit the CNI, then lock a namespace down · · · · · · · · · ·
411 WORK Priority for the rider support portal · · · · · · · · · ·
412 WORK Surge pricing configuration · · · · · · · · · ·
413 ARCH Plan the control-plane upgrade · · · · · · · · · ·
414 TSHOOT Fix the fare calculation pods · · · · · · · · · ·
415 WORK Autoscale the route planner on memory · · · · · · · · · ·
416 NET NetworkPolicy for the safety monitor · · · · · · · · · ·
417 ARCH Enforce TLS 1.3 on the booking portal · · · · · · · · · ·
418 TSHOOT Investigate vehicle tracker health · · · · · · · · · ·

E = full exam, D = drill, · = not in that session, n/m = partial credit.