Que se passe-t-il lorsque Kubernetes redémarre des conteneurs ou que le cluster est mis à l'échelle?

Aug 18 2020

Nous utilisons Helm Chart pour déployer une application dans le cluster Kubernetes .

Nous avons un service statefulsets et headless. Pour initialiser mTLS, nous avons créé un type 'job' et dans 'command' nous passons des scripts shell et python sont des arguments. Et créé une sorte de «cronjob» pour mettre à jour le certificat.

Nous avons écrit un 'docker-entrypoint.sh' à l'intérieur de 'docker image' pour un travail d'initialisation et pour générer des certificats TLS.

Questions a poser :

  • Qui (Helm Chart / Kubernetes) s'occupe de la mise à l'échelle / de la surveillance / du redémarrage des conteneurs?
  • Déploie-t-il une nouvelle image Docker si le pod échoue / redémarre?
  • Le docker ENTRYPOINT s'exécutera-t-il après l'échec / le redémarrage du conteneur?
  • Est-ce que 'job' et 'cronjob' s'exécutent si le conteneur redémarre?

Quelles sont les autres mesures prises par Kubernetes? Souhaitez-vous également partager des informations sur les conteneurs?

Réponses

4 ArghyaSadhu Aug 18 2020 at 14:28

Kubernetes et non helm redémarrera un conteneur ayant échoué par défaut, sauf si vous définissez restartPolicy: Neverdans la spécification du pod

Le redémarrage du conteneur est exactement le même que le démarrage initial. Par conséquent, au redémarrage, vous pouvez vous attendre à ce que les choses se passent de la même manière que lors du premier démarrage du conteneur.

L'agent kubelet en interne s'exécutant dans chaque nœud kubernetes délègue la tâche de démarrage d'un conteneur à l' environnement d' exécution du conteneur de plainte OCI tel que docker, containerd, etc. qui fait ensuite tourner l'image docker en tant que conteneur sur le nœud.

Je m'attendrais à ce que le script de point d'entrée soit exécuté à la fois lors du redémarrage d'un conteneur.

Déploie-t-il une nouvelle image Docker si le pod échoue / redémarre?

Il crée un nouveau conteneur avec la même image que celle spécifiée dans la spécification du pod.

Est-ce que 'job' et 'cronjob' s'exécutent si le conteneur redémarre?

Si un conteneur qui fait partie de cronjob échoue, kubernetes continuera à redémarrer (sauf restartPolicy: Neverdans les spécifications du pod) le conteneur jusqu'à ce que le job time ne soit pas considéré comme ayant échoué. Vérifiez ceci pour savoir comment faire en sorte qu'un cronjob ne redémarre pas un conteneur en cas d'échec. Vous pouvez spécifier backoffLimitde contrôler le nombre de tentatives de relance avant que le travail ne soit considéré comme ayant échoué.

La mise à l'échelle équivaut à planifier et à démarrer une autre instance du même conteneur sur le même nœud Kubernetes ou sur un nœud complètement différent.

En remarque, vous devez utiliser une abstraction de plus haut niveau telle que le déploiement au lieu du pod car lorsqu'un pod échoue, Kubernetes essaie de le redémarrer sur le même nœud, mais lorsqu'un déploiement échoue, Kubernetes essaiera de le redémarrer également dans d'autres nœuds s'il n'est pas en mesure de le faire. démarrez le pod sur son nœud planifié actuel.