Other Certifications · CKAD

CKAD — Certified Kubernetes Application Developer

The CKAD asks a narrower question than its sibling exam: not can you run a cluster, but can you design, build, and deploy a working application onto one that someone else already runs? Same format as the CKA — live terminal, real clusters, no multiple choice, two hours on the clock — pointed entirely at the developer's half of Kubernetes: container images, multi-container Pod patterns, Deployments and rollouts, ConfigMaps and Secrets, Services and Ingress. If you read the CKA page and felt like a third of it wasn't your job, this is probably the exam you actually want. Below: what it tests, the official domains and weights, exactly how it's different from the CKA, and how to prepare with the lessons already on this site.

☺ Explain it like I'm 10

Picture a restaurant. Someone has to keep the gas lines, the walk-in freezer, and the ventilation running — that's the CKA's job, and it's not this test. CKAD is the exam for the chef: can you actually cook the dish (build a container image), plate a complicated order with the sides arriving at the same time as the main (a multi-container Pod), get it out through the pass without dropping any along the way (a rolling Deployment), and make sure a customer can actually find the door and place an order in the first place (a Service and an Ingress)? You get handed a real kitchen with real broken equipment and two hours on the clock — you just never have to go fix the boiler in the basement, because that's somebody else's job and somebody else's exam.

🦫🐙Your hosts for this topic: Benny the Beaver & Olly the Octopus — Benny builds the image and the pipeline that ships it, and Olly keeps every container inside a multi-container Pod talking to the others without stepping on each other's toes.

What CKAD is, and who it's for

☺ Like you're 10: It's a two-hour hands-on test, just like the CKA — except every single task is about an application running on the cluster, never the cluster itself.

The Certified Kubernetes Application Developer is the CNCF and Linux Foundation's credential for people who build and ship applications onto Kubernetes, as opposed to the CKA's focus on the people who operate the cluster underneath them. It launched in 2018, a year after the CKA, specifically to give application developers their own performance-based exam instead of forcing them to sit a cluster-administration test full of etcd and kubeadm content they'd never touch on the job.

Performance-based, same format as the CKA

There's no multiple choice anywhere on this exam either. You're dropped into a browser-based terminal with several pre-built clusters and namespaces, and handed tasks like "In namespace shop, create a Deployment named web running image registry.example.com/web:1.5.0 with 3 replicas, expose it via a ClusterIP Service on port 80, and configure a liveness probe against /healthz." Grading is on the end state — the Deployment exists, the Service actually routes to it, the probe is configured correctly — not on the elegance of the YAML you wrote to get there. Speed matters just as much as it does on the CKA: most tasks are individually fast if you know the object model cold, and the clock punishes anyone who doesn't.

Who should sit it

It targets application developers writing Kubernetes-native software, and just as often it targets DevOps engineers who deploy onto clusters they don't administer — someone who owns CI/CD pipelines, writes the Deployment manifests and Helm charts, and needs a workload to run cleanly and stay observable, but who has a platform team or a managed control plane handling nodes, etcd, and cluster upgrades. It assumes comfort with containers (you should already know what a Dockerfile does) and basic kubectl, but it does not assume you've ever touched a node's filesystem or restored an etcd snapshot.

◆ Key idea

CKAD tests the workload layer that sits on top of the cluster, not the cluster itself. Everything in containers & orchestration and the application-facing half of infrastructure as code is home ground. Node-level troubleshooting, control-plane installation, and etcd — the CKA's biggest domains — are out of scope entirely. That boundary is the difference between the two exams.

CKAD versus CKA — which exam actually matches your job

☺ Like you're 10: They feel identical on the day — same clock, same terminal, same no-multiple-choice format — but they hand you completely different broken things to fix.

Both exams are run by the same organizations, cost roughly the same, last two hours, and are graded the same way: on whether the cluster ends up in the state the task asked for. That's where the similarity ends. The CKA hands you a cluster that might be broken at the control-plane or node level and expects you to fix the substrate; the CKAD hands you a cluster that already works and expects you to build a correct, well-configured application on top of it.

CKADCKA
QuestionCan you build and ship an app onto Kubernetes?Can you run the cluster underneath it?
AltitudeThe workload layer — Pods, Deployments, Services, ConfigMapsThe substrate — nodes, etcd, kubelet, CNI, CSI
Signature toolkubectl against namespaces you're scoped to, plus Helmkubeadm, kubectl, and node-level tools like journalctl
Biggest domainApplication Environment, Configuration and Security (25%)Troubleshooting (30%)
You will never be asked toBootstrap a control plane or restore an etcd snapshotWrite a Dockerfile or design a multi-container Pod
Typical candidateApp developer, or a DevOps engineer deploying onto a cluster someone else runsCluster administrator, SRE, infrastructure engineer
Feeds into CKS?No — helpful background, but doesn't satisfy the prerequisiteYes — an active CKA is the formal prerequisite
⚠ Watch out

The most common planning mistake is assuming CKAD is a stepping stone toward CKS. It isn't, formally — CKS requires an active CKA, not a CKAD, even though several CKAD topics (SecurityContexts, Secrets, RBAC basics) are closer in spirit to what CKS goes on to test in depth. If CKS is the eventual goal, the CKA is the exam that actually unlocks it, regardless of which one teaches you more relevant material day to day.

In practice the honest test is which broken thing you'd rather be handed at 2 a.m.: a Pod stuck in CrashLoopBackOff because of a bad readiness probe and a missing ConfigMap key (CKAD territory), or a cluster where the API server won't start because someone edited a static Pod manifest on the wrong node (CKA territory). Most DevOps engineers who deploy onto Kubernetes without owning cluster operations live entirely in the first world — which makes CKAD the higher-signal, faster-to-prepare-for credential for that specific job.

The official domains and weights (CKAD curriculum v1.35)

☺ Like you're 10: Five topics, and one of them — configuration and security — is worth more than any of the others on its own.

These are the five domains and weights as published in the CNCF's Certified Kubernetes Application Developer (CKAD) Exam Curriculum, version 1.35, kept in sync with the same release train as the CKA curriculum. They sum to exactly 100% — 25 + 20 + 20 + 20 + 15. Note the shape: Application Environment, Configuration and Security alone is 25%, ahead of every other domain, which tells you where the exam's actual center of gravity sits.

🔐Application Environment, Configuration and Security
25%
🦫Application Design and Build
20%
🐢Application Deployment
20%
🐦Services and Networking
20%
🐘Application Observability and Maintenance
15%

The competencies below are transcribed one bullet per published item. As with the CKA curriculum, treat the exact wording and weights as a snapshot — the CNCF revises this document with roughly every Kubernetes minor version, and it's published openly for you to check against.

25% — Application Environment, Configuration and Security

20% — Application Design and Build

20% — Application Deployment

20% — Services and Networking

15% — Application Observability and Maintenance

That's 23 published competencies in total: 7 + 4 + 4 + 3 + 5. Two things surprise people who last studied an older CKAD syllabus: Kustomize now sits explicitly under Application Deployment alongside Helm, and API deprecations is its own competency under Observability and Maintenance — a real, examinable skill given how often Kubernetes removes beta APIs between minor versions.

What you actually need to be able to do

☺ Like you're 10: Here's the real work behind each bullet point above — the YAML and commands your fingers need to produce without a search engine.

Application Design and Build

You need a working mental model of how a container image is actually built — multi-stage Dockerfiles that keep the shipped image small and run as a non-root user — and fluency with the multi-container Pod patterns the curriculum names explicitly: an init container that runs to completion before the main container starts, and a sidecar that runs alongside it for the Pod's whole lifetime, sharing its network namespace and any volumes you mount into both.

# multi-stage build: compile in a full image, ship almost nothing
FROM golang:1.23 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app .

FROM gcr.io/distroless/static-debian12
COPY --from=build /out/app /app
USER 65532:65532
ENTRYPOINT ["/app"]
apiVersion: v1
kind: Pod
metadata:
  name: web-with-sidecar
spec:
  initContainers:
    - name: fetch-config              # runs once, to completion, before 'app' starts
      image: busybox:1.36
      command: ["sh", "-c", "wget -qO /config/app.conf https://config.example.com/app.conf"]
      volumeMounts:
        - { name: config, mountPath: /config }
  containers:
    - name: app
      image: registry.example.com/web:1.5.0
      volumeMounts:
        - { name: config, mountPath: /etc/app }
    - name: log-shipper                # sidecar: same Pod, same lifecycle, same network namespace
      image: fluent/fluent-bit:3.1
      volumeMounts:
        - { name: logs, mountPath: /var/log/app }
  volumes:
    - { name: config, emptyDir: {} }
    - { name: logs, emptyDir: {} }

Workload resource choice is graded too: a stateless web tier is a Deployment, a per-node agent is a DaemonSet, a scheduled batch job is a CronJob, and a workload that needs stable network identity and ordered startup is a StatefulSet. Picking the wrong one is a wrong answer even if the Pod spec inside it is perfect. Fuller context lives in containers & orchestration.

Application Deployment

Deployments, rolling updates, and rollback with kubectl rollout undo are the baseline. The curriculum explicitly names blue/green and canary as strategies to implement with Kubernetes primitives — meaning you build them out of ordinary Deployments, Services, and labels, not a dedicated CRD, because that CRD-based tooling belongs to Argo CD and friends, which sit outside this exam.

# imperative skeleton first, then edit — fastest path under a clock
kubectl create deployment web --image=registry.example.com/web:1.4.2 \
  --replicas=4 --dry-run=client -o yaml > web.yaml
kubectl apply -f web.yaml

kubectl set image deployment/web web=registry.example.com/web:1.5.0
kubectl rollout status deployment/web
kubectl rollout history deployment/web
kubectl rollout undo deployment/web --to-revision=2

# blue/green: two Deployments, one Service, flip the selector to cut over
kubectl label deployment web-green track=live --overwrite
kubectl patch service web -p '{"spec":{"selector":{"track":"live"}}}'

# canary: same Service selector on both, unequal replica counts control traffic share
kubectl scale deployment web-stable --replicas=9
kubectl scale deployment web-canary --replicas=1   # ~10% of requests land on the canary

# Helm and Kustomize both count for this domain
helm upgrade --install web example/web-app --version 2.3.1 \
  --namespace shop --create-namespace --set image.tag=1.5.0
kubectl apply -k overlays/production/

See deployment strategies for the concepts and feature flags & progressive delivery for how canary and blue/green extend past what a bare Deployment can express.

Application Observability and Maintenance

Probes are the piece people under-rehearse: a startup probe protects a slow-booting container from being killed by liveness checks before it's actually ready, a liveness probe restarts a container that's alive but stuck, and a readiness probe pulls a Pod out of a Service's Endpoints without restarting it — three different failure modes, three different probes, and the exam will hand you a Pod with the wrong one configured.

containers:
  - name: web
    image: registry.example.com/web:1.5.0
    startupProbe:
      httpGet: { path: /healthz, port: 8080 }
      failureThreshold: 30
      periodSeconds: 2            # up to 60s to finish booting before liveness takes over
    livenessProbe:
      httpGet: { path: /healthz, port: 8080 }
      periodSeconds: 10
      failureThreshold: 3         # three misses in a row -> container restarted
    readinessProbe:
      httpGet: { path: /ready, port: 8080 }
      periodSeconds: 5
      failureThreshold: 2         # pulled out of the Service, container keeps running
# the debugging sequence CKAD actually rewards
kubectl logs deploy/web -c web --since=10m --previous
kubectl describe pod web-7d9f4c8b9-x2k5n | tail -20        # Events are at the bottom
kubectl debug pod/web-7d9f4c8b9-x2k5n -it --image=busybox:1.36 --target=web
                                                              # ephemeral container, shares web's namespaces

# API deprecations: confirm what the cluster actually serves before you trust an old manifest
kubectl api-versions | grep networking.k8s.io
kubectl explain ingress --api-version=networking.k8s.io/v1

Application Environment, Configuration and Security

The heaviest domain, and mostly a matter of knowing the objects cold: ConfigMaps and Secrets consumed as environment variables or mounted volumes, resource requests and limits, ServiceAccounts, and a SecurityContext locked down the way a real reviewer would expect.

apiVersion: v1
kind: ConfigMap
metadata: { name: web-config, namespace: shop }
data:
  LOG_LEVEL: "info"
  FEATURE_NEW_CHECKOUT: "true"
---
apiVersion: v1
kind: Secret
metadata: { name: web-secrets, namespace: shop }
type: Opaque
stringData:
  DATABASE_URL: "postgres://app:REPLACE_ME@db.shop.svc:5432/orders"
---
apiVersion: apps/v1
kind: Deployment
metadata: { name: web, namespace: shop }
spec:
  replicas: 3
  selector: { matchLabels: { app: web } }
  template:
    metadata: { labels: { app: web } }
    spec:
      serviceAccountName: web-runtime
      containers:
        - name: web
          image: registry.example.com/web:1.5.0
          envFrom:
            - configMapRef: { name: web-config }
            - secretRef: { name: web-secrets }
          resources:
            requests: { cpu: "250m", memory: "256Mi" }
            limits:   { cpu: "500m", memory: "512Mi" }
          securityContext:
            runAsNonRoot: true
            runAsUser: 10001
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            capabilities: { drop: ["ALL"] }

RBAC in this domain is scoped narrower than on the CKA — you're expected to create a Role and RoleBinding for a ServiceAccount and confirm it with kubectl auth can-i, not design cluster-wide access policy. This is the domain where secrets & credential management and shift-left security for DevOps pay off directly.

Services and Networking

Lighter than the CKA's networking domain and asked from the consumer's side: expose a Deployment with a Service, get traffic in from outside with an Ingress, and show a basic-but-correct NetworkPolicy rather than debug a subtle one.

apiVersion: v1
kind: Service
metadata: { name: web, namespace: shop }
spec:
  selector: { app: web }
  ports:
    - { port: 80, targetPort: 8080 }
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: { name: web, namespace: shop }
spec:
  ingressClassName: nginx
  rules:
    - host: shop.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service: { name: web, port: { number: 80 } }
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata: { name: db-allow-from-web, namespace: shop }
spec:
  podSelector: { matchLabels: { app: db } }   # selecting a Pod flips it to deny-by-default
  policyTypes: [Ingress]
  ingress:
    - from:
        - podSelector: { matchLabels: { app: web } }
      ports:
        - { protocol: TCP, port: 5432 }
# quick service sanity check every CKAD candidate should have cold
kubectl get endpointslices -n shop -l kubernetes.io/service-name=web
kubectl run tmp --rm -it --image=busybox:1.36 --restart=Never -n shop \
  -- wget -qO- web.shop.svc.cluster.local
🦫 Benny & Olly's workshop · 40 min

On a throwaway cluster, ship one small app end to end with no notes: (1) write a two-stage Dockerfile and load the image; (2) deploy it with a Deployment that has all three probes configured correctly; (3) wire a ConfigMap and a Secret into it, with a locked-down SecurityContext; (4) expose it with a Service and an Ingress, and confirm it resolves; (5) add a NetworkPolicy that allows only the traffic it needs; (6) do a rolling update, then roll it back one revision. That loop is the exam — five of the five domains in one pass.

How to prepare using this site

☺ Like you're 10: Here's the map from each exam topic to the exact page here that teaches it, so you can start today.

This course is written for practicing DevOps engineers, so it runs deeper than CKAD on pipelines and delivery strategy and lighter on raw kubectl repetition — the gap worth closing with hands-on practice on a real cluster, which is also exactly what the exam rewards.

A workable four-week shape

CKAD's scope is narrower than the CKA's, and most working DevOps engineers already know a slice of it cold from daily deploys — so four weeks is realistic where the CKA warranted six. Week 1: images, multi-container Pod patterns, and workload resource choice, all imperative, no copy-paste. Week 2: Deployments, rollouts, Helm, and Kustomize — build a blue/green cutover and a canary by hand at least once. Week 3: ConfigMaps, Secrets, SecurityContexts, and a RoleBinding, then Services, Ingress, and one NetworkPolicy a day. Week 4: nothing but timed end-to-end runs like Benny and Olly's workshop above, plus a pass through the flashcards and the exam simulator. The habit that pays for itself fastest: alias k=kubectl and export do="--dry-run=client -o yaml" before the clock starts.

Exam logistics — and why you must verify them yourself

☺ Like you're 10: The shape of the test changes now and then. Read the official page before you pay for anything.

The details below are what the Linux Foundation and CNCF generally publish and what candidates consistently report. They're here to help you plan, not to be quoted back at anyone — several of them have changed at some point in the exam's history, exactly as they have for the CKA.

ItemWhat is generally published
FormatOnline, remotely proctored, performance-based — real tasks on live clusters in a browser terminal
Duration2 hours
Passing score66%
Validity2 years from the date you pass
RetakeRegistration has historically included one free retake
PriceAround USD $445 list, in line with the CKA — bundles, regional pricing, and LF discount codes are common
PrerequisitesNone formally required — but the exam assumes real container and kubectl experience
Permitted resourcesA published allowlist of documentation, opened in a tab inside the exam environment — historically kubernetes.io docs and blog, plus helm.sh/docs given Helm's place on the curriculum. Read the current allowlist in the Important Instructions before you sit — it's the detail that changes most often.
Preparation includedRegistration has typically bundled access to an exam simulator — check what your purchase actually includes rather than assuming
Kubernetes versionThe environment tracks a recent release; this curriculum is v1.35. Confirm the version on the day — tasks are written against it
⚠ Verify this before you book

Price, duration, pass mark, retake policy, permitted documentation, and curriculum version all change. Nothing here is authoritative — this site is independent and unofficial. Confirm current details on the official Linux Foundation CKAD page and the CNCF certification page before you pay, and read the Candidate Handbook in your LF portal. The curriculum is published openly at github.com/cncf/curriculum — check that the version you study matches the version you sit.

Where CKAD sits in the ladder, and what to do next

☺ Like you're 10: It's a middle rung, sitting right next to the CKA rather than above or below it.

Treat the CNCF certifications as a floor plan, not a straight line. KCNA is the entry-level, knowledge-based rung below both practitioner exams. CKA and CKAD sit side by side at practitioner level — same performance-based format, same clock, aimed at two different jobs on the same platform. Above them, CKS requires an active CKA specifically and goes deep on hardening, supply chain, and runtime security — a natural next step for a CKA holder, and a detour for a CKAD holder without one. Container fundamentals underneath CKAD's Design and Build domain are also covered from a different angle by Docker Certified Associate, if that gap is the one you actually have.

For most DevOps engineers who deploy onto Kubernetes without owning the cluster, CKAD is a complete, self-sufficient credential on its own — it doesn't need to be a stepping stone to anything. If your role later shifts toward owning the platform itself, the CKA is the natural next stop, not because CKAD was incomplete, but because it was never trying to cover that ground in the first place. The full comparison against every other certification on this site's radar lives on the certifications hub.

🎬 At the Ship-It Guild
🦊

Foxy: I keep seeing "CKA" and "CKAD" next to each other and I genuinely can't tell which one is mine.

🦫

Benny the Beaver: Do you ever touch etcd, or restore a control plane? No? Then it's not the CKA. I build images and Deployments all day — CKAD is the one that's actually my job.

🐙

Olly the Octopus: And half of what CKAD tests is exactly what I do — getting an init container and a sidecar to cooperate inside one Pod without tangling their arms.

🐢

Timmy the Turtle: The Deployment domain is mine too — rolling updates, blue/green, canary. I don't promote anything until a rollout's actually held.

👺

Gizmo the Gremlin: Pass the CKAD, then just walk straight into the CKS exam. Same letters, right? 🤑

🐘

Ellie the Elephant: Wrong letters, Gizmo. CKS's prerequisite is an active CKA — the record's very clear on that one.

🦉

Professor Owl: Different altitudes, same exam style. Pick the one that matches the pager you actually carry.

🐢 Timmy's checkpoint

1. Which CKAD domain carries the largest weight, and what percentage is it? 2. List the five CKAD domains with their weights, largest to smallest. 3. Name three competencies under Application Environment, Configuration and Security. 4. In one sentence, what's the core difference in altitude between CKAD and the CKA? 5. Which certification is the actual formal prerequisite for CKS — CKA or CKAD? 6. Give two situations where a DevOps engineer should reach for CKAD rather than the CKA.

Check your answers
  1. Application Environment, Configuration and Security, at 25% — ahead of every other domain.
  2. Application Environment, Configuration and Security 25%; Application Design and Build 20%; Application Deployment 20%; Services and Networking 20%; Application Observability and Maintenance 15%.
  3. Any three of: discover and use resources that extend Kubernetes (CRDs, Operators); understand authentication, authorization and admission control; understand and define resource requirements, limits and quotas; understand ConfigMaps; create and consume Secrets; understand ServiceAccounts; understand Application Security (SecurityContexts, Capabilities).
  4. CKAD tests the workload layer built on top of a working cluster (apps, Pods, Services); the CKA tests the substrate underneath it (nodes, etcd, control plane).
  5. CKA — CKS formally requires an active CKA, not a CKAD, even though several CKAD topics are closer in spirit to CKS content.
  6. Any two of: you deploy applications onto a cluster you don't administer; you own CI/CD pipelines and Helm charts rather than nodes and etcd; your organization runs a fully managed control plane and your gap is entirely at the workload layer; you want the faster, narrower exam to prepare for first.