Init-Container sind spezialisierte Container in einem Kubernetes-Pod, die vor den eigentlichen Anwendungscontainern starten und bis zum erfolgreichen Abschluss laufen. Sie bereiten die Umgebung für die App vor — zum Beispiel durch Warten auf einen Dienst, Laden von Konfigurationen oder Ausführen von Datenbank-Migrationen.

So arbeiten Init-Container

Init-Container werden im Feld initContainers der Pod-Spezifikation definiert, getrennt von den regulären Containern. Der kubelet startet sie sequenziell: Erst wenn der erste Init-Container erfolgreich beendet ist, startet der nächste. Sind alle Init-Container durchgelaufen, starten die Hauptcontainer des Pods. Schlägt ein Init-Container fehl, startet der kubelet den Pod gemäß der restartPolicy neu und wiederholt die gesamte Sequenz.

Typische Anwendungsfälle

  • Abhängigkeiten prüfen: Warten, bis eine Datenbank oder ein externer Dienst erreichbar ist, bevor die App startet.
  • Vorbereiten: Konfigurationsdateien herunterladen oder generieren, Git-Repositories klonen, Dateirechte und Eigentümer setzen.
  • Migrationen: Datenbankschemata aktualisieren oder Initialdaten einspielen.

Ein Beispiel: Ein Init-Container prüft mit until nc -z db 3306; do sleep 2; done, ob die Datenbank erreichbar ist — erst dann startet die Anwendung. Solche Aufgaben gehören bewusst in den Init-Container und nicht in die App, damit die App ohne eigene Warteschleife auskommt.

Abgrenzung zu anderen Container-Typen

Anders als ein Sidecar-Container läuft ein Init-Container nicht parallel zum Hauptcontainer, sondern einmalig vor ihm. Init-Container unterstützen keine Readiness-, Liveness- oder Startup-Probes — sie gelten als erfolgreich, wenn sie mit Exit-Code 0 beenden. Ressourcen-Anforderungen gelten auch für Init-Container: Kubernetes berücksichtigt sie bei der QoS-Klasse des Pods. Für die Vorbereitung mounten Init-Container häufig projected volumes, die Konfigurationsdaten bündeln. Geteilte Daten mit den Hauptcontainern laufen typischerweise über ein gemeinsames emptyDir-Volume.

Grundlagen: Pod, Pod-Spezifikation, Container-Runtime, Kubernetes.