Training Module

Kubernetes Anwendungsdesign — Multi-Container-Patterns, Jobs & Security Context

In diesem Modul (90 Minuten Input, 30 Minuten Hands-on) wechselt ihr die Perspektive vom lauffähigen Manifest zum durchdachten Anwendungsdesign. Los geht es mit den drei etablierten Multi-Container-Pod-Patterns Sidecar, Ambassador und Adapter – und, mindestens genauso wichtig, mit der Abgrenzung, wann ein zweiter Container tatsächlich in denselben Pod gehört und wann er stattdessen ein eigenes Deployment mit eigenem Service braucht. Danach geht es um Pod-Placement und Batch-Workloads: nodeSelector erzwingt Hardware-Constraints wie ein GPU-Node, Job mit completions, parallelism und backoffLimit ersetzt das Deployment für einmalige Durchläufe bis zum Erfolg, und CronJob mit schedule und concurrencyPolicy kapselt wiederkehrende Läufe, ohne dass sich überlappende Jobs gegenseitig stören. Der dritte Block widmet sich der Runtime-Absicherung: securityContext auf Pod- und Container-Ebene mit runAsNonRoot, readOnlyRootFilesystem und dem Muster capabilities.drop: [ALL] plus gezieltem add nur der tatsächlich benötigten Capability, dazu ServiceAccount und automountServiceAccountToken: false als Default für Anwendungen, die gar nicht mit der Kubernetes-API sprechen. Im Hands-on wendet ihr ein Sidecar-Manifest mit geteiltem emptyDir an, verschärft es um einen restriktiven securityContext und beobachtet live, wie ein schreibender Prozess ohne passendes Volume daran scheitert – und schließt mit einem CronJob, dessen concurrencyPolicy: Forbid ihr live gegen sich überlappende Läufe verifiziert. Voraussetzung ist das Modul “Kubernetes Workloads & Konfiguration” – die Session läuft weiterhin vollständig lokal über Minikube, ohne Cloud-Account und ohne Kostenwirkung.

Format

90 Minuten Input plus 30 Minuten Hands-on, live (remote oder vor Ort)

Teilnehmende

Entwickler:innen, die Multi-Container-Patterns, Batch-Workloads und Security Context aus Anwendungssicht durchdenken wollen

Voraussetzungen

Abgeschlossenes Modul “Kubernetes Workloads & Konfiguration” oder gleichwertige Vorkenntnisse, lauffähige lokale Docker-Umgebung für Minikube

Warum dieses Training für deine Organisation wirkt

Ein Pod ist keine Modelliereinheit für alles

Sidecar, Ambassador und Adapter zeigen, wann ein Hilfscontainer untrennbar zum Hauptcontainer gehört – und die Abgrenzung danach zeigt, wann genau das nicht mehr gilt und ein eigenes Deployment die richtige Antwort ist.

Batch-Workloads ohne Deployment-Krücke

Ein Migrations- oder Cleanup-Job, der als Deployment nachgebaut wird, läuft nach Erfolg einfach weiter oder wird beim Absturz endlos neu gestartet. Job und CronJob modellieren “einmalig bis zum Erfolg” und “wiederkehrend ohne Überlappung” als das, was sie sind.

Geringste Rechte als Standard, nicht als Ausnahme

runAsNonRoot, readOnlyRootFilesystem und capabilities.drop: [ALL] sind kein Security-Nachtrag, sondern gehören ins erste Manifest – live demonstriert am Fall, in dem ein zu restriktiver Container genau deshalb scheitert, weil ihm ein Schreibpfad fehlt.

Was Teilnehmende mitnehmen

  • Sidecar, Ambassador und Adapter als Multi-Container-Pod-Patterns unterscheiden und benennen, wann ein Hilfscontainer dauerhaft neben dem Hauptcontainer läuft.
  • Begründen, wann ein zweiter Container in denselben Pod gehört (geteilter Lebenszyklus, gemeinsames Volume/Netzwerk-Namespace) und wann er stattdessen ein eigenes Deployment mit eigenem Service braucht.
  • Mit nodeSelector Hardware-Constraints wie GPU-Nodes im Pod-Spec erzwingen.
  • Einen Job mit completions, parallelism und backoffLimit für einmalige Batch-Workloads statt eines Deployments einsetzen.
  • Einen CronJob mit schedule und concurrencyPolicy für wiederkehrende Läufe konfigurieren und nicht-überlappende Ausführung sicherstellen.
  • securityContext auf Pod- und Container-Ebene setzen: runAsNonRoot, readOnlyRootFilesystem, capabilities.drop: [ALL] plus gezieltes add.
  • Einen dedizierten ServiceAccount referenzieren und automountServiceAccountToken: false setzen, sobald die eigene Anwendung nicht mit der Kubernetes-API spricht.

Für wen dieses Modul ideal ist

  • • Entwickler:innen mit abgeschlossenem Modul “Kubernetes Workloads & Konfiguration” oder gleichwertigen Vorkenntnissen
  • • Alle, die demnächst einen Logging-, Proxy- oder Normalisierungs-Hilfsprozess neben ihrer Anwendung einplanen und dafür die richtige Pod-Grenze ziehen wollen
  • • Teams, die einen Migrations- oder Cleanup-Batch-Job bislang als Dauer-Deployment notdürftig nachgebaut haben

Rahmendaten

  • • Dauer: 90 Minuten Input live (remote oder vor Ort), plus 30 Minuten Hands-on
  • • Format: Input, Live-Demo, abschließendes Hands-on zu Sidecar, Security Context und CronJob
  • • Voraussetzungen: abgeschlossenes Modul “Kubernetes Workloads & Konfiguration”, lauffähige lokale Docker-Umgebung, keine Cloud-Kostenwirkung

Modulaufbau & Agenda

  1. Multi-Container-Pod-Patterns (25 min): Sidecar, Ambassador und Adapter im Vergleich, dazu die Abgrenzung, wann ein Hilfscontainer in denselben Pod gehört und wann er ein eigenes Deployment braucht.

  2. Pod-Placement & Batch-Workloads (25 min): nodeSelector für Hardware-Constraints, Job mit completions/parallelism/backoffLimit, CronJob mit schedule/concurrencyPolicy.

  3. Runtime-Absicherung (25 min): securityContext mit runAsNonRoot/readOnlyRootFilesystem/capabilities, ServiceAccount und automountServiceAccountToken: false.

  4. Puffer/Q&A zum Input-Teil (15 min): offene Fragen aus den ersten drei Blöcken, bevor es ins Hands-on geht.

  5. Hands-on (30 min): Sidecar-Manifest mit geteiltem emptyDir anwenden und die Logs des Log-Shippers prüfen, das Manifest um einen restriktiven securityContext ergänzen und den scheiternden Schreibzugriff beobachten, einen CronJob mit concurrencyPolicy: Forbid anwenden und nicht-überlappende Läufe live verifizieren.

Dieses Modul setzt das Aufbaumodul Kubernetes Workloads & Konfiguration — die Objekte für den Alltag voraus. Probes, Rolling Update und der Unterschied zwischen ConfigMap-Volume und ConfigMap-Environment-Variable werden dort erklärt und hier nicht erneut eingeführt.

Wer stattdessen die Betreiber-Perspektive einnehmen will – Namespace/ResourceQuota, RBAC, Cluster-Netzwerk-Grundmodell, Node-Administration und High Availability als Konzept – findet das im gleichrangigen, unabhängigen Vertiefungsmodul Kubernetes Administration — RBAC, Node-Betrieb und Cluster-Netzwerk. Wer Service Discovery, DNS-Verhalten und Ingress-Pfadregeln vertiefen will, findet das im Schwestermodul Kubernetes Networking Vertiefung — Service Discovery, DNS und Ingress-Pfadregeln. Wer stattdessen die Storage-Perspektive einnehmen will – emptyDir und hostPath im Vergleich zu PersistentVolume, PersistentVolumeClaim mit Binding-Regel, AccessModes und StorageClass – findet das im weiteren Schwestermodul Kubernetes Storage — Volumes, PersistentVolumes & Claims. Wer stattdessen wissen will, wie sich eine bereits laufende Anwendung diagnostizieren lässt – Prometheus-Scrape-Annotationen, kubectl top pods, Ephemeral Containers per kubectl debug und die dreistufige Service-Troubleshooting-Kette Port-Forward → Endpoints → DNS-Test-Pod – findet das im weiteren Schwestermodul Kubernetes: Monitoring & Troubleshooting. Wer stattdessen wissen will, wie viel ein Container verbrauchen darf – requests/limits, die drei QoS-Klassen sowie der HorizontalPodAutoscaler – findet das im weiteren Schwestermodul Kubernetes Ressourcenmanagement & Autoscaling — Requests, Limits und HorizontalPodAutoscaler. Wer stattdessen wissen will, wie sich diese Objekte als wiederverwendbares Paket versionieren und verteilen lassen – Chart-Struktur, values.yaml und Release-Verwaltung – findet das im weiteren Schwestermodul Helm — Paketmanagement für Kubernetes. Alle sieben Vertiefungsmodule setzen nur das Workloads-Modul voraus, nicht sich gegenseitig, und lassen sich in beliebiger Reihenfolge buchen.

Wer den hier gelernten securityContext mit RBAC/ ServiceAccounts aus “Kubernetes Administration” zusammenführen und Namespace-weit statt nur pro Workload durchsetzen will – Pod Security Standards und Pod Security Admission mit dem Namespace-Label pod-security.kubernetes.io/enforce=restricted, dazu Secrets-Encryption-at-Rest über eine EncryptionConfiguration jenseits von Base64 – findet das im Aufbaumodul Kubernetes Security Vertiefung — Pod Security Admission & Secrets-Härtung. Anders als die sieben gleichrangigen Vertiefungsmodule oben setzt dieses Aufbaumodul konkret den securityContext dieses Kurses und RBAC/ServiceAccounts aus “Kubernetes Administration” gleichzeitig voraus, nicht nur das gemeinsame Workloads-Fundament.

Hands-on Inhalte (Auszug)

Sidecar mit geteiltem emptyDir

  • Einen Pod mit Hauptcontainer und einem Log-Shipper-Sidecar-Container anwenden, beide über ein gemeinsames emptyDir-Volume verbunden
  • Mit kubectl logs <pod> -c log-shipper live bestätigen, dass der Sidecar die vom Hauptcontainer geschriebenen Log-Zeilen tatsächlich sieht

securityContext live einschränken

  • Dasselbe Manifest um runAsNonRoot, readOnlyRootFilesystem und capabilities.drop: [ALL] ergänzen und neu anwenden
  • Beobachten, dass ein Prozess ohne passendes beschreibbares Volume jetzt scheitert – und einordnen, warum das kein Fehler, sondern die gewollte Absicherung ist

CronJob ohne Überlappung

  • Einen CronJob mit schedule: “*/2 * * * *” und concurrencyPolicy: Forbid anwenden
  • Mit kubectl get cronjob,jobs –watch live verfolgen, dass kein neuer Job startet, solange der vorherige Lauf noch aktiv ist

Musterlösung als Ausgangspunkt

  • Alle drei Manifeste (Sidecar, abgesicherter Sidecar, CronJob) stehen als vollständige Musterlösung bereit – zum Nachvollziehen, nicht zum reinen Abtippen
  • Läuft komplett auf einem lokalen Single-Node-Minikube mit dem docker-Treiber, ohne Ingress oder Tunnel

Mehr zu emptyDir selbst – im Vergleich mit hostPath, PersistentVolume und PersistentVolumeClaim – findet ihr im Vertiefungsmodul Kubernetes Storage — Volumes, PersistentVolumes & Claims. Hier diente emptyDir nur als geteiltes Volume für das Sidecar-Pattern, nicht als eigenständiges Thema.

Dieses Modul ist Teil unserer Pilotphase. Gemeinsam mit euch definieren wir passende Metriken (z. B. Zeit bis zum sauber abgesicherten Sidecar-Manifest) und werten sie im Anschluss transparent aus. Ergebnisse veröffentlichen wir, sobald sie belastbar sind.

Bereit, das Modul zu buchen?

Wir passen die Hands-on-Übung auf euren Erfahrungsstand und eure Zielumgebung an.

Academy Briefing anfragen