Inhaltsverzeichnis
1 Funktionen des Init-Containers
2 Verwendung des Init-Containers
Der Init-Container im Pod
Init-Container sind spezielle Container, die vor dem Start der Anwendungscontainer innerhalb eines Pods ausgeführt werden. Der Init-Container kann einige Dienstprogramme und Installationsskripte enthalten, die im Anwendungs-Image nicht vorhanden sind.
1 Funktionen des Init-Containers
Der Init-Container ist einem normalen Container sehr ähnlich, mit Ausnahme der folgenden Ausnahmen:
-
Sie laufen immer bis zum Abschluss. Wenn der Init-Container des Pods fehlschlägt, startet das Kubelet den Init-Container so lange neu, bis es erfolgreich ist. Wenn ein Pod jedoch
restartPolicy
den Wert „Nie“ hat und der Init-Container des Pods fehlschlägt, setzt Kubernetes den Status des gesamten Pods auf „Fehlgeschlagen“. -
Jeder muss erfolgreich abgeschlossen werden, bevor der nächste gestartet werden kann.
-
Außerdem unterstützen Init-Container
lifecycle
, und nicht , da sie vollständig ausgeführt werden müssen, bevor der Pod bereit istlivenessProbe
.readinessProbe
startupProbe
-
Wenn für einen Pod mehrere Init-Container angegeben sind, werden diese nacheinander ausgeführt. Jeder Init-Container muss erfolgreich ausgeführt werden, bevor der nächste ausgeführt werden kann. Wenn alle Init-Container ausgeführt wurden, initialisiert Kubernetes den Anwendungscontainer für den Pod und führt ihn wie gewohnt aus.
-
Init-Container unterstützen alle Felder und Funktionen von Anwendungscontainern, einschließlich Ressourcenlimits, Datenmengen und Sicherheitseinstellungen. Allerdings behandeln Init-Container Ressourcenanforderungen und -beschränkungen etwas anders.
2 Verwendung des Init-Containers
Offizielle Website-Adresse: Init-Container | Kubernetes
Der Init-Container wird in der Pod-Spezifikation containers
parallel zum Array angegeben, das den Anwendungscontainer beschreibt.
apiVersion: v1
kind: Pod
metadata:
name: init-demo
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'echo init-myservice is running! && sleep 5']
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', 'echo init-mydb is running! && sleep 10']
-
Startdetails anzeigen
$ kubectl describe pod init-demo
# 部分结果
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m16s default-scheduler Successfully assigned default/init-demo to k8s-node2
Normal Pulling 2m16s kubelet Pulling image "busybox:1.28"
Normal Pulled 118s kubelet Successfully pulled image "busybox:1.28" in 17.370617268s (17.370620685s including waiting)
Normal Created 118s kubelet Created container init-myservice
Normal Started 118s kubelet Started container init-myservice
Normal Pulled 112s kubelet Container image "busybox:1.28" already present on machine
Normal Created 112s kubelet Created container init-mydb
Normal Started 112s kubelet Started container init-mydb
Normal Pulled 101s kubelet Container image "busybox:1.28" already present on machine
Normal Created 101s kubelet Created container myapp-container
Normal Started 101s kubelet Started container myapp-container