Cierre ordenado de nodos en GKE on AWS

A partir de la versión 1.26, GKE en AWS habilita automáticamente Cierre de nodos controlado. Esta función gestiona la finalización correcta de los pods durante los apagados de los nodos. La finalización correcta permite que los pods guarden su estado y liberen recursos antes de que se cierre el nodo. Este método para finalizar pods minimiza el riesgo de pérdida de datos. También minimiza el riesgo de que se produzcan interrupciones en otros pods y servicios que dependan de los pods que se van a cerrar o interactúen con ellos, lo que mejora la resiliencia de tus clústeres.

Cómo funciona

Un evento, como el mantenimiento programado, el escalado de nodos o un problema de hardware, activa el cierre de un nodo. El componente kubelet detecta el evento e inicia el proceso de finalización correcta del nodo indicándole a systemd que retrase el apagado del sistema durante un periodo específico. Este retraso da tiempo al nodo para que se vacíe y expulse los pods que se ejecutan en él.

El objetivo de la finalización correcta de nodos es finalizar correctamente los pods del sistema críticos y no críticos antes de que se cierre el nodo. Se utilizan los siguientes ajustes predeterminados:

  • ShutdownGracePeriod: 30 segundos
  • ShutdownGracePeriodCriticalPods: 15 segundos

Estos ajustes dan a los pods que no son del sistema 15 segundos para que finalicen correctamente antes de que se detengan de forma forzosa. Los pods críticos del sistema tienen 15 segundos para apagarse después de que se hayan terminado los pods que no son del sistema. Sin embargo, como la función se basa en el mejor esfuerzo posible, es posible que un nodo no pueda cerrarse correctamente en el periodo de 30 segundos designado.

Activadores y limitaciones

Entre los eventos que activan el cierre ordenado de nodos se incluyen los eventos planificados, como los siguientes:

  • Apagados iniciados por el usuario
  • Finalización de instancias
  • Mantenimiento programado
  • Reducir verticalmente un clúster

En estos casos, kubelet detecta el evento de cierre del nodo e inicia el proceso de cierre del nodo de forma controlada.

Por el contrario, el cierre ordenado de nodos no se puede activar cuando el comando de cierre no activa el mecanismo de bloqueo del inhibidor systemd del que depende el componente kubelet. Estos son algunos ejemplos de este tipo de situaciones:

  • Desconexiones de red
  • Funcionamiento incorrecto del hardware
  • Recursos insuficientes, como memoria o CPU
  • Cortes de luz inesperados.

En estos casos, el nodo podría cerrarse de forma abrupta, lo que podría provocar interrupciones o pérdida de datos.