CKA is a hands-on, performance-based exam: concepts alone are not enough; lots of lab practice is needed.
Course flow: core concepts (with analogies) → build a cluster from scratch to see how the components fit together → end-to-end validation tests and troubleshooting.
Context: Kubernetes is the industry standard for production distributed apps; Indeed data showed Kubernetes job searches up ~173% YoY.
Area
Covered
Why it matters
Fundamentals
API objects, controllers, scheduling, networking
Basis for operations and the exam
Cluster design & setup
Control plane + worker nodes, kubeadm, TLS, etcd basics
Each lab matches a lesson. Tasks are challenges: inspect the environment, find the information, then apply the right command or config. Answers are auto-validated with instant feedback.
Incremental hints and full solutions are available when you are stuck.
The prompt is controlplane ~ ➜, so you work on the control-plane node.
kubectl get pod # "No resources found in default namespace."kubectl run nginx --image=nginx # creates a single Pod: pod/nginx createdkubectl get pod # NAME nginx READY 1/1 STATUS Running
Labels: tier=busyboxStatus: RunningIP: 10.22.0.10Controlled By: ReplicaSet/newpods # owner: the Pod was created by a ReplicaSetContainers: busybox: Container ID: containerd://51bf... # runtime prefix: containerd, not docker Image: busybox Image ID: docker.io/library/busybox@sha256:fd7d... # short image name resolved to docker.io/library/<img>, pinned by digest Command: sleep 1000 State: Running Ready: True Restart Count: 0 Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bqjhg (ro)Conditions: Initialized / Ready / ContainersReady / PodScheduled = TrueVolumes: kube-api-access-bqjhg: Type: Projected # auto-injected ServiceAccount token volume TokenExpirationSeconds: 3607 # time-bound token
Controlled By shows the owning controller (here a ReplicaSet).
Conditions in the sample: PodScheduled → Initialized → ContainersReady → Ready (lifecycle order).
[!NOTE]
Beyond the course:
kubectl run now creates only a Pod. The old --generator flag is gone, so use kubectl create deployment to get a Deployment.
On current clusters the runtime is containerd/CRI-O (dockershim was removed in v1.24), so on nodes you debug containers with crictl, not docker.
Projected, time-bound SA tokens (the kube-api-access-* volume above) have been the default since v1.21/1.22. Since v1.24, legacy token Secrets are no longer auto-created; use kubectl create token <sa> for a token on demand.
Controlled By: use it to work out why a deleted Pod keeps coming back (its controller recreates it; delete/scale the owner instead).
Pods get (unless automountServiceAccountToken: false) a projected kube-api-access-* volume mounted read-only at /var/run/secrets/kubernetes.io/serviceaccount. It holds the SA token, ca.crt and namespace.
Since v1.29 a fifth condition, PodReadyToStartContainers (sandbox + networking ready), is also shown by default.
[!CAUTION]
Correction: the course gives the exam length as three hours. The CKA has been 2 hours since the Sept 2020 revision, with roughly 15–20 tasks and a passing score of 66%. Confirm the current figures in the Candidate Handbook.
[!NOTE]
Beyond the course: current CKA facts (verify against the handbook, because they change):
Curriculum weights since the Feb 2025 revision: Troubleshooting 30%, Cluster Architecture/Installation & Configuration 25%, Services & Networking 20%, Workloads & Scheduling 15%, Storage 10%. Helm, Kustomize, Gateway API, CRDs/operators and CNI/CSI/CRI are explicitly in scope.
The exam runs in a remote Linux desktop via the PSI Secure Browser. The docs are opened in the browser inside that desktop, and the allowed list is in the handbook (kubernetes.io/docs, kubernetes.io/blog and their subdomains, among others). In the terminal, copy/paste is Ctrl+Shift+C / Ctrl+Shift+V.
Each task names the host/context to use: run the given ssh <host> (current exam) or kubectl config use-context <ctx>before starting it. Working on the wrong cluster scores zero for that task.
The purchase includes one free retake and two killer.sh simulator sessions.
Practise often on real clusters: minikube, k3s, kind, or a cloud-managed cluster. Have at least one local and one cloud-managed cluster.
Learn to find things in kubernetes.io/docs fast using the table of contents, search and anchor links.
Time management: skip and flag slow tasks, then come back to them.
Memorise common kubectl commands, YAML snippets, and label/selector syntax.
Scripts are fine for practice. Check the exam rules before relying on any automation.
Practise under time limits. Get fast at editing YAML and validating manifests.
# Core commands the course says to have in muscle memorykubectl get <resource>kubectl apply -f <file>.yamlkubectl describe <resource> <name>kubectl edit <resource> <name>kubectl logs <pod>kubectl exec -it <pod> -- sh
[!NOTE]
Beyond the course: generate YAML instead of typing it, and validate before you apply.
alias k=kubectl # usually pre-set in the exam env, with completionexport do="--dry-run=client -o yaml" # e.g. k run web --image=nginx $do > pod.yamlkubectl create deployment web --image=nginx --replicas=3 --dry-run=client -o yaml > deploy.yamlkubectl explain pod.spec.containers --recursive # field reference without leaving the terminalkubectl apply -f deploy.yaml --dry-run=server # server-side validation, nothing persisted