Certified Kubernetes Application Developer (CKAD)

 39,00

Behaal de CKAD-certificering en toon aan dat je Kubernetes-applicaties kunt bouwen, configureren en troubleshooten. Hands-on oefening met Pods, Deployments, Services en ConfigMaps.

Artikelnummer: CERTFORGE-CKAD Categorie:

Beschrijving

Deze cursus bereidt je volledig voor op het CKAD — Certified Kubernetes Application Developer examen. Met realistische oefenvragen, foutenanalyse en uitgebreide uitleg per antwoord studeer je gericht en efficiënt.

Onderwerpen

De cursus behandelt alle examenonderwerpen: Pod-ontwerp, configuratie, multi-container applicaties, observability en services & netwerken.

Wat zit er in het pakket?

  • 60 realistische oefenvragen met foutenanalyse
  • Uitgebreide uitleg bij elk antwoord
  • 180 dagen toegang
  • Voortgangstracking per sessie
  • BTW-factuur op aanvraag

Wat leer je in CKAD?

Het CKAD-examen test of je Kubernetes-applicaties kunt ontwerpen, bouwen en deployen. Je werkt 2 uur in een live Kubernetes-cluster en lost praktische taken op. Snelheid en nauwkeurigheid zijn essentieel.

Studietijd: ~30 uur. Slagingspercentage: 66% van de beschikbare punten.


1. Core-concepten en sneltoetsen

De belangrijkste tijdsbesparing: dry-run + YAML

# Genereer YAML zonder iets aan te maken
kubectl run mijnpod --image=nginx --dry-run=client -o yaml > pod.yaml
kubectl create deployment myapp --image=nginx --dry-run=client -o yaml > deploy.yaml
kubectl create service clusterip myapp --tcp=80:8080 --dry-run=client -o yaml

# Pas de YAML aan en apply
kubectl apply -f pod.yaml

Snelle navigatie

# Alias instellen (doe dit als eerste op het examen)
alias k=kubectl
export do="--dry-run=client -o yaml"

# Gebruik
k run pod1 --image=nginx $do > pod.yaml

# Huidige context bekijken
kubectl config current-context

# Namespace instellen
kubectl config set-context --current --namespace=mijnns

# Documentatie raadplegen
kubectl explain pod.spec.containers
kubectl explain deployment.spec.template.spec --recursive

2. Pods en containers

# Pod aanmaken
kubectl run nginx --image=nginx:1.25 --port=80

# Pod met environment variabele
kubectl run myapp --image=myapp:1.0 
  --env="DB_HOST=db.example.com" 
  --env="DB_PORT=5432"

# Pod met resource limits
kubectl run myapp --image=myapp:1.0 
  --requests="cpu=100m,memory=128Mi" 
  --limits="cpu=500m,memory=256Mi"

# Pod uitvoeren en direct verwijderen
kubectl run busybox --image=busybox --rm -it -- sh

# Bestaande pod bewerken (live)
kubectl edit pod mijnpod

Multi-container patronen

# Sidecar-patroon (logging)
spec:
  containers:
  - name: app
    image: myapp:1.0
    volumeMounts:
    - name: logs
      mountPath: /var/log/app

  - name: log-forwarder        # sidecar
    image: fluentd:latest
    volumeMounts:
    - name: logs
      mountPath: /var/log/app

  volumes:
  - name: logs
    emptyDir: {}

InitContainers

spec:
  initContainers:
  - name: wacht-op-db
    image: busybox
    command: ['sh', '-c',
      'until nc -z db-service 5432; do sleep 2; done']

  containers:
  - name: app
    image: myapp:1.0

Probes

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 10
  failureThreshold: 3

readinessProbe:
  tcpSocket:
    port: 5432
  initialDelaySeconds: 5
  periodSeconds: 5

startupProbe:
  httpGet:
    path: /healthz
    port: 8080
  failureThreshold: 30
  periodSeconds: 10

3. Configuratie

ConfigMaps

# Aanmaken
kubectl create configmap app-config 
  --from-literal=LOG_LEVEL=debug 
  --from-literal=MAX_CONN=100

kubectl create configmap app-config 
  --from-file=config.properties

# Als environment variabelen injecteren
envFrom:
- configMapRef:
    name: app-config

# Specifieke key
env:
- name: LOG_LEVEL
  valueFrom:
    configMapKeyRef:
      name: app-config
      key: LOG_LEVEL

# Als volume mounten
volumes:
- name: config
  configMap:
    name: app-config

volumeMounts:
- name: config
  mountPath: /etc/config

Secrets

# Aanmaken
kubectl create secret generic db-secret 
  --from-literal=wachtwoord=geheim123

kubectl create secret docker-registry regcred 
  --docker-server=registry.example.com 
  --docker-username=gebruiker 
  --docker-password=wachtwoord

# In pod gebruiken
env:
- name: DB_PASS
  valueFrom:
    secretKeyRef:
      name: db-secret
      key: wachtwoord

4. Deployments en schaalbaarheid

# Deployment aanmaken
kubectl create deployment myapp 
  --image=myapp:1.0 
  --replicas=3

# Schalen
kubectl scale deployment myapp --replicas=5

# Automatisch schalen (HPA)
kubectl autoscale deployment myapp 
  --min=2 --max=10 --cpu-percent=80

# Rolling update
kubectl set image deployment/myapp 
  myapp=myapp:2.0

# Rollout status bekijken
kubectl rollout status deployment/myapp

# Terugdraaien
kubectl rollout undo deployment/myapp

# Naar specifieke revisie
kubectl rollout undo deployment/myapp --to-revision=2

# Geschiedenis
kubectl rollout history deployment/myapp

Deployment-strategie aanpassen

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1        # Max extra pods tijdens update
      maxUnavailable: 0  # Geen downtime

5. Services en netwerken

# ClusterIP (intern)
kubectl expose deployment myapp --port=80 --target-port=8080

# NodePort (extern via node-IP)
kubectl expose deployment myapp --port=80 
  --type=NodePort

# Service aanmaken via YAML
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP

Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp
            port:
              number: 80

NetworkPolicy

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-alleen-frontend
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend

6. Persistente opslag

# PVC aanmaken
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-pvc
spec:
  accessModes: [ReadWriteOnce]
  resources:
    requests:
      storage: 1Gi
EOF

# PVC in Deployment gebruiken
volumes:
- name: data
  persistentVolumeClaim:
    claimName: data-pvc

volumeMounts:
- name: data
  mountPath: /data

7. Jobs en CronJobs

# Job aanmaken
kubectl create job backup 
  --image=busybox 
  -- sh -c "echo 'backup klaar'"

# CronJob aanmaken
kubectl create cronjob dagelijks 
  --image=busybox 
  --schedule="0 2 * * *" 
  -- sh -c "echo 'nachtelijke run'"

# CronJob YAML
spec:
  schedule: "0 2 * * *"   # minuut uur dag maand weekdag
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            command: ["/bin/sh", "-c", "datum backup"]
          restartPolicy: OnFailure

Officiële documentatie

Tip: oefen met tijdslimiet. Je hebt gemiddeld 4 minuten per vraag. Sla moeilijke vragen over en kom er later op terug.

Beoordelingen

Er zijn nog geen beoordelingen.

Enkel ingelogde klanten die dit product gekocht hebben, kunnen een beoordeling schrijven.