[Cloud native] Die Rolle und Verwendung des Kubernetes-Init-Containers in Pod

Inhaltsverzeichnis

Der Init-Container im Pod

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 restartPolicyden 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 ist livenessProbe.readinessProbestartupProbe

  • 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 containersparallel 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

Ich denke du magst

Origin blog.csdn.net/weixin_53678904/article/details/132156422
Empfohlen
Rangfolge