Cierre ordenado de nodos en GKE en AWS

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

Cómo funciona

Un evento como el mantenimiento programado, el escalamiento de nodos o un problema de hardware, activa un cierre de nodos. El componente kubelet detecta el evento y, luego, inicia el proceso de finalización ordenado del nodo. Para ello, le indica a systemd que retrase el cierre del sistema durante un período específico. Esta demora le da tiempo al nodo para desviar y expulsar los Pods que se ejecutan en él.

El objetivo de la finalización correcta de los nodos es finalizar de manera correcta los Pods del sistema que no son del sistema y los críticos antes de que se apague el nodo. Se usa la siguiente configuración predeterminada:

  • ShutdownGracePeriod: 30 segundos
  • ShutdownGracePeriodCriticalPods: 15 segundos

Esta configuración proporciona a los Pods que no son del sistema 15 segundos para finalizar de forma correcta antes de que se fuerce la detención. Los Pods críticos del sistema tienen 15 segundos para cerrarse después de que finalizan los Pods que no son del sistema. Sin embargo, como la función opera en función del mejor esfuerzo, existe la posibilidad de que un nodo no pueda cerrarse de forma correcta dentro del período designado de 30 segundos.

Activadores y limitaciones

Los eventos que activan el cierre ordenado de los nodos incluyen eventos planificados como los siguientes:

  • Cierres ordenados por el usuario
  • Rescisión de instancias
  • Mantenimiento programado
  • Reduce verticalmente la escala de un clúster

En estas situaciones, kubelet detecta el evento de cierre del nodo y, luego, inicia el proceso de cierre del nodo ordenado.

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 en el que se basa el componente kubelet. Algunos ejemplos de ese tipo de situaciones son los siguientes:

  • Desconexiones de red
  • Fallas de hardware
  • Recursos insuficientes, como memoria o CPU
  • Interrupciones de energía inesperadas

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