Free study guide · DevOps
How to pass the Certified Kubernetes Administrator (CKA)
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%
- Exam fee
- USD 445 (exam only; bundles cost more), one free retake included; two killer.sh simulator sessions included (36 hours each, 17 tasks)
- Valid for
- 2 years; renew by retaking and passing the current exam before expiry (earning or renewing CKS from 18 June 2026 extends CKA to match)
- Delivery
- Online proctored; performance-based tasks solved in a terminal on live Kubernetes clusters
What the exam covers
A study plan that works
The default path. It covers all 20 lessons and all 10 labs in order, with a section drill after each section and flashcards on most days. Troubleshooting (30%) and cluster setup (25%) get the most days. Mock exams and the first killer.sh session fill the last three days, as the real exam is hands-on and wants stamina. Lab days are longer than lesson days: the kubeadm lab alone is about two hours. Plan on about 1.5–3 hours a day.
| Day | Focus | Time |
|---|---|---|
| 1 | RBAC and building a cluster with kubeadm | 110 min |
| 2 | Lifecycle, high availability and the kubeadm lab | 175 min |
| 3 | Helm, Kustomize, CRDs and operators | 170 min |
| 4 | k1 drill, Deployments and configuration | 170 min |
| 5 | Autoscaling, self-healing and scheduling | 190 min |
| 6 | Pod connectivity, network policies, Services | 165 min |
| 7 | Gateway API, Ingress and CoreDNS | 195 min |
| 8 | Storage | 210 min |
| 9 | Troubleshooting nodes and the control plane | 160 min |
| 10 | Monitoring and logs | 155 min |
| 11 | Services and networking faults, then the k5 drill | 140 min |
| 12 | Mock Exam 1 and review | 240 min |
| 13 | Mock Exam 2 and killer.sh session 1 | 300 min |
| 14 | Mock Exams 3 and 4, final review and exam day | 300 min |
Exam strategy
How the exam works
The CKA is a hands-on, performance-based exam. You do not pick answers: you sit at a Linux remote desktop with a terminal and solve a series of tasks on live Kubernetes clusters, then an automatic grader checks the state of the clusters. It is delivered online and proctored by PSI. The exam environment follows the current Kubernetes minor version (v1.37 today); the Linux Foundation updates it within about four to eight weeks of a new release.
| Fact | Detail (Linux Foundation CKA page, exam FAQ and tips pages) |
|---|---|
| Name | Certified Kubernetes Administrator (CKA), from the Linux Foundation and the CNCF |
| Format | Performance-based tasks solved in a terminal on live Kubernetes clusters; no multiple choice |
| Time limit | 2 hours |
| Number of tasks | The tips page says 15 to 20 tasks. Tasks are not equal in weight |
| Passing score | 66% |
| Curriculum | CKA Curriculum v1.37 (github.com/cncf/curriculum); exam environment on Kubernetes v1.37 |
| Domains | Troubleshooting 30%, Cluster Architecture, Installation and Configuration 25%, Services and Networking 20%, Workloads and Scheduling 15%, Storage 10% |
| Fee | USD 445 for the exam alone, with one free retake included and two killer.sh sessions |
| Validity | 2 years. Renew by passing the current exam before it expires; earning or renewing CKS on or after 18 June 2026 extends your CKA to match |
| Languages | Tasks in English, Simplified Chinese and Japanese (the terminal and proctor chat stay in English) |
| Results | Scored automatically; the score report is emailed within 24 hours |
| Prerequisites | None. The Linux Foundation rates it intermediate |
| Booking window | 12 months from purchase to take the exam and any retake |
The 40-question mock exams test what you know. The labs and your own practice clusters train the speed. Do both: most candidates who fail know the material but run out of time typing YAML, hunting for field names or fixing the wrong cluster. Treat each lab as a speed drill and redo it without notes.
What you get at the keyboard
- A remote desktop opened inside the PSI Secure Browser, with a terminal, a Firefox window for the allowed documentation and a VSCodium editor (extensions are disabled).
kubectlwith thekalias and bash completion,yq,curl,wgetandmanpages are already installed on the work hosts.- Each task names the cluster or host to use. For node work you
ssh <node>, usesudo -ifor root, andexitto come back to thebasesystem. Nested SSH does not work and you must not rebootbase. - A timer shows the minutes left, with alerts at 30, 15 and 5 minutes. Pause does not stop it, and a lost connection does not give time back.
- Copy and paste in the terminal use Ctrl+Shift+C and Ctrl+Shift+V. The Insert key is disabled, so in
vipressito insert andEscto leave insert mode.
The documentation you may open
You may use only the sites in the Linux Foundation *Resources Allowed* document, in the Firefox window inside the exam. For the CKA they are the Kubernetes documentation (kubernetes.io/docs) and blog (kubernetes.io/blog), the Helm documentation (helm.sh/docs) and the Gateway API documentation (gateway-api.sigs.k8s.io, CKA only), plus the task-specific links in each task's Quick Reference box. Searching inside kubernetes.io/docs is allowed, but you must not open external search results. Documentation installed with the operating system (under /usr/share) is allowed too.
You will have the docs, so memorising every field is a waste. Practise getting to the right page in seconds: the kubectl quick reference, the kubeadm upgrade page, the etcd backup page, the NetworkPolicy examples, the PV and PVC examples, and kubectl explain <resource>.spec in the terminal. A YAML snippet copied from the docs and edited is faster than one typed from memory.
Pacing
With 15 to 20 tasks in 120 minutes you have about six to eight minutes per task on average, and tasks vary: a RBAC task may take two minutes, a broken control plane fifteen. The weights are the lever. Do the quick tasks first, bank those points, and return to the long ones.
- First 5 minutes: confirm your tools work (
k get nodes), set up aliases andvimsettings, and skim the task list if the UI lets you. - First pass (about 70 minutes): take tasks in order, skip any that need more than ten minutes, and write the skipped task numbers in a scratch file on the remote desktop. Notes on paper or devices are not allowed.
- Second pass (about 35 minutes): return to the skipped tasks, highest weight first.
- Last 10 minutes: re-check each task you finished: right cluster, right namespace, object exists, Pods Running. Fix any partial work.
k run, k create deployment, k expose, k create role, k create secret, k set image, k scale, k autoscale, k taint and k label write the object for you. Add $do > file.yaml to start a manifest, edit it, then k apply -f. Typing a Deployment from scratch costs a minute you do not have.
Reading a task
- Cluster or context first: if a task names a cluster, context or host, switch before you do anything (
kubectl config use-context <name>, orssh <node>). Doing the right fix on the wrong cluster scores zero. - Namespace: note it, and add
-n <ns>to every command, or set it withkubectl config set-context --current --namespace=<ns>and set it back afterwards. - Exact names: use the object, file, label, port and path names from the task, character for character. The grader looks for those.
- What is checked: tasks end in a state (a Pod Running, a file with specific content, a Service reachable). Verify that state with a command before you move on.
- Files to write: save outputs where the task says, for example
kubectl logs ... > /opt/out.log. Check the file exists and is not empty. - Do not do extra: deleting or changing objects the task did not mention can break another task's check.
What each domain really tests
| Domain (weight) | Typical task | Speed tip |
|---|---|---|
| Troubleshooting (30%) | A NotReady node, a stopped control-plane component, a Service with no endpoints, a failing Pod, logs to a file | Work outside in: nodes, describe, then ssh and journalctl -u kubelet. Fix the manifest in /etc/kubernetes/manifests, not the mirror Pod |
| Cluster setup (25%) | RBAC for a user or ServiceAccount, kubeadm upgrade, etcd snapshot and restore, Helm or Kustomize install, CRDs | Copy the kubeadm and etcd commands from the docs, then edit versions and paths |
| Services and networking (20%) | NetworkPolicy, Service types, Ingress or HTTPRoute, CoreDNS Corefile | Use kubectl create ingress and doc examples; read the dash and indent rules in NetworkPolicy |
| Workloads and scheduling (15%) | Rolling update and rollback, ConfigMap or Secret into a Pod, HPA, taints, tolerations, affinity | rollout undo, set image, autoscale and taint are one-liners |
| Storage (10%) | StorageClass, PV and PVC binding, reclaim policy, mounting a claim in a Pod | Check storageClassName, size and access modes on both sides of a bind |
Traps typical of this exam
- Wrong context, host or namespace. The most expensive mistake and it costs a whole task. Look at the prompt,
kubectl config current-contextandhostnamebefore every task. - Editing the mirror Pod. Deleting
kube-apiserver-cp1does nothing: the file in/etc/kubernetes/manifestsis the source. The kubelet reloads it in seconds. - Forgetting to leave
ssh. Runexitback to the base host before the nextkubectltask, or you runkubectlwhere it has no kubeconfig. - RoleBinding with a ClusterRole is still namespaced. Only a ClusterRoleBinding grants cluster-wide access.
storageClassNameomitted versus"". Omitted means the default class; empty means none, which is how you bind to a pre-made PV.- etcd restore needs
etcdutl snapshot restore --data-dir <new dir>and then the etcd manifest'shostPathpointed at the new directory. - Upgrading in the wrong order: control plane first,
upgrade applyonce,upgrade nodeelsewhere, drain before kubelet, uncordon after. drainflags:--ignore-daemonsetsis almost always needed,--delete-emptydir-datawhen emptyDir Pods run.- A NetworkPolicy dash:
namespaceSelectorandpodSelectorin one list item are AND, in two items OR. A default-deny egress policy also blocks DNS. - Probes: readiness removes a Pod from Service endpoints, liveness restarts the container, startup protects slow starters.
- Pending Pods: no events at all points to a dead scheduler;
FailedSchedulingmeans the scheduler works and found no fit. - Leaving files or Pods in a broken state while you try fixes. Undo experiments that did not work.
A kubectl apply that prints created only proves the API accepted the object. A Deployment can exist with zero Pods Ready, a Service with no endpoints and a PVC stuck Pending. Run k get, k describe or a wget from a throwaway Pod before you call a task finished.
Debugging tactics when a command fails
- Read the error line:
forbiddenis RBAC,no matches for kindis a missing CRD or wrong apiVersion,connection refusedis a down component,not foundis a wrong name or namespace. kubectl explain <kind>.spec --recursive | lesslists valid fields;kubectl api-resourceslists kinds and short names.kubectl describeshows Events at the bottom, where most causes are written.kubectl get events -A --sort-by=.lastTimestamp | tailshows what just happened cluster-wide.- When
kubectlitself is down, drop to the node:systemctl status kubelet,journalctl -u kubelet,crictl ps -a,crictl logs.
Using this course
| Resource | Use it for |
|---|---|
| Lessons and cheat sheet | Learn each domain and keep the syntax tables to revise from |
| Section drills (about 240 questions across five sections) | Check recall and the scenario reasoning behind a command |
| Labs (10) | Type the commands on a local kind or minikube cluster, and on two VMs for kubeadm |
| Mock Exams 1 to 4 (40 questions, 120 minutes each) | Practise reading scenarios and elimination under time |
| killer.sh (two sessions of 17 tasks, 36 hours each) | The only practice that feels like the real, hands-on exam; start a session only when you can give it two clear hours |
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 |
|---|---|
| A user must read Pods only in one namespace | Role plus RoleBinding in that namespace (kubectl create role and create rolebinding) |
Reuse the built-in view or edit permissions in several namespaces | A RoleBinding that references the ClusterRole in each namespace |
A user with get pods cannot run kubectl logs or exec | Add the pods/log or pods/exec sub-resource to the rule |
| Check whether a user or ServiceAccount may do something | kubectl auth can-i <verb> <resource> --as <user> (add --list for all rules) |
| A new node must join but the token is old | kubeadm token create --print-join-command on the control plane |
Nodes are NotReady and CoreDNS Pods are Pending right after kubeadm init | Install a CNI plugin |
| Upgrade a kubeadm cluster from 1.35 to 1.37 | Upgrade to 1.36 first, then 1.37 |
| Upgrade the second control-plane node or a worker | kubeadm upgrade node |
| Back up etcd on a kubeadm cluster | etcdctl snapshot save with --endpoints, --cacert, --cert, --key |
| Restore an etcd snapshot | etcdutl snapshot restore --data-dir <new dir>, then point the etcd static Pod hostPath at it |
Revise from the cheat sheet
The course's cheat sheet has a page for each of these:
- Cluster architecture, installation and configuration
- Workloads and scheduling
- Services and networking
- Storage
- Troubleshooting
Practise with the real exam's mix
296 exam-style questions, 4 timed practice exams, flashcards and an AI tutor.