Skip to main content

CKAD Deep Guide: Application Design & Deployment Strategies

Rachmat Hidayat
Author
Rachmat Hidayat
Learn & sharing insights on TypeScript, Go, Kubernetes, DevOps, DevSecOps, SRE, Platform Engineering, AI/ML Engineering, and MLOps.
kubernetes-certification-path - This article is part of a series.
Part 3: This Article
The Certified Kubernetes Application Developer (CKAD) exam tests your ability to design, build, expose, and troubleshoot cloud-native applications running inside Kubernetes clusters.

TL;DR (Quick Summary)
#

  • Exam Format: 100% hands-on performance-based exam (15-18 tasks). Duration: 2 hours. Passing Score: 66%.
  • Core CKAD Domains:
    • Application Design and Build (20%)
    • Application Deployment (20%)
    • Application Observability and Maintenance (15%)
    • Application Environment, Configuration and Security (25%)
    • Services and Networking (20%)
  • Imperative Speed Tricks: Use kubectl run --dry-run=client -o yaml to generate manifests in seconds.

1. Imperative Command Speed Sheet (Crucial for CKAD)
#

Never write YAML manifests from scratch during the CKAD exam! Use imperative commands to generate stubs:

# 1. Create a Pod stub
kubectl run nginx-pod --image=nginx:1.25 --dry-run=client -o yaml > pod.yaml

# 2. Create a Deployment stub (3 replicas)
kubectl create deployment web-app --image=nginx:alpine --replicas=3 --dry-run=client -o yaml > deployment.yaml

# 3. Create a Service stub
kubectl expose deployment web-app --port=80 --target-port=8080 --type=ClusterIP --dry-run=client -o yaml > service.yaml

# 4. Create a CronJob running every 5 minutes
kubectl create cronjob backup-job --image=busybox --schedule="*/5 * * * *" --dry-run=client -o yaml -- bin/sh -c "date" > cronjob.yaml

2. Deployment Strategies Comparison
#


graph TD
    subgraph Rolling Update (Default)
        V1["Version 1.0 (2 Replicas)"] -->|Step 1| V1_1["V1.0 (1) + V2.0 (1)"]
        V1_1 -->|Step 2| V2["Version 2.0 (2 Replicas)"]
    end
    
    subgraph CanaryDeployment ["Canary Deployment"]
        Prod["Production Service"] -->|90% Traffic| V1_Pods["V1.0 Pods (app=web, track=stable)"]
        Prod -->|10% Traffic| V2_Pods["V2.0 Pods (app=web, track=canary)"]
    end
StrategyZero DowntimeResource CostRollback SpeedTypical Use Case
RollingUpdateYesLow (+maxSurge)ModerateDefault for stateless microservices.
RecreateNo (Downtime)LowFastApplications with single-writer databases.
Blue-GreenYesHigh (200% Capacity)Instant (Switch Service Selector)Mission-critical monolithic apps.
CanaryYesLow (+1 Replica)FastA/B testing or gradual production releases.

3. Step-by-Step Lab 1: Implementing Liveness & Readiness Probes
#

A common CKAD task requires adding HTTP probes to detect deadlocks or unready containers.

Defining Probes Manifest
#

Create probed-pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: probe-demo
spec:
  containers:
  - name: web
    image: nginx:alpine
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
    readinessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 2
      periodSeconds: 5

Apply and inspect probe execution:

kubectl apply -f probed-pod.yaml
kubectl describe pod probe-demo | grep -E "Liveness|Readiness"

4. Step-by-Step Lab 2: Jobs and CronJobs
#

Create a Job that processes 5 items with a concurrency of 2.

apiVersion: batch/v1
kind: Job
metadata:
  name: batch-processor
spec:
  completions: 5
  parallelism: 2
  template:
    spec:
      containers:
      - name: worker
        image: busybox
        command: ["sh", "-c", "echo Processing item... && sleep 3"]
      restartPolicy: OnFailure

Apply and watch completion:

kubectl apply -f batch-processor.yaml
kubectl get jobs -w

5. Troubleshooting & Common CKAD Pitfalls
#

Pitfall 1: Invalid restartPolicy on Jobs
#

  • Pod Spec: restartPolicy: Always (Default for Deployments/Pods).
  • Job Spec: restartPolicy: OnFailure or Never. Using Always inside a Job causes immediate manifest rejection!

Pitfall 2: Secret Mount Permission Denied
#

When mounting secrets, ensure readOnly: true is set on volumeMounts.


Summary & Next Steps
#

In this guide:

  • We mastered imperative kubectl generation speed tricks.
  • We analyzed RollingUpdate vs Canary vs Blue-Green deployment strategies.
  • We built Liveness and Readiness HTTP probes.
  • We configured parallel batch Jobs and CronJobs.

Next, we move to the security-focused Certified Kubernetes Security Specialist (CKS) master guide!

kubernetes-certification-path - This article is part of a series.
Part 3: This Article