The Certified Kubernetes Application Developer (CKAD) exam tests your ability to design, build, and deploy cloud-native applications on Kubernetes. If you’re a developer who works with containers, this certification validates a skill set that’s becoming essential across the industry.
The good news: CKAD is more focused than CKA. The bad news: it’s faster-paced, and you need to be quick with kubectl. Here’s how to prepare effectively.
CKAD at a Glance
- Format: Performance-based (hands-on tasks)
- Duration: 2 hours
- Passing score: 66%
- Open book: Official Kubernetes docs are accessible
- Focus: Application lifecycle, not cluster administration
Exam Domains
| Domain | Weight |
|---|---|
| Application Design and Build | 20% |
| Application Deployment | 20% |
| Application Observability and Maintenance | 15% |
| Application Environment, Configuration and Security | 25% |
| Services and Networking | 20% |
The CKAD is developer-centric. You won’t be asked to install clusters or manage etcd backups. Instead, you’ll be creating pods, deployments, jobs, configmaps, secrets, network policies, and more — all under time pressure.
The Speed Problem
Here’s what catches most CKAD candidates off guard: you’ll have roughly 5-6 minutes per question. That’s not a lot of time to read the question, write YAML, apply it, and verify it works.
This means speed isn’t a nice-to-have — it’s a requirement. Every second you save on boilerplate is a second you can spend on the tricky parts.
Speed Technique 1: Imperative Commands
Never write YAML from scratch during the exam if you can avoid it:
# Create a pod
kubectl run web --image=nginx --port=80
# Create a deployment
kubectl create deployment api --image=node:18 --replicas=3
# Create a service
kubectl expose deployment api --port=3000 --target-port=3000
# Create a configmap
kubectl create configmap app-config --from-literal=ENV=production --from-literal=LOG_LEVEL=info
# Create a secret
kubectl create secret generic db-creds --from-literal=password=s3cret
# Create a job
kubectl create job backup --image=busybox -- /bin/sh -c "echo backup done"
# Create a cronjob
kubectl create cronjob cleanup --image=busybox --schedule="*/5 * * * *" -- /bin/sh -c "echo cleaned"
Speed Technique 2: Generate and Edit
When you need custom YAML, generate a base template and modify it:
# Generate pod YAML without creating it
kubectl run web --image=nginx --port=80 --dry-run=client -o yaml > pod.yaml
# Edit and apply
vi pod.yaml
kubectl apply -f pod.yaml
Speed Technique 3: Aliases
Set these up at the start of every practice session (and the exam):
alias k=kubectl
export do='--dry-run=client -o yaml'
# Now you can do:
k run web --image=nginx $do > pod.yaml
Core Topics Deep Dive
Application Design and Build (20%)
Multi-container Pods are a staple CKAD topic. Know the three patterns:
apiVersion: v1
kind: Pod
metadata:
name: multi-container
spec:
containers:
- name: app
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: shared
mountPath: /usr/share/nginx/html
- name: sidecar
image: busybox
command: ["/bin/sh", "-c", "while true; do echo $(date) > /data/index.html; sleep 5; done"]
volumeMounts:
- name: shared
mountPath: /data
volumes:
- name: shared
emptyDir: {}
Init containers run before your main containers start:
initContainers:
- name: init-db
image: busybox
command: ['sh', '-c', 'until nslookup db-service; do echo waiting; sleep 2; done']
Application Environment and Configuration (25%)
This is the highest-weighted domain. Master these:
ConfigMaps and Secrets in Pods:
spec:
containers:
- name: app
image: myapp
envFrom:
- configMapRef:
name: app-config
- secretRef:
name: app-secrets
env:
- name: SPECIFIC_KEY
valueFrom:
configMapKeyRef:
name: app-config
key: database_url
Security Contexts:
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
containers:
- name: app
image: myapp
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
Resource Requests and Limits:
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
ServiceAccounts:
kubectl create serviceaccount app-sa
kubectl set serviceaccount deployment/web app-sa
Services and Networking (20%)
Network Policies frequently appear. Practice writing them fluently:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend
namespace: production
spec:
podSelector:
matchLabels:
app: api
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
Ingress resources:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
Observability and Maintenance (15%)
Know how to debug applications quickly:
# Check pod status and events
kubectl describe pod failing-pod
# View logs
kubectl logs pod-name
kubectl logs pod-name -c container-name # specific container
kubectl logs pod-name --previous # previous crash
# Readiness and liveness probes
kubectl get pods # check READY column
# Resource usage
kubectl top pods
kubectl top nodes
Hands-On Practice Strategy
Start with CK-X
CK-X is a free, open-source simulator built for exactly this kind of practice. It runs real Kubernetes clusters locally and includes CKAD-specific labs.
# Quick install
curl -fsSL https://raw.githubusercontent.com/sailor-sh/CK-X/master/scripts/install.sh | bash
# Open http://localhost:30080 and select CKAD labs
The automated validation is particularly useful — it tells you immediately whether your solution meets the requirements, so you’re not guessing whether you got it right.
Practice Progression
Week 1-2: Learn the commands
- Work through each CKAD topic in CK-X without a timer
- Focus on using imperative commands effectively
- Get comfortable with
kubectl explainfor finding field names
Week 3: Build speed
- Set a timer for each task (aim for 5 minutes per question)
- Practice the generate-edit-apply workflow until it’s fluid
- Identify which topics slow you down the most
Week 4: Full simulations
- Do complete timed runs in CK-X
- Only use the official Kubernetes docs as reference
- Track your scores and weak areas
Expand Your Practice
After working through the CK-X question bank, the CKAD Mock Exam Bundle provides a significantly larger set of practice exams. It includes questions at varying difficulty levels and AI-powered feedback that tells you exactly which areas need improvement — useful for breaking through score plateaus.
Common CKAD Pitfalls
- Writing YAML from memory — Always generate with
--dry-run=client -o yamland modify - Forgetting namespaces — Read the question carefully and always specify
-n namespace - Over-engineering solutions — If the question says “create a pod,” don’t create a deployment
- Not verifying — Always run
kubectl getorkubectl describeafter applying - Spending too long on one question — Flag it and move on, come back later
Exam Day Checklist
- Set up aliases immediately (
alias k=kubectl,export do='--dry-run=client -o yaml') - Read each question twice before starting
- Check which namespace and context to use
- Use imperative commands wherever possible
- Verify every solution before moving to the next question
- Flag hard questions and revisit them at the end
- Keep an eye on the clock — aim to finish with 10-15 minutes to spare
Conclusion
The CKAD is a practical exam that rewards practical preparation. The fastest path to passing is simple: practice on real clusters, build speed with imperative commands, and simulate exam conditions until the time pressure feels manageable.
Start with the free CK-X simulator to build your muscle memory, focus on the highest-weighted domains, and approach the exam knowing you’ve already solved dozens of similar problems.
You’ve got this.