Free study guide · DevOps
How to pass the Certified Kubernetes Application Developer (CKAD)
What the exam covers, how to plan your study, and how to read its questions. From the CertLumen course for this exam, kept up to date with the official exam guide.
- Format
- About 15–20 hands-on tasks in a terminal
- Time
- 120 minutes
- Passing score
- 66% or above
- Exam fee
- USD 445 (exam only; bundles with THRIVE-ONE or the LFD259 course cost more), per the Linux Foundation page in November 2026
- Valid for
- 2 years; renew by retaking and passing the current exam before it expires (CKAD earned before April 1, 2024 is valid for 3 years). One free retake is included and the exam must be taken within 12 months of purchase
- Delivery
- Online, proctored, performance-based: tasks solved at a command line on live Kubernetes clusters
What the exam covers
A study plan that works
The default path for developers who know Linux and have used kubectl before. It covers all 21 lessons and all 10 labs in order, with a section drill after each section and daily flashcards. Mock Exams 1 and 2 come on days 13 and 14, with Mocks 3 and 4 as optional extra practice. The practice exams are multiple-choice, so also use the labs and your two killer.sh sessions for the real, timed, terminal experience. Section 4 (Environment, Configuration and Security) is worth 25% and gets the most days. Schedule the real exam once you reach 80% on the mocks and finish a killer.sh session with time to spare. Plan on about 1–2 hours a day.
| Day | Focus | Time |
|---|---|---|
| 1 | Kick-off: the exam format and container images | 90 min |
| 2 | Workload resources: Deployment, StatefulSet, DaemonSet, Job, CronJob | 100 min |
| 3 | Multi-container Pods and volumes, then the c1 drill | 110 min |
| 4 | Deployment strategies and rolling updates | 100 min |
| 5 | Helm and Kustomize, then the c2 drill | 110 min |
| 6 | API deprecations and probes | 90 min |
| 7 | Monitoring, logs and debugging, then the c3 drill | 110 min |
| 8 | CRDs, authentication, RBAC and admission | 100 min |
| 9 | Requests, limits, quotas and ConfigMaps/Secrets | 110 min |
| 10 | ServiceAccounts and security contexts, then the c4 drill | 110 min |
| 11 | NetworkPolicies and Services | 100 min |
| 12 | Ingress, then the c5 drill | 90 min |
| 13 | Weak areas and Mock Exam 1 | 120 min |
| 14 | Mock Exam 2 and exam readiness | 120 min |
Exam strategy
How the exam works
The CKAD is a performance-based exam: you solve tasks at a command line on live Kubernetes clusters, not multiple-choice questions. The Linux Foundation's tips page says to expect 15 to 20 tasks in 2 hours. A proctor watches you through audio, video and screen sharing. The score report is emailed within 24 hours, normally, and you need 66% to pass. Each task has a weight shown with it, and most tasks can earn partial credit, so a half-finished task is worth more than a skipped one.
| Fact | Detail (Linux Foundation pages, November 2026) |
|---|---|
| Format | Performance-based tasks at a Linux command line; about 15 to 20 tasks |
| Duration | 2 hours |
| Passing score | 66% |
| Kubernetes version | The environment runs Kubernetes v1.37 and is updated to each new minor version about 4 to 8 weeks after its release |
| Domains and weights | Application Design and Build 20%, Application Deployment 20%, Observability and Maintenance 15%, Environment, Configuration and Security 25%, Services and Networking 20% |
| Delivery | Online, proctored through PSI (Bridge). You work in a remote desktop with a terminal and a browser |
| Allowed resources | kubernetes.io/docs, kubernetes.io/blog and helm.sh/docs (plus pages linked from the task), and the site's own search, but no external search results. Gateway API docs are for the CKA only |
| Price | USD 445 for the exam only |
| Validity | 2 years (certifications earned before April 1, 2024 last 3 years). Renew by passing the current exam |
| Retake and window | One free retake is included; use the exam within 12 months of purchase |
| Simulator | Two killer.sh sessions, 36 hours each, 17 graded tasks |
| Languages | English, Simplified Chinese and Japanese |
The real exam has no answer options. This course's four mock exams are multiple-choice (some multiple-select) because the site can only grade that, so they train your knowledge and speed of recall. The labs and the two killer.sh sessions train the terminal work. Do both: pass the mocks and finish a killer.sh run in time.
The terminal you will use
You work in a remote desktop provided by PSI. Each task starts with an infobox that tells you which cluster context to use and which host to ssh to; run exit afterwards to return to the base system. kubectl with the k alias and bash completion, plus yq, curl, wget and man, are installed on the task hosts. You cannot nest SSH. In the Linux terminal copy with Ctrl+Shift+C and paste with Ctrl+Shift+V. The INSERT key is prohibited, so use i and Esc in vim.
Each task names its own cluster or context, for example kubectl config use-context k8s-c2. Running the right command on the wrong cluster scores zero for that task. Copy the context command from the task box and run it before anything else, and check the namespace the task names.
Pacing: 2 hours, about 17 tasks
Average about 6 to 7 minutes a task, but they are not equal. Weights run from about 2% to 8%. Read all the weights quickly at the start, do the cheap high-value ones first, flag long tasks and come back.
| Time | What to do |
|---|---|
| First 5 minutes | Set up your shell, skim the task list and weights |
| Next 80 minutes | Work the tasks in order of value per minute; leave anything that will take more than 10 minutes |
| Next 25 minutes | Return to the flagged tasks |
| Last 10 minutes | Verify: kubectl get for every object you created, check namespaces, labels and names |
The k alias is already there on the task hosts, but the exports are not, and setting them costs 20 seconds. now makes pod deletes instant; use it only on Pods you created, not on controllers.
Speed rules
- Generate, don't type:
k run web --image=nginx $do > p.yaml,k create deploy web --image=nginx --replicas=3 $do,k create job,k create cronjob,k create role,k create rolebinding,k create ingress,k expose. - Use
kubectl explain pod.spec.containers.securityContext --recursivefor field names before you open the docs. - When you need YAML that kubectl cannot generate (probes, volumes, NetworkPolicy, PV, PVC), copy it from kubernetes.io/docs, paste it into a file and edit. Search with the docs' search box and open the concept or task page.
- Prefer
k editfor small changes to live objects andk replace --force -ffor Pods whose fields are immutable. - Always verify:
k get,k describe,k logsandk rollout statusafter the change.
How to read a task
Tasks are short, precise and literal. Names, namespaces, labels, ports and file paths in the task must be matched exactly: a Pod called web-app is not webapp. Underline the verbs (create, expose, scale, fix, save to a file) and the nouns that give you the resource type (every node, once a day, only from, sidecar).
| Wording in a task | Think |
|---|---|
| every node, one Pod per node | DaemonSet |
| stable network identity, own disk each | StatefulSet with a headless Service and volumeClaimTemplates |
| run to completion / every night at 02:00 | Job / CronJob |
| two versions never at once | Deployment strategy.type: Recreate |
| about 20% of traffic goes to the new version | Canary: a second Deployment behind the same Service selector |
| restart the container if it hangs / only send traffic when ready / slow start | liveness / readiness / startup probe |
| only X can reach Y | NetworkPolicy |
| by host name and path | Ingress |
| without recreating the Pod, change CPU | In-place resize with --subresource resize |
Traps that cost points on the CKAD
- Wrong namespace or context. The most common avoidable failure. Use
-nexplicitly or set the namespace on the context. - Selector versus labels. A Service, Deployment or NetworkPolicy selects Pod labels from the template, not the metadata of the Deployment.
commandversusargs.commandreplaces ENTRYPOINT andargsreplaces CMD.- Immutable fields. Deployment selectors, Pod specs, RoleBinding
roleRef, and a Pod'sserviceAccountNamecannot be changed in place. - ConfigMap and Secret updates. Env variables and
subPathmounts never refresh; volume mounts refresh eventually. runAsNonRootneeds a numeric user when the image runs as root.- Default-deny egress also blocks DNS.
- AND versus OR in NetworkPolicy is decided by whether the selectors share a list item.
- Helm needs
-n.helm listshows only the current namespace; use-Ato find the release. - Typos in indentation. Run
kubectl apply --dry-run=serverork apply -fand read the error before moving on.
kubectl apply succeeding does not mean the Pod runs. A Deployment with a bad image applies fine. Always check k get pods and k rollout status, and read k describe if a Pod is not Running.
Using the documentation well
You may keep one browser with kubernetes.io/docs, kubernetes.io/blog and helm.sh/docs. Know where things live so you never browse: the Tasks section has copy-ready YAML for probes, volumes, Pod security, ConfigMaps and Secrets, ServiceAccounts and Services; Concepts has NetworkPolicy, Ingress, PV and PVC examples; the kubectl Quick Reference has jsonpath, rollout and top syntax. Search for the object name plus 'task' or 'concept' and open the first kubernetes.io hit.
What to do in the last week
- Take Mock Exam 3 and Mock Exam 4 and redo anything below 80%.
- Run your second killer.sh session as a real timed 2-hour attempt; the questions differ from the first session, and you should compare your time per task.
- Re-do every lab with the lesson closed.
- Write these from memory: a hardened Pod, a NetworkPolicy with AND selectors, a PV/PVC/Pod trio, a CronJob with
concurrencyPolicy, an Ingress with TLS. - Run the PSI system check on the exam computer and fix the room and desk.
- The evening before, review the cheat sheet and keyword cues only.
Words that point to the answer
Phrases in a question that usually point to one answer. The course has the full list.
| When the question says | Think of |
|---|---|
| Run one Pod on every node, such as a log collector | DaemonSet |
Each replica needs a stable name (db-0) and its own disk | StatefulSet with a headless Service and volumeClaimTemplates |
| Run a task once to completion and retry on failure | Job |
| Run a task every night, never overlap runs | CronJob with concurrencyPolicy: Forbid |
| Wait for a database before the app starts | Init container |
| Ship the app's log file to a collector for the life of the Pod | Sidecar: init container with restartPolicy: Always |
| The app talks to localhost and something else picks the real server | Ambassador pattern |
| Convert output into the format a monitoring system expects | Adapter pattern |
| Data must survive Pod deletion | PersistentVolumeClaim |
| Scratch space shared between containers in one Pod | emptyDir |
Revise from the cheat sheet
The course's cheat sheet has a page for each of these:
- Design and build: images, workloads, Pods and volumes
- Deployment: strategies, rolling updates, Helm and Kustomize
- Observability: deprecations, probes, monitoring and debugging
- Environment, configuration and security
- Services and networking
Practise with the real exam's mix
266 exam-style questions, 4 timed practice exams, flashcards and an AI tutor.