¿Qué sucede cuando kubernetes reinicia los contenedores o el clúster se escala?

Aug 18 2020

Estamos utilizando Helm Chart para implementar aplicaciones en el clúster de Kubernetes .

Contamos con un servicio statefulsets y headless. Para inicializar mTLS, hemos creado un tipo de 'trabajo' y en 'comando' estamos pasando scripts de shell y python como argumentos. Y creó un tipo de 'cronjob' para actualizar el certificado.

Hemos escrito un 'docker-entrypoint.sh' dentro de una 'imagen de docker' para algunos trabajos de inicialización y para generar certificados TLS.

Preguntas que hacer :

  • ¿Quién (Helm Chart / Kubernetes) se encarga de escalar / monitorear / reiniciar los contenedores?
  • ¿Implementa una nueva imagen de Docker si el pod falla o se reinicia?
  • ¿ Docker ENTRYPOINT se ejecutará después de que el contenedor falle o se reinicie?
  • ¿Se ejecuta 'trabajo' y 'cronjob' si el contenedor se reinicia?

¿Cuáles son los otros pasos que sigue Kubernetes? ¿También compartiría información sobre contenedores?

Respuestas

4 ArghyaSadhu Aug 18 2020 at 14:28

Kubernetes y no helm reiniciarán un contenedor fallido de forma predeterminada a menos que lo establezca restartPolicy: Neveren las especificaciones del pod

Reiniciar el contenedor es exactamente lo mismo que iniciarlo por primera vez. Por lo tanto, al reiniciar, puede esperar que las cosas sucedan de la misma manera que sucedería al iniciar el contenedor por primera vez.

Internamente, el agente de kubelet que se ejecuta en cada nodo de kubernetes delega la tarea de iniciar un contenedor en el tiempo de ejecución del contenedor de quejas de OCI , como docker, containerd, etc., que luego hace girar la imagen de la ventana acoplable como un contenedor en el nodo.

Esperaría que el script de punto de entrada se ejecute en ambos inicios y reinicio de un contenedor.

¿Implementa una nueva imagen de Docker si el pod falla o se reinicia?

Crea un nuevo contenedor con la misma imagen que se especifica en la especificación del pod.

¿Se ejecuta 'trabajo' y 'cronjob' si el contenedor se reinicia?

Si un contenedor que forma parte de la tarea programada no kubernetes mantendrán reiniciar (a menos que restartPolicy: Neverdentro de las especificaciones vaina) del recipiente hasta que el trabajo a tiempo no se considera como fallida .Comprobar esto para saber cómo hacer una tarea programada se reinicia un contenedor en caso de fallo. Puede especificar backoffLimitcontrolar el número de veces que se reintentará antes de que el trabajo se considere fallido.

La ampliación es equivalente a programar e iniciar otra instancia del mismo contenedor en el mismo nodo de Kubernetes o en un nodo completamente diferente.

Como nota al margen, debe usar una abstracción de nivel superior, como la implementación en lugar del pod, porque cuando un pod falla, Kubernetes intenta reiniciarlo en el mismo nodo, pero cuando falla una implementación, Kubernetes también intentará reiniciarlo en otros nodos si no puede hacerlo. inicie el pod en su nodo programado actual.