certslothcertsloth
← CKAD overview

Certified Kubernetes Application Developer / STUDY TOOLS

CKAD quick review

Scope: CNCF v1.37 curriculum. Linux Foundation's candidate FAQ lists Kubernetes v1.37 on 10 October 2026; check again before booking. This is one of the five Kubestronaut certifications. Rehearse this performance exam in a disposable cluster. Curriculum: CNCF, CC BY 4.0.

Reviewed 10 October 2026 against the linked published scope. Curriculum: design/build 20%, deployment 20%, observability 15%, configuration/security 25%, networking 20%.

Memory hook: Build the image, declare the workload, supply configuration, prove behavior.

Read the essentials, cover the answers and explain the decision aloud. Open the topic summaries below whenever a distinction is unclear.

Design, build and deployment

  • An image is a packaged filesystem/configuration; a running container is an instance. Use a suitable base, minimal dependencies, nonroot execution where possible and deterministic tags/digests. Multi-stage builds separate build tooling from runtime contents.
  • Container command and args override corresponding image defaults. An init container runs before ordinary app containers; sidecar patterns provide supporting functionality with lifecycle details dependent on the configured mechanism/version.
  • Deployments suit replaceable replicas; StatefulSets stable identity/storage; DaemonSets node-wide agents; Jobs finite work; CronJobs recurring work. Job retry, completion and parallelism settings define different behaviors.
  • A rolling Deployment uses maxSurge and maxUnavailable to control overlap/availability. Inspect rollout status/history; rollback restores a previous Pod template, not an external database migration.
  • Blue/green switches traffic between environments; canary exposes a subset to a new version. Labels/selectors and traffic control must actually implement the intended split. A second Deployment alone does not allocate a precise traffic percentage.
  • Helm values customize chart rendering; Kustomize overlays adjust base manifests. Read the generated resources, namespace and scope before deploying. Understand CRD custom resources and the controller that makes them useful.

Configuration, security and storage

  • ConfigMaps carry nonsecret configuration; Secrets carry sensitive values but base64 is not encryption. Env values are captured at container start; mounted projections can update with important timing/subPath limitations. Applications still need to reread changed files.
  • ServiceAccounts identify workloads to the API. Roles/ClusterRoles describe permissions; bindings grant them. kubectl auth can-i checks a specific requested action. Disable unnecessary token mounting and grant only needed verbs/resources.
  • securityContext configures user/group, capabilities, privilege and filesystem restrictions at appropriate Pod/container scope. A read-only root filesystem may need writable volumes for expected temp/state paths.
  • Requests inform scheduling; limits constrain use. ResourceQuota bounds namespace totals; LimitRange can set defaults/bounds. A valid manifest may be rejected by admission when these constraints are violated.
  • emptyDir lasts for the Pod, not its replacement. A PVC requests persistent storage through a matching PV/class. Volume mounting, application path, permissions, access modes and topology all need to agree.

Observability, services and networking

  • Readiness controls traffic eligibility; liveness controls restart; startup allows slow initialization. Probe path, port, scheme and timing must match the actual application, not a convenient guess.
  • Use get, describe, events, logs, logs --previous and exec to separate scheduling, image, startup, configuration and connectivity failures. Exit codes and termination reasons distinguish crashes from resource kills.
  • Service selectors target Pod labels; targetPort must reach the listening container port. ClusterIP, NodePort, LoadBalancer and headless Services serve different access needs. DNS names include service/namespace context.
  • Ingress routes supported HTTP(S) traffic through an installed controller. TLS requires suitable Secret/certificate configuration. Gateway resources similarly depend on an implementation; resource existence does not guarantee traffic.
  • NetworkPolicy is additive allow policy with direction-specific isolation. Ensure necessary DNS and upstream access as well as client ingress. The network plugin must enforce the policy.

Practical traps

  • Check context and namespace before editing. Validate resource state and a representative client request afterward.
  • An image build succeeding is not application health; a Pod running is not readiness; a Service existing is not a working endpoint.
  • Keep stable selector labels separate from rollout labels so a deployment change does not accidentally orphan traffic.
  • Command arrays do not implicitly start a shell. Pipes and redirects require a shell that actually exists in the image.
  • Job completions, parallelism and retry limits answer different questions; CronJob concurrency policies apply to that CronJob's own Jobs. None guarantees exactly-once external effects.

Kubestronaut exam preparation

CKAD supplies application delivery practice for the five-exam Kubestronaut path. Use the current permitted resources when rehearsing; allowed documentation for another certification may differ. CertSloth is preparation material, not an allowed in-exam reference.

Final active recall

1. Why did an env-based ConfigMap change not appear in an existing process?

Environment values were populated at startup; recreate/restart through the intended rollout.

2. Which probe prevents traffic without intentionally restarting the container?

Readiness.

3. A policy allows ingress but requests still fail. What else may block them?

Source egress, destination port/listener, DNS, selectors, readiness or underlying network enforcement.

4. Does rollback undo schema changes?

Deployment rollback restores a Pod template, not independently changed external data.

5. When does emptyDir disappear?

When that Pod is removed; a replacement Pod gets a new emptyDir.

Sources and further practice

Every topic at a glance

Open any topic to revisit its essential facts, decisions and exam traps. Use the full topic for active recall and supporting references.

01 · Workloads, Scheduling and Self-Healing

Memory hook: Requests place; limits constrain; probes decide.

Must remember

Deployments manage ReplicaSets and rolling changes. StatefulSets supply stable ordinal identity and per-Pod storage patterns; DaemonSets place node-local workloads; Jobs run to completion and CronJobs schedule Jobs. Pick the controller that expresses the workload instead of creating unmanaged Pods.

Use kubectl rollout status, history and undo for Deployment progress and recovery. maxSurge permits extra Pods; maxUnavailable controls how many desired replicas can be unavailable during a rolling update. A rollback restores an earlier Pod template, not external database state.

Readiness determines eligibility for normal Service traffic; liveness can restart a failing container; startup delays the other probes while an application initializes. An overly aggressive liveness probe can turn a dependency outage into a restart storm. Resource requests influence scheduling; limits constrain use, with CPU throttling and possible memory termination.

Node selectors and required affinity constrain placement; preferred affinity expresses preference. Taints repel Pods without matching tolerations; a toleration permits placement but does not select a particular node. Topology spread and anti-affinity reduce correlated failures. Admission controls, namespace quotas and LimitRanges can reject or default Pod configuration before scheduling.

HPA scales replica counts from configured metrics; utilisation-based CPU scaling requires appropriate requests and metrics availability. Node autoscaling supplies node capacity rather than changing desired application replicas. A PodDisruptionBudget limits voluntary disruption; it cannot prevent every involuntary failure.

ConfigMaps store nonsecret settings; Secrets hold sensitive values but base64 encoding is not encryption. Protect API access and at-rest storage. Environment variables are captured at container start; mounted projected data can update with qualifications, including subPath limitations. Restart or reload the application when its consumption method requires it.

Choose under exam pressure

Requirement Choice and reason
Slow startup but healthy later Use a startup probe and suitable thresholds.
Spread replicas across failure domains Topology constraints/anti-affinity plus sufficient capacity.
Scale on measured load HPA with correct requests and metrics.

Traps

  • A toleration is permission, not a placement guarantee.
  • A readiness failure does not itself restart the container.

Practise this topic

02 · Volumes, Claims and Storage Classes

Memory hook: Claim requests; class provisions; policy reclaims.

Must remember

A Pod's container filesystem is not durable application storage. emptyDir lives with the Pod and survives container restarts, but disappears when the Pod is removed. hostPath exposes a node path and ties behavior to that node; it is not a general portable persistent-storage design.

A PersistentVolume represents storage; a PersistentVolumeClaim requests capacity and access characteristics. A StorageClass identifies a provisioner and parameters for dynamic provisioning. With WaitForFirstConsumer, binding can wait for workload placement so topology and storage availability align. An immediate binding may otherwise choose storage in the wrong zone for a constrained Pod.

Access modes describe permitted mounting patterns: ReadWriteOnce is read-write by one node (potentially several Pods there), ReadOnlyMany is many-node read access, ReadWriteMany is multi-node read/write when the storage supports it, and ReadWriteOncePod restricts access to one Pod with supported CSI storage. Modes do not transform an underlying disk into a distributed filesystem.

Reclaim policy decides what happens after the claim releases a PV. Delete generally removes dynamically provisioned backing storage through the provisioner; Retain preserves it for manual recovery/reuse. Deleting a workload is not the same as deleting its PVC. Inspect the actual PV/class rather than assuming retention.

Expansion requires class and driver support; filesystem expansion behavior depends on the volume and driver. A larger claim can request growth, but Kubernetes does not provide ordinary volume shrinking. volumeMode: Block exposes a raw block device rather than a mounted filesystem.

Diagnose Pending claims through events, matching class, size, access modes, provisioner health and topology. Diagnose mount failures through CSI/controller/node logs, attachment limits, permissions and application paths. Never delete a data-bearing claim merely to make a warning disappear.

Choose under exam pressure

Requirement Choice and reason
Provision storage on claim creation StorageClass with a working dynamic provisioner.
Match disk zone to Pod placement WaitForFirstConsumer where appropriate.
Keep data after claim deletion A deliberate Retain reclaim policy and recovery procedure.

Traps

  • ReadWriteOnce means one node, not universally one Pod.
  • A Retain volume still needs a tested backup and recovery plan.

Practise this topic

03 · Images, Container Commands and Pod Patterns

Memory hook: One Pod shares a lifecycle; one image should have one clear purpose.

Must remember

A container image packages filesystem layers and startup metadata. Build from a controlled base, copy only required files, use multi-stage builds to leave compilers behind, and exclude credentials/build context secrets. Tags can move; a digest identifies specific content. Understand Dockerfile ENTRYPOINT and CMD, then how Kubernetes command and args override them.

Containers in a Pod share network identity and can share declared volumes, but their root filesystems are separate. Use an init container for prerequisites that must finish before normal application startup. A sidecar supplies a companion capability such as a proxy or log shipper; an adapter normalizes output and an ambassador mediates access to another service. Do not put unrelated applications in one Pod merely to share a node.

Native sidecars use restartable init-container behavior in supported versions. Their ordering/lifecycle differs from ordinary init containers and long-running app containers, so inspect the target API documentation. A one-shot init command that never exits can block startup indefinitely.

Kubernetes does not automatically interpret command/args as a shell script. Pipes, redirects and chained commands require an explicitly invoked shell, and the image must contain that shell. Native sidecars specify restartPolicy: Always on an init container; ordinary init containers must finish before the next starts. Do not confuse this per-container setting with the Pod's restart policy.

Choose a Deployment for interchangeable replicas, StatefulSet for stable identity/storage patterns, DaemonSet for node-local agents and Job/CronJob for finite/scheduled work. A Job's retry and completion settings do not make an external payment operation idempotent. CronJob concurrency and missed-run behavior need deliberate configuration.

For batch work, completions is the success target, parallelism bounds concurrently active Pods, and backoffLimit limits retry failures. CronJob concurrencyPolicy chooses Allow, Forbid or Replace for Jobs from that CronJob; startingDeadlineSeconds bounds how late a missed run may start. These controls do not provide exactly-once business processing.

Drill: explain how a shared emptyDir passes a generated configuration from an init container to an application, why it survives a container restart, and why deleting the Pod removes it. Then inspect the actual image, command, args and events when the app fails to start.

Choose under exam pressure

Requirement Choice and reason
Prepare a file before app startup Init container and a shared volume.
Helper must run alongside the app A suitable sidecar lifecycle.
Repeatable image deployment Pin a reviewed digest and retain provenance.

Traps

  • A Pod shares a network namespace, not automatically every filesystem path.
  • Image tags are not immutable identifiers.

Practise this topic

04 · Deployment Strategies, Helm and Kustomize

Memory hook: Render the intent, inspect the diff, verify the rollout.

Must remember

A Deployment rolling update replaces replicas according to surge/unavailability limits. Blue/green maintains distinct old/new environments and switches traffic. A canary exposes a limited share before wider promotion. Plain Kubernetes Services select matching Pods; precise percentage routing may require replica proportions or a capable ingress/service-mesh controller. A label alone does not implement weighted traffic.

Helm combines chart templates with values to create release resources. Inspect helm show values, helm template, release status/history and upgrade changes. A successful Helm command does not prove the application is healthy. Hooks and CRDs have lifecycle considerations; understand what uninstall retains. Avoid secrets in unprotected values files or command history.

Kustomize composes bases and overlays with patches, labels, image changes and generated configuration. kubectl kustomize PATH renders; kubectl apply -k PATH applies. Keep environment differences small and explicit. Do not hand-edit rendered output and assume the next render preserves it.

Before applying, verify context/namespace, intended image and the rendered diff. After applying, inspect rollout status, readiness, Service endpoints and an actual application request. Rollback restores workload configuration, not an incompatible database migration or deleted external data.

Choose under exam pressure

Requirement Choice and reason
Preview Helm output helm template with the intended values.
Maintain small environment variations Kustomize base plus overlays.
Reduce exposure to a new release Canary with measurable success and a real traffic-control mechanism.

Traps

  • Switching a tag does not prove every node runs the intended digest.
  • Rollback needs data/schema compatibility.

Practise this topic

05 · Troubleshooting Under Time Pressure

Memory hook: Context first; events next; change one cause.

Must remember

Start with kubectl config current-context and the requested namespace. Use get, describe and sorted events to identify the failing layer before editing. Verify the target context again when switching between tasks.

Symptom First useful evidence
Pod Pending Scheduling events: requests, affinity, taints, quota and PVC binding.
ImagePullBackOff Image reference, registry reachability and image-pull credentials.
CrashLoopBackOff kubectl logs POD --previous, exit code, command and probes.
Running but unavailable Readiness, listener/targetPort, selectors and EndpointSlices.
Node NotReady Node conditions, kubelet/runtime health, disk pressure and network plugin.
API unavailable API endpoint, control-plane static Pods, certificates and etcd health.

kubectl logs -c CONTAINER selects the right container; --previous reads a prior terminated instance. kubectl exec is useful when tools exist in the container; minimal images may lack a shell. Use an approved debug container or diagnostic Pod when appropriate, without assuming it has identical policy/identity to the failing workload.

On a node, systemctl status kubelet, journalctl -u kubelet and runtime tools such as crictl help when the API path is broken. Static control-plane Pod manifests are managed by the kubelet; keep backups outside its watched manifest directory to avoid accidental extra Pods.

kubectl top requires a metrics API and shows recent usage; it is not a full historical monitoring system. Compare usage with requests, limits and node allocatable capacity. Check DNS, Service endpoints, policies and routing in sequence for network failures.

Timed drill: diagnose a deliberately broken selector, an oversized request and a wrong image in a disposable cluster. State the observed cause, make the smallest correction, then verify the requested application behavior. A green Pod phase alone is not proof of success.

Choose under exam pressure

Requirement Choice and reason
Application recently restarted Previous container logs and termination status.
Cluster API unavailable Node-level kubelet/runtime and control-plane diagnostics.
Service DNS resolves but request fails Check endpoints and application ports, then traffic policy.

Traps

  • Blind restarts can erase evidence and fail to fix the cause.
  • Editing the wrong context can complete the wrong task perfectly.

Practise this topic

06 · Services, DNS and Network Policy

Memory hook: Selector finds endpoints; policy permits the path.

Must remember

Pods communicate using cluster networking supplied by the CNI. A Service gives stable discovery for a changing set of endpoints. Check labels/selectors, target ports and EndpointSlices when traffic reaches the Service but no application responds.

Type Use
ClusterIP Internal stable virtual service address.
NodePort A port exposed on nodes, with the Service forwarding to backends.
LoadBalancer Requests an external load balancer from an available implementation.
Headless (clusterIP: None) DNS discovery of endpoints rather than a normal virtual IP.

Ingress describes HTTP/S routing, but needs an Ingress controller. TLS certificates normally come from referenced Secrets; matching host/path and backend port matters. Gateway API separates infrastructure ownership (GatewayClass/controller), listeners (Gateway) and application routing (HTTPRoute). Inspect parent references, allowed routes, listener hostnames and cross-namespace ReferenceGrants where needed. Gateway resources also require an implementation.

CoreDNS resolves service names such as api.team.svc.cluster.local, with the actual cluster domain configurable. Test name resolution separately from network reachability. Check namespace search suffixes, CoreDNS Pods/Service, resolv.conf and DNS egress policy before blaming application code.

Gateway routing drill: inspect kubectl get gateway,httproute -n team -o yaml, then trace parentRefs to the listener and backendRefs to the Service. An HTTPRoute backend port is the Service port, not an arbitrary container port. Check host/path matching and the controller's status conditions before testing a request with the intended Host header. A route that exists but never attaches to its Gateway cannot deliver the requested traffic.

NetworkPolicy is enforced only by supporting networking implementations. Policies are additive allow lists. Once a Pod is isolated for ingress or egress, applicable allowed traffic must be specified; when both ends are isolated, both source egress and destination ingress must permit the connection. An empty selector selects all Pods in that namespace. Namespace and Pod selectors in the same peer entry are AND; separate entries are alternatives.

Practical drill: draw client → DNS → Service → endpoint → container. For each arrow, identify one read-only command and one possible configuration fault.

Choose under exam pressure

Requirement Choice and reason
HTTP host/path routing Ingress or Gateway API with a working controller.
Service has no backends Inspect selectors, Pod readiness and EndpointSlices.
Restrict Pod communication NetworkPolicies plus a capable CNI implementation.

Traps

  • Creating a LoadBalancer Service does not guarantee a load-balancer implementation exists.
  • Default-deny egress can also block DNS.

Practise this topic

07 · Application Permissions, Admission and API Changes

Memory hook: Authentication identifies; RBAC permits; admission validates.

Must remember

Authentication establishes the caller; authorization such as RBAC decides whether it may perform the API operation; admission may mutate or reject an otherwise authorized request. A valid token therefore does not guarantee the Pod will be admitted. Inspect the rejection message, namespace policies and requested fields.

A ServiceAccount is a namespaced workload identity. Use a dedicated account with only necessary grants, and disable automatic token mounting when the workload does not need API access. Modern projected tokens can be short-lived and audience-bound. A Secret containing base64 text is not encrypted merely because of that encoding; access and at-rest protection remain essential.

Check spec.serviceAccountName on the actual Pod before diagnosing its permissions. To test an allowed operation, an authorized administrator can use kubectl auth can-i get configmaps --as=system:serviceaccount:team:app -n team; repeat with a forbidden operation and expect no. RoleBindings grant access in their own namespace, while the ServiceAccount subject also carries its namespace. A grant in the wrong namespace cannot be repaired by changing only the token.

Security contexts control supported user/group IDs, privilege escalation, capabilities, read-only root filesystems and seccomp settings. Running as non-root is useful but not equivalent to isolation from every host risk. Namespace quotas limit aggregate usage; LimitRanges can default/restrict per-object resources. Requests drive scheduling and CPU utilization scaling calculations; limits constrain resource use.

CRDs add API resource types; an operator/controller supplies reconciliation behavior. Creating the CRD alone does not create all promised business behavior. Use kubectl api-resources and kubectl explain to discover supported fields. Deprecated API versions may later be removed; migrate manifests to served versions and check changed schemas/defaults before upgrading.

Drill: distinguish Forbidden from an admission-policy rejection and a Pending scheduling event. They occur at different layers and need different corrections; granting cluster-admin to fix all three is both ineffective and excessive.

Choose under exam pressure

Requirement Choice and reason
Forbidden on an API operation Inspect the actual identity and RBAC verb/resource/scope.
Pod rejected despite RBAC permission Inspect admission/security policy and quota.
Old manifest API no longer served Migrate to supported version/schema and validate behavior.

Traps

  • ServiceAccount scope and RoleBinding namespace matter.
  • An operator needs controller logic, not only a custom resource definition.

Practise this topic

Search across every published topic.