CKAD Exam Topics & Practice Tasks
Every task in the CKAD lab maps to a domain in the official Certified Kubernetes Application Developer curriculum. Below is the full list — what you'll practice, what each task tests, and how it maps to the exam blueprint.
Domain 1
20% of CKAD exam
Application Design and Build
Define pods and multi-container patterns, build and run container images, and create jobs and cronjobs.
Task 02
Create CronJob with History Limits
Create a CronJob named backup-job in namespace default with the following specifications: Schedule: Run every 30 minutes (*/30 * * * *) Image: busybox:latest Container command: echo "Backup completed" Set…
docs · k8s.io/docs/concepts/workloads/controllers/cron-jobs
Task 05
Build Container Image with Podman
On the node, directory /root/app-source contains a valid Dockerfile.
docs · docs.podman.io
Task 08
Fix Broken Deployment YAML
File /root/broken-deploy.yaml contains a Deployment manifest that fails to apply. The file has the following issues: 1. Uses deprecated API version 2. Missing required selector field 3. Selector doesn't match template labels
docs · k8s.io/docs/concepts/workloads/controllers/deployment
Domain 2
20% of CKAD exam
Application Deployment
Roll out and update deployments, run canary and blue-green release strategies, and manage rollouts.
Task 06
Canary Deployment Traffic Split
In namespace default, the following resources exist: Deployment web-app with 5 replicas, labels app=webapp, version=v1 Service web-service with selector app=webapp
docs · k8s.io/docs/concepts/workloads/controllers/deployment
Task 09
Rolling Update and Rollback
In namespace default, Deployment app-v1 exists with image nginx:1.20.
docs · k8s.io/docs/concepts/workloads/controllers/deployment
Task 16
Resource Requests and Limits
In namespace prod, a ResourceQuota exists that sets resource limits for the namespace.
docs · k8s.io/docs/concepts/policy/resource-quotas
Domain 3
15% of CKAD exam
Application Observability and Maintenance
Configure liveness, readiness, and startup probes, read logs, and debug running workloads.
Task 10
Add Readiness Probe
In namespace default, Deployment api-deploy exists with a container listening on port 8080.
docs · k8s.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes
Task 12
Fix Service Selector
In namespace default, Deployment web-app exists with Pods labeled app=webapp, tier=frontend. Service web-svc exists but has incorrect selector app=wrongapp.
docs · k8s.io/docs/concepts/services-networking/service
Domain 4
25% of CKAD exam
Application Environment, Configuration and Security
Wire up configmaps, secrets, service accounts, RBAC, securityContext, and resource requests and limits.
Task 01
Create Secret from Hardcoded Variables
In namespace default, Deployment api-server exists with hard-coded environment variables: DB_USER=admin DB_PASS=Secret123!
docs · k8s.io/docs/concepts/configuration/secret
Task 03
ServiceAccount, Role, and RoleBinding
In namespace audit, Pod log-collector exists but is failing with authorization errors. Check the Pod logs to identify what permissions are needed: bash kubectl logs -n audit log-collector The logs show: User…
docs · k8s.io/docs/reference/access-authn-authz/rbac
Task 04
Fix Broken Pod ServiceAccount
In namespace monitoring, Pod metrics-pod is using ServiceAccount wrong-sa and receiving authorization errors. Multiple ServiceAccounts, Roles, and RoleBindings already exist in the namespace: ServiceAccounts: monitor-sa,…
docs · k8s.io/docs/concepts/security/service-accounts
Task 11
Pod and Container Security Context
In namespace default, Deployment secure-app exists without any security context.
docs · k8s.io/docs/tasks/configure-pod-container/security-context
Domain 5
20% of CKAD exam
Services & Networking
Expose workloads with services and ingress, and restrict traffic with network policies.
Task 07
Fix NetworkPolicy Pod Labels
In namespace network-demo, three Pods exist: frontend with label role=wrong-frontend backend with label role=wrong-backend database with label role=wrong-db Three NetworkPolicies exist: deny-all (default deny)…
docs · k8s.io/docs/concepts/services-networking/network-policies
Task 13
Create NodePort Service
In namespace default, Deployment api-server exists with Pods labeled app=api and container port 9090.
docs · k8s.io/docs/concepts/services-networking/service
Task 14
Create Ingress Resource
In namespace default, the following resources exist: Deployment web-deploy with Pods labeled app=web Service web-svc with selector app=web on port 8080
docs · k8s.io/docs/concepts/services-networking/ingress
Task 15
Fix Ingress PathType
File /root/fix-ingress.yaml contains an Ingress manifest that fails to apply due to an invalid pathType value.
docs · k8s.io/docs/concepts/services-networking/ingress