Cheatsheet voor CKA en CKAD

Kubernetes Cheatsheet voor CKA en CKAD: kubectl op één pagina

De essentiële kubectl-commando’s en YAML-patronen voor het CKA en CKAD examen. Stel eerst een alias in en gebruik dry-run zo veel mogelijk.

⚡ Eerste stap op het examen

# Stel dit direct in bij het begin van het examen
alias k=kubectl
export do="--dry-run=client -o yaml"

# Gebruik
k run pod1 --image=nginx $do > pod.yaml
k create deployment myapp --image=nginx $do > deploy.yaml

🔍 Navigeren en inspecteren

kubectl config current-context               # Huidige context
kubectl config use-context <context>        # Wisselen van context
kubectl config set-context --current \
  --namespace=mijnns                         # Namespace instellen

kubectl get pods -A                          # Alle namespaces
kubectl get pods -o wide                     # Met node-info
kubectl describe pod <naam>                  # Details + events
kubectl explain pod.spec.containers          # Velddocumentatie
kubectl explain deployment --recursive       # Volledige structuur

🚀 Pods en containers

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

# Pod met env var en limieten
kubectl run myapp --image=myapp:1.0 \
  --env="DB_HOST=db" \
  --requests="cpu=100m,memory=128Mi" \
  --limits="cpu=500m,memory=256Mi"

# Tijdelijke debug-pod
kubectl run debug --image=busybox --rm -it -- sh

# Shell in bestaande pod
kubectl exec -it <pod> -- bash

# Logs bekijken
kubectl logs <pod>
kubectl logs <pod> --previous               # Vorige instantie
kubectl logs <pod> -f                       # Live streamen

# Pod verwijderen (geforceerd)
kubectl delete pod <naam> --force --grace-period=0

📦 Deployments

kubectl create deployment myapp \
  --image=nginx --replicas=3               # Aanmaken

kubectl scale deployment myapp --replicas=5  # Schalen
kubectl autoscale deployment myapp \
  --min=2 --max=10 --cpu-percent=80        # HPA aanmaken

kubectl set image deployment/myapp \
  nginx=nginx:1.25                          # Image updaten
kubectl rollout status deployment/myapp     # Status
kubectl rollout undo deployment/myapp       # Terugdraaien
kubectl rollout history deployment/myapp    # Geschiedenis

⚙️ ConfigMaps en Secrets

# ConfigMap aanmaken
kubectl create configmap app-config \
  --from-literal=LOG_LEVEL=debug \
  --from-file=config.properties

# Secret aanmaken
kubectl create secret generic db-secret \
  --from-literal=password=geheim123

# Als environment variabele injecteren (in YAML)
env:
- name: LOG_LEVEL
  valueFrom:
    configMapKeyRef:
      name: app-config
      key: LOG_LEVEL

- name: DB_PASS
  valueFrom:
    secretKeyRef:
      name: db-secret
      key: password

# Alles uit ConfigMap injecteren
envFrom:
- configMapRef:
    name: app-config

# Als volume mounten
volumes:
- name: config
  configMap:
    name: app-config
volumeMounts:
- name: config
  mountPath: /etc/config

🌐 Services en Netwerken

# Service aanmaken
kubectl expose deployment myapp \
  --port=80 --target-port=8080             # ClusterIP
kubectl expose deployment myapp \
  --port=80 --type=NodePort               # NodePort

# DNS-naam van een service
# <service>.<namespace>.svc.cluster.local

# Verbinding testen vanuit pod
kubectl exec <pod> -- curl http://myapp:80

# NetworkPolicy — deny all inbound
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
spec:
  podSelector: {}
  policyTypes: [Ingress]

💾 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 pod gebruiken
volumes:
- name: data
  persistentVolumeClaim:
    claimName: data-pvc
volumeMounts:
- name: data
  mountPath: /data

🔐 RBAC (CKA)

# Role aanmaken
kubectl create role pod-lezer \
  --verb=get,list,watch \
  --resource=pods -n mijnns

# RoleBinding aanmaken
kubectl create rolebinding alice-lezer \
  --role=pod-lezer \
  --user=alice -n mijnns

# ClusterRole + ClusterRoleBinding
kubectl create clusterrole node-lezer \
  --verb=get,list,watch --resource=nodes
kubectl create clusterrolebinding alice-nodes \
  --clusterrole=node-lezer --user=alice

# Toegang controleren
kubectl auth can-i get pods --as=alice -n mijnns

🛠 Troubleshooting (CKA)

# Cluster info
kubectl cluster-info
kubectl get componentstatuses

# Node debuggen
kubectl describe node <naam>
ssh <node>
systemctl status kubelet
journalctl -u kubelet -f

# Events bekijken
kubectl get events \
  --sort-by=.metadata.creationTimestamp -A

# etcd backup (CKA)
ETCDCTL_API=3 etcdctl snapshot save backup.db \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key

# Certificaten controleren (CKA)
kubeadm certs check-expiration

⚡ Examentips

  • Stel alias k=kubectl en export do="--dry-run=client -o yaml" in als eerste
  • Gebruik kubectl explain voor velddocumentatie — sneller dan de docs
  • Controleer de namespace bij elke opdracht — verkeerde namespace = verloren punten
  • Markeer moeilijke vragen en kom er later op terug
  • Verificeer elke taak met kubectl get pods of kubectl describe