Workshop-Wiki · Deutsch

Kubernetes-Prüfung: 02 Intermediate

Schwierigkeitsgrad: Intermediate Sprache: Deutsch Format: kombinierte Konzept-, Design- und Hands-on-Prüfung Empfohlene Dauer: 150 bis 180 Minuten Maximalpunktzahl: 100 Punkte Bestehensgrenze: 70 Punkte

Workshop-Beispiele als ZIP
Lernstand in der Web-App

Kapitel als gelesen markieren, Lesefortschritt sehen und Praxismodule abhaken: Diese Funktionen stehen nach Aktivierung der optionalen Web-App zur Verfügung. Der Workshop-Fortschritt ergibt sich automatisch aus den Kapiteln aller Dokumentseiten. Deine Auswahl bleibt auf diesem Gerät; es gibt kein Konto und keinen Serverabgleich. Eine Installation ist nicht erforderlich. Beim Widerruf in den Datenschutz-Einstellungen wird der Lernstand gelöscht.

Lesefortschritt0%
0%
0 / 11 Kapitel gelesen
Weitere SprachfassungEnglisch ↗Griechisch ↗

Kubernetes-Prüfung: 02 Intermediate

Schwierigkeitsgrad: Intermediate
Sprache: Deutsch
Format: kombinierte Konzept-, Design- und Hands-on-Prüfung
Empfohlene Dauer: 150 bis 180 Minuten
Maximalpunktzahl: 100 Punkte
Bestehensgrenze: 70 Punkte

Diese Prüfung enthält Aufgaben, Abgabeanforderungen und Bewertungsraster. Sie enthält keine vollständige Musterlösung.


1. Prüfungsziel

Die Prüfung weist nach, dass du produktionsnähere Kubernetes-Workloads modellieren, konfigurieren und debuggen kannst. Der Schwerpunkt liegt auf Workload-Auswahl, Probes, Lifecycle, Ressourcenmanagement, Scheduling, NetworkPolicy, DNS, Ingress oder Gateway API, Storage, Helm, Kustomize und systematischem Troubleshooting.

Nach der Prüfung soll erkennbar sein, dass du:

  • Deployment, StatefulSet, DaemonSet, Job und CronJob nach Zweck unterscheiden kannst,
  • Init Container, Sidecar Container und Ephemeral Container korrekt einordnest,
  • Startup, Readiness und Liveness Probes fachlich trennst,
  • Requests, Limits, QoS, LimitRange und ResourceQuota anwenden kannst,
  • Scheduling-Probleme über Events, Node-Labels, Taints und Tolerations erklärst,
  • Service, DNS, EndpointSlices und NetworkPolicies getrennt diagnostizierst,
  • Ingress und Gateway API als Regel plus Controller verstehst,
  • PVC, PV, StorageClass und StatefulSet grundlegend beherrschst,
  • Helm- und Kustomize-Ausgaben vor dem Anwenden prüfst.
01 / 11

2. Voraussetzungen und erlaubte Hilfsmittel

Du brauchst:

  • einen Lab-Cluster mit funktionierendem CNI,
  • CoreDNS,
  • kubectl,
  • optional helm,
  • optional kubectl kustomize oder kustomize,
  • optional eine StorageClass,
  • optional einen Ingress Controller oder Gateway Controller.

Erlaubt sind:

  • offizielle Kubernetes-Dokumentation,
  • eigene Workshop-Notizen,
  • kubectl explain, kubectl describe, kubectl logs, kubectl get events,
  • lokale Manifeste, die während der Prüfung erstellt werden.

Nicht erlaubt sind:

  • produktive Secrets,
  • Änderungen außerhalb des Prüfungs-Namespace, sofern nicht ausdrücklich gefordert,
  • Cluster-weite Änderungen ohne Dokumentation und Rückbau.

Empfohlener Namespace:

bash
export NS=exam-intermediate
02 / 11

3. Ausgangsszenario

Ein Team betreibt eine kleine Shop-Anwendung im Lab. Die Anwendung besteht aus:

  • frontend: nimmt HTTP-Anfragen an,
  • backend: stellt eine interne API auf Port 8080 bereit,
  • migration: läuft einmalig vor einer neuen Version,
  • cleanup: läuft regelmäßig,
  • data-demo: speichert eine kleine Datei persistent.

Die Anwendung soll kontrollierte Health Checks, Ressourcenanforderungen, Namespace-Grenzen, NetworkPolicies und eine saubere Diagnose erhalten. Externe Veröffentlichung erfolgt über Ingress oder Gateway API, falls ein Controller vorhanden ist. Falls kein Controller vorhanden ist, muss dies fachlich korrekt dokumentiert werden.

03 / 11

4. Erwartete Abgabe

Gib am Ende einen Ordner oder ein Archiv mit folgenden Dateien ab:

text
02-intermediate-abgabe/
  answers.md
  architecture-decision.md
  workloads/
    frontend.yml
    backend.yml
    migration-job.yml
    cleanup-cronjob.yml
  resources/
    limitrange.yml
    resourcequota.yml
  networking/
    services.yml
    networkpolicies.yml
    ingress-or-gateway.yml
  storage/
    statefulset.yml
  packaging/
    kustomize-output.md
    helm-output.md
  troubleshooting.md
  evidence.md
  cleanup.md

Wenn Helm, Gateway API, Ingress Controller oder StorageClass nicht verfügbar sind, dokumentiere die Einschränkung und liefere ein fachlich korrektes Beispielmanifest oder eine nachvollziehbare Alternativbewertung.

04 / 11

5. Teil A: Wissensfragen

Beantworte die Fragen präzise und mit betrieblichem Bezug.

  1. Wann nutzt du ein Deployment, wann ein StatefulSet, wann einen Job und wann einen CronJob?
  2. Was unterscheidet Init Container, Sidecar Container und Ephemeral Container?
  3. Welche Aufgabe haben Startup Probe, Readiness Probe und Liveness Probe?
  4. Warum kann eine zu aggressive Liveness Probe Schaden verursachen?
  5. Welche Wirkung haben CPU-/Memory-Requests auf Scheduling und HPA?
  6. Was ist der Unterschied zwischen Guaranteed, Burstable und BestEffort QoS?
  7. Welche Aufgabe haben LimitRange und ResourceQuota?
  8. Was ist der Unterschied zwischen nodeSelector, Affinity, Taints und Tolerations?
  9. Warum kann ein Pod trotz korrektem Manifest im Status Pending bleiben?
  10. Wie hängen Service, EndpointSlice, Pod-Readiness und DNS zusammen?
  11. Warum muss DNS-Egress bei Default-Deny-NetworkPolicies explizit berücksichtigt werden?
  12. Was ist der Unterschied zwischen Ingress-Ressource und Ingress Controller?
  13. Welche Rolle haben PV, PVC, StorageClass und CSI?
  14. Warum ist hostPath im Lab nicht automatisch eine Produktionslösung?
  15. Was prüfst du bei PVC Pending, Service ohne Endpoints und CreateContainerConfigError?
05 / 11

6. Teil B: Workload- und Architekturentscheidung

Erstelle architecture-decision.md. Beschreibe für jede Anforderung die passende Kubernetes-Ressource und begründe deine Entscheidung.

Anforderung Erwartete Entscheidung
HTTP-Frontend soll dauerhaft laufen und rollend aktualisiert werden Ressourcentyp begründen
Backend-API braucht Health Checks und Requests/Limits Probes und Ressourcen erklären
Datenmigration soll genau einmal pro Release laufen Ressourcentyp begründen
Cleanup soll stündlich laufen und keine parallelen Jobs erzeugen Ressourcentyp und Concurrency erklären
Kleiner stateful Workload soll Daten nach Pod-Neuerstellung behalten StatefulSet/PVC erklären
Anwendung soll extern erreichbar sein Ingress oder Gateway API mit Controller-Abhängigkeit erklären
Namespace soll vor Übernutzung geschützt werden LimitRange und ResourceQuota erklären
Frontend darf nur Backend und DNS erreichen NetworkPolicy-Design erklären
06 / 11

7. Teil C: Praxisaufgaben

Aufgabe C1: Namespace, Quota und LimitRange

  1. Erstelle den Namespace exam-intermediate.
  2. Erstelle eine LimitRange mit Default Requests und Limits.
  3. Erstelle eine ResourceQuota für Pods, CPU und Memory.
  4. Zeige, dass ein zu großer Pod vom API Server abgelehnt wird.

Mindestanforderung für Quota:

text
pods: 10
requests.cpu: 2
requests.memory: 2Gi
limits.cpu: 4
limits.memory: 4Gi

Aufgabe C2: Frontend und Backend mit Probes

Erstelle zwei Deployments:

  • frontend mit Image curlimages/curl:8.8.0 oder einem vergleichbaren ungefährlichen Testimage,
  • backend mit einem HTTP-Testserver auf Port 8080, zum Beispiel registry.k8s.io/e2e-test-images/agnhost:2.53 mit netexec.

Anforderungen:

  • sinnvolle CPU-/Memory-Requests und Limits,
  • Readiness Probe für Service-Traffic,
  • Liveness Probe für echte Neustartfälle,
  • Startup Probe, falls die App langsam startet,
  • eindeutige Labels: app, component, environment,
  • Services für Frontend und Backend.

Dokumentiere, warum Readiness nicht dasselbe Ziel wie Liveness hat.

Aufgabe C3: Job und CronJob

Erstelle:

  • einen Job migration, der einmalig erfolgreich endet,
  • einen CronJob cleanup, der stündlich läuft,
  • concurrencyPolicy: Forbid für den CronJob,
  • sinnvolle successfulJobsHistoryLimit und failedJobsHistoryLimit.

Dokumentiere, warum ein Deployment hierfür fachlich schlechter geeignet wäre.

Aufgabe C4: Scheduling prüfen

  1. Label einen Lab-Node mit exam-role=apps.
  2. Erstelle einen Pod oder ein Deployment mit passendem nodeSelector.
  3. Erstelle einen zweiten Pod mit nicht passendem nodeSelector.
  4. Dokumentiere die Pending-Events.
  5. Setze einen Taint auf den gelabelten Node.
  6. Zeige den Unterschied zwischen Pod ohne Toleration und Pod mit passender Toleration.
  7. Baue die Node-Änderungen sauber zurück.

Aufgabe C5: NetworkPolicy Default Deny plus gezielte Erlaubnisse

Erstelle NetworkPolicies mit diesen Anforderungen:

  1. Default Deny für Ingress und Egress im Namespace.
  2. DNS-Egress zu CoreDNS erlauben.
  3. frontend darf backend auf TCP-Port 8080 erreichen.
  4. Sonstiger Egress bleibt blockiert.
  5. Dokumentiere, ob dein CNI NetworkPolicies tatsächlich durchsetzt.

Nachweise:

bash
kubectl get networkpolicy -n exam-intermediate
kubectl exec <frontend-pod> -n exam-intermediate -- nslookup backend
kubectl exec <frontend-pod> -n exam-intermediate -- curl -s --max-time 5 http://backend:8080/hostname

Aufgabe C6: Ingress oder Gateway API

Prüfe zuerst, ob ein Controller vorhanden ist:

bash
kubectl get ingressclass
kubectl get gatewayclass 2>/dev/null || true

Wenn ein Ingress Controller vorhanden ist:

  • erstelle eine Ingress-Ressource mit Hostname shop.localtest.me,
  • leite auf den passenden Service,
  • dokumentiere Controller-Events und Backend-Zuordnung.

Wenn Gateway API vorhanden ist:

  • erstelle oder beschreibe ein Gateway-/HTTPRoute-Modell,
  • dokumentiere ParentRef, Hostname und BackendRef.

Wenn kein Controller vorhanden ist:

  • erstelle ein Beispielmanifest,
  • erkläre, warum die Ressource ohne Controller keine praktische Wirkung hat.

Aufgabe C7: PVC und StatefulSet

  1. Prüfe vorhandene StorageClasses.
  2. Erstelle ein StatefulSet data-demo mit volumeClaimTemplates.
  3. Schreibe eine Datei in /data/test.txt.
  4. Lösche den Pod.
  5. Prüfe nach Neuerstellung, ob die Datei noch vorhanden ist.
  6. Dokumentiere die StorageClass und die Grenzen des Labs.

Aufgabe C8: Helm und Kustomize rendern

  1. Erstelle eine kleine Kustomize-Base und ein Overlay dev.
  2. Rendere das Overlay mit kubectl kustomize.
  3. Erstelle ein minimales Helm Chart oder nutze ein lokales Beispielchart.
  4. Rendere das Chart mit helm template.
  5. Vergleiche Reviewbarkeit, Parametrisierung und Fehlerrisiko.
07 / 11

8. Teil D: Troubleshooting-Parcours

Untersuche fünf Fehlerbilder. Für jedes Fehlerbild dokumentierst du Symptom, Diagnose, Ursache, Fix und Validierung.

Fehlerbild Mindestdiagnose
Pod bleibt Pending wegen falschem nodeSelector kubectl describe pod, Scheduling-Events
ImagePullBackOff wegen falschem Image-Tag Pod-Events, Image-Name und Tag prüfen
CrashLoopBackOff wegen fehlerhaftem Startkommando kubectl logs, kubectl logs --previous, Exit-Code
PVC bleibt Pending wegen falscher StorageClass kubectl describe pvc, StorageClass, Events
Service hat keine Endpoints wegen falschem Selector Labels, Selector, Endpoints, EndpointSlices
08 / 11

9. Bewertung

Bereich Punkte Erwartung
Wissensfragen 20 Begriffe und Betriebswirkung korrekt erklärt
Architekturentscheidung 15 Ressourcenwahl und Alternativen nachvollziehbar begründet
Workload-Konfiguration 20 Probes, Ressourcen, Jobs, CronJobs und Labels sinnvoll umgesetzt
Netzwerk, DNS, Ingress/Gateway 15 Servicepfad und Controller-Abhängigkeiten korrekt geprüft
Storage und Packaging 10 PVC/StatefulSet sowie Helm/Kustomize levelgerecht angewendet
Troubleshooting 15 Fehler systematisch über Events, Logs und Status eingegrenzt
Dokumentation und Cleanup 5 Abgabe nachvollziehbar, sauberer Rückbau
Summe 100

Bewertungsskala:

Punkte Ergebnis
90–100 sehr gut bestanden
80–89 gut bestanden
70–79 bestanden
0–69 nicht bestanden
09 / 11

10. K.-o.-Kriterien

Die Prüfung gilt unabhängig von der Punktzahl als nicht bestanden, wenn eines dieser Kriterien zutrifft:

  • produktive oder fremde Cluster-Kontexte werden verwendet,
  • Node-Taints oder Labels werden nicht zurückgebaut,
  • NetworkPolicy wird behauptet, aber nicht getestet oder CNI-Wirkung nicht eingeordnet,
  • echte Secrets oder produktive Registry-Zugangsdaten werden verwendet,
  • keine Diagnose-Evidence für die Troubleshooting-Aufgaben vorhanden ist,
  • Cluster-weite Ressourcen werden ohne Begründung verändert.
10 / 11

11. Prüfer-Checkliste

Kriterium Erfüllt?
Workload-Ressourcen fachlich unterschieden ☐
Startup, Readiness und Liveness korrekt getrennt ☐
Requests, Limits, LimitRange und Quota angewendet ☐
Scheduling-Events korrekt interpretiert ☐
NetworkPolicy inklusive DNS berücksichtigt ☐
Ingress/Gateway Controller-Rolle erklärt ☐
PVC und StatefulSet getestet oder begründet eingeordnet ☐
Helm und Kustomize gerendert ☐
Troubleshooting-Parcours vollständig dokumentiert ☐
Cleanup und Rückbau nachvollziehbar ☐
11 / 11

K8S · Orthevs Academy

31 Module als durchgängiger Lernpfad.

Die Reihenfolge bleibt unverändert: von der Laborgrundstruktur über fachliche Grundlagen und Betriebsmodelle bis zum abschließenden Troubleshooting. Die technischen Verzeichnisnamen werden bewusst beibehalten.

Orthevs – Engineering als Grundlage für das, was als Nächstes kommt.

Orthevs als App

Orthevs installieren

Die Orthevs Web-App kann auf unterstützten Mobilgeräten und Desktop-Browsern installiert werden.

iPhone und iPad

Öffnen Sie Orthevs in Safari. Tippen Sie auf Teilen, dann auf ‚Zum Home-Bildschirm‘. Aktivieren Sie gegebenenfalls ‚Als Web-App öffnen‘ und tippen Sie auf ‚Hinzufügen‘.

Android

Für die Web-App öffnen Sie das Browsermenü und wählen ‚App installieren‘ oder ‚Zum Startbildschirm hinzufügen‘. Bestätigen Sie die Installation.

Desktop-Browser

Öffnen Sie das Browsermenü oder das Installationssymbol in der Adressleiste und wählen Sie ‚App installieren‘ beziehungsweise ‚Zum Dock hinzufügen‘.

Die Web-App-Installation hängt vom Browser ab. Falls kein Installationsdialog erscheint, nutzen Sie die angezeigten Schritte im Browser.