Table des matières
1 fonctionnalités du conteneur init
2 Utilisation du conteneur init
Le conteneur init dans le pod
Les conteneurs d'initialisation sont des conteneurs spéciaux qui s'exécutent avant le démarrage des conteneurs d'application dans un pod. Le conteneur init peut inclure des utilitaires et des scripts d'installation qui ne sont pas présents dans l'image de l'application.
1 fonctionnalités du conteneur init
Le conteneur init ressemble beaucoup à un conteneur normal, à l'exception de ce qui suit :
-
Ils vont toujours jusqu'au bout. Si le conteneur Init du Pod échoue, le kubelet continuera à redémarrer le conteneur Init jusqu'à ce qu'il réussisse. Cependant, si un pod a
restartPolicy
la valeur "Jamais" et que le conteneur d'initialisation du pod échoue, Kubernetes définira l'état de l'ensemble du pod sur Échec. -
Chacun doit se terminer avec succès avant que le suivant puisse être lancé.
-
De plus, les conteneurs Init ne prennent pas en charge
lifecycle
, et , car ils doivent s'exécuter jusqu'à la fin avant que le pod ne soitlivenessProbe
prêt .readinessProbe
startupProbe
-
Si plusieurs conteneurs Init sont spécifiés pour un pod, ils seront exécutés séquentiellement un par un. Chaque conteneur Init doit s'exécuter avec succès avant que le suivant puisse s'exécuter. Lorsque tous les conteneurs Init ont fini de s'exécuter, Kubernetes initialise le conteneur d'application pour le pod et s'exécute comme d'habitude.
-
Les conteneurs d'initialisation prennent en charge tous les champs et fonctionnalités des conteneurs d'application, y compris les limites de ressources, les volumes de données et les paramètres de sécurité. Cependant, les conteneurs Init gèrent les demandes de ressources et les limites légèrement différemment.
2 Utilisation du conteneur init
Adresse du site Web officiel : Init container | Kubernetes
Le conteneur Init est spécifié dans la spécification Pod containers
parallèlement au tableau décrivant le conteneur d'application.
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']
-
Afficher les détails de démarrage
$ 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