it-wiki:kubernetes:sidecare_containers
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
it-wiki:kubernetes:sidecare_containers [2025/08/01 09:08] – angelegt marko | it-wiki:kubernetes:sidecare_containers [2025/08/06 05:49] (aktuell) – [Ressourcenfreigabe innerhalb von Containern] marko | ||
---|---|---|---|
Zeile 12: | Zeile 12: | ||
Sie können einen Pod auch mit mehreren Containern ausführen, die nicht als Init- oder Sidecar-Container gekennzeichnet sind. Dies ist sinnvoll, wenn die Container innerhalb des Pods für dessen Gesamtfunktionalität erforderlich sind, Sie aber nicht steuern müssen, welche Container zuerst gestartet oder gestoppt werden. Sie können dies auch tun, wenn Sie ältere Versionen von Kubernetes unterstützen müssen, die kein restartPolicy-Feld auf Containerebene unterstützen. | Sie können einen Pod auch mit mehreren Containern ausführen, die nicht als Init- oder Sidecar-Container gekennzeichnet sind. Dies ist sinnvoll, wenn die Container innerhalb des Pods für dessen Gesamtfunktionalität erforderlich sind, Sie aber nicht steuern müssen, welche Container zuerst gestartet oder gestoppt werden. Sie können dies auch tun, wenn Sie ältere Versionen von Kubernetes unterstützen müssen, die kein restartPolicy-Feld auf Containerebene unterstützen. | ||
+ | |||
+ | ===== Sidecar-Container und Pod-Lebenszyklus ===== | ||
+ | |||
+ | Wenn ein Init-Container mit der RestartPolicy „Always“ erstellt wird, wird er gestartet und bleibt während der gesamten Lebensdauer des Pods aktiv. Dies kann hilfreich sein, um unterstützende Dienste getrennt von den Hauptanwendungscontainern auszuführen. | ||
+ | |||
+ | Wenn für diesen Init-Container eine ReadinessProbe angegeben ist, wird deren Ergebnis verwendet, um den Bereitschaftszustand des Pods zu bestimmen. | ||
+ | |||
+ | Da diese Container als Init-Container definiert sind, profitieren sie von denselben Reihenfolge- und Sequenzgarantien wie reguläre Init-Container. So können Sie Sidecar-Container mit regulären Init-Containern für komplexe Pod-Initialisierungsabläufe kombinieren. | ||
+ | |||
+ | Im Vergleich zu regulären Init-Containern werden in initContainern definierte Sidecars nach dem Start weiter ausgeführt. Dies ist wichtig, wenn in .spec.initContainers für einen Pod mehr als ein Eintrag vorhanden ist. Sobald ein Sidecar-Init-Container läuft (das Kubelet hat den Startstatus für diesen Init-Container auf „true“ gesetzt), startet das Kubelet den nächsten Init-Container aus der geordneten .spec.initContainers-Liste. Dieser Status wird entweder dadurch erreicht, dass im Container ein Prozess ausgeführt wird und kein Starttest definiert ist, oder dadurch, dass der Starttest erfolgreich war. | ||
+ | |||
+ | Nach der Pod-Beendigung verschiebt Kubelet die Beendigung der Sidecar-Container, | ||
+ | |||
+ | ===== Jobs mit Sidecar-Containern ===== | ||
+ | |||
+ | Wenn Sie einen Job mit Sidecar-Containern im Kubernetes-Stil definieren, verhindert der Sidecar-Container in jedem Pod nicht, dass der Job nach Abschluss des Hauptcontainers abgeschlossen wird. | ||
+ | |||
+ | ===== Unterschiede zu Anwendungscontainern ===== | ||
+ | |||
+ | Sidecar-Container laufen parallel zu Anwendungscontainern im selben Pod. Sie führen jedoch nicht die primäre Anwendungslogik aus, sondern stellen unterstützende Funktionen für die Hauptanwendung bereit. | ||
+ | |||
+ | Sidecar-Container haben eigene, unabhängige Lebenszyklen. Sie können unabhängig von Anwendungscontainern gestartet, gestoppt und neu gestartet werden. Das bedeutet, dass Sie Sidecar-Container aktualisieren, | ||
+ | |||
+ | Sidecar-Container nutzen dieselben Netzwerk- und Speicher-Namespaces wie der primäre Container. Diese gemeinsame Nutzung ermöglicht eine enge Interaktion und die gemeinsame Nutzung von Ressourcen. | ||
+ | |||
+ | Aus Kubernetes-Sicht ist die ordnungsgemäße Beendigung des Sidecar-Containers weniger wichtig. Wenn andere Container die zugewiesene Zeit für die ordnungsgemäße Beendigung ausschöpfen, | ||
+ | |||
+ | ===== Unterschiede zu Init-Containern ===== | ||
+ | Sidecar-Container arbeiten parallel zum Hauptcontainer, | ||
+ | |||
+ | Sidecar-Container laufen parallel zum Hauptanwendungscontainer. Sie sind während des gesamten Lebenszyklus des Pods aktiv und können unabhängig vom Hauptcontainer gestartet und gestoppt werden. Im Gegensatz zu Init-Containern unterstützen Sidecar-Container Probes zur Steuerung ihres Lebenszyklus. | ||
+ | |||
+ | Sidecar-Container können direkt mit den Hauptanwendungscontainern interagieren, | ||
+ | |||
+ | Init-Container werden vor dem Start der Hauptcontainer gestoppt, sodass sie keine Nachrichten mit dem Anwendungscontainer in einem Pod austauschen können. Der Datenaustausch erfolgt unidirektional (z. B. kann ein Init-Container Informationen in einem emptyDir-Volume ablegen). | ||
+ | |||
+ | Das Ändern des Images eines Sidecar-Containers führt nicht zum Neustart des Pods, sondern löst einen Container-Neustart aus. | ||
+ | |||
+ | ===== Ressourcenfreigabe innerhalb von Containern ===== | ||
+ | Angesichts der Ausführungsreihenfolge für Init-, Sidecar- und App-Container gelten folgende Regeln für die Ressourcennutzung: | ||
+ | |||
+ | * Der höchste Wert einer bestimmten Ressourcenanforderung oder eines Limits, das für alle Init-Container definiert ist, ist die effektive Init-Anforderung/ | ||
+ | |||
+ | * Die effektive Anforderung/ | ||
+ | * der Summe aller Anfragen/ | ||
+ | * der effektiven Init-Anforderung/ | ||
+ | * Die Planung basiert auf den effektiven Anforderungen/ | ||
+ | * Die QoS-Stufe (Qualität des Dienstes) des Pods entspricht der QoS-Stufe für Init-, Sidecar- und App-Container gleichermaßen. | ||
+ | Quoten und Limits werden basierend auf der effektiven Pod-Anforderung und dem Limit angewendet. | ||
+ | |||
+ | ===== Sidecar-Container und Linux-Cgroups ===== | ||
+ | Unter Linux basieren Ressourcenallokationen für Pod-Level-Kontrollgruppen (Cgroups) auf der effektiven Pod-Anforderung und dem Limit, genauso wie beim Scheduler. |
it-wiki/kubernetes/sidecare_containers.1754039311.txt.gz · Zuletzt geändert: von marko