Este documento ofrece una breve descripción general de las actualizaciones continuas estándar y, a continuación, detalla las actualizaciones de aumento, un tipo especial de actualización continua. A diferencia de las actualizaciones continuas estándar, las actualizaciones de aumento permiten configurar la velocidad de actualización. Además, permiten controlar el impacto de las actualizaciones en las cargas de trabajo.
Para obtener información sobre cómo habilitar y configurar las actualizaciones de Surge para GKE en AWS, consulte Configurar actualizaciones de Surge de grupos de nodos .
Cómo funcionan las actualizaciones continuas estándar
Algunas actualizaciones de un grupo de nodos, como la modificación de sus anotaciones, no requieren el reinicio de los nodos y, por lo tanto, no generan una actualización continua. Si GKE en AWS puede aplicar cambios a un grupo de nodos sin tener que reiniciar ni recrear recursos, lo hará para evitar interrupciones.
Sin embargo, la mayoría de las actualizaciones de un grupo de nodos en GKE en AWS suelen implicar la cancelación de los nodos existentes y el lanzamiento de nuevos nodos con la configuración actualizada. El proceso de cancelación de nodos existentes puede interrumpir las cargas de trabajo.
De forma predeterminada, GKE en AWS realiza actualizaciones continuas estándar. Este método actualiza los nodos uno a uno y se reemplazan mediante un enfoque de "terminar antes de crear": primero se termina un nodo y luego se lanza uno nuevo actualizado. Esto minimiza las interrupciones, ya que solo se termina y reemplaza un nodo a la vez.
Estos son los pasos que GKE en AWS realiza durante una actualización continua estándar:
- Selecciona un nodo del grupo de nodos y lo marca como no disponible para garantizar que no se inicien nuevos pods en él; esta acción se denomina acordonamiento .
- Reubica los pods activos del nodo acordonado a otros nodos disponibles dentro del clúster. Si otros nodos tienen suficiente capacidad, acomodan los pods expulsados. De lo contrario, el escalador automático del clúster, que permanece activo durante una actualización continua estándar, inicia un escalado vertical y aprovisiona nodos adicionales para garantizar que haya suficiente capacidad para programar los pods expulsados. Para obtener información sobre las medidas adoptadas para proteger las cargas de trabajo durante este proceso, consulte Protección de la carga de trabajo durante el redimensionamiento .
- Termina el nodo acordonado.
- Sustituye el nodo acordonado por uno nuevo con la configuración actualizada.
- Realiza una comprobación del estado del nodo recién operativo. Si el grupo de nodos no supera la comprobación, se marca con el estado
DEGRADED
. Este estado se puede ver ejecutando el comandogcloud container aws node-pools describe
. Cuando un grupo de nodos se marca comoDEGRADED
, es posible que no se programen nuevos pods en los nodos de ese grupo. - Continúa actualizándose, nodo por nodo, hasta que se hayan actualizado todos los nodos del grupo.
Cómo funcionan las actualizaciones de sobretensión
En GKE en AWS, el método continuo estándar actualiza los nodos uno a uno. Las actualizaciones de aumento, que son un tipo de actualización continua, permiten actualizar varios nodos simultáneamente. Por lo tanto, las actualizaciones de aumento son más rápidas que las actualizaciones continuas estándar. Sin embargo, actualizar varios nodos simultáneamente puede interrumpir las cargas de trabajo. Para mitigar esto, las actualizaciones de aumento ofrecen opciones para modular el nivel de interrupción de las cargas de trabajo.
Otra diferencia entre las actualizaciones de sobretensión y las actualizaciones continuas estándar es la forma en que se reemplazan los nodos. Las actualizaciones continuas estándar reemplazan los nodos mediante una estrategia de "terminar antes de crear". Según la configuración elegida, las actualizaciones de sobretensión pueden usar una estrategia de "crear antes de terminar", una estrategia de "terminar antes de crear" o incluso una combinación de ambas.
El escalador automático del clúster juega un papel más importante en las actualizaciones repentinas que en las actualizaciones continuas estándar, por lo que ocupa un lugar destacado en la siguiente lista de acciones que GKE en AWS realiza durante una actualización repentina:
- Creación de un nuevo grupo de escalamiento automático : GKE en AWS aprovisiona nuevos nodos con las modificaciones especificadas por el comando de actualización y asigna estos nuevos nodos a un nuevo grupo de escalamiento automático de AWS (ASG).
- Comportamiento del escalador automático de clúster : Al iniciarse la actualización de Surge, se activa el escalador automático de clúster para el nuevo grupo de escalado automático. Se desactiva el escalador automático de clúster para el grupo de escalado automático original. Esto garantiza que las operaciones de escalado se dirijan únicamente al nuevo grupo.
- Reemplazo de nodos : Dependiendo de los parámetros de actualización de sobretensión, se utilizan diferentes estrategias para el reemplazo de nodos:
- "Crear antes de terminar": esta estrategia se activa cuando el parámetro
max-surge-update
tiene un valor mayor que cero. Genera nuevos nodos en el nuevo ASG antes de terminar los antiguos en el ASG original, con el fin de minimizar las interrupciones del servicio. - "Terminar antes de crear": este método se activa cuando el parámetro
max-surge-update
se establece en cero y el parámetromax-unavailable-update
tiene un valor mayor que cero. Los nodos del ASG original se terminan primero, seguidos de la creación de nuevos nodos en el nuevo ASG.
- "Crear antes de terminar": esta estrategia se activa cuando el parámetro
- Ajustes del tamaño del grupo de nodos : durante la actualización, el tamaño del grupo de nodos (es decir, la suma de nodos en el ASG antiguo y el nuevo) podría fluctuar por encima o por debajo del recuento original de nodos presentes en el grupo de nodos antes de que comenzara la actualización. Específicamente, GKE en AWS tiene como objetivo mantener el recuento total de nodos dentro del rango de (
original_count
-max-unavailable-update
) a (original_count
+max-surge-update
). Finalmente, los nodos en el ASG antiguo (original_count
) se reemplazan con nodos actualizados en el nuevo ASG. El escalador automático del clúster podría lanzar más nodos en el nuevo ASG si detecta que los pods no se pueden programar, pero se mantiene dentro de los límites definidos pormin-nodes
ymax-nodes
.
Un ejemplo para ilustrar el proceso
Para comprender mejor cómo funcionan las actualizaciones de sobretensión, considere el siguiente ejemplo. Supongamos que tiene un grupo de nodos con 5 nodos y ejecuta el siguiente comando:
gcloud container aws node-pools update production-node-pool
--cluster my-cluster \
--location us-west1 \
--max-surge-update 2 \
--max-unavailable-update 1 \
--node-version 1.27.6-gke.700
En este ejemplo, max-surge-update
se establece en 2, max-unavailable-update
se establece en 1 y está proporcionando una nueva versión del grupo de nodos (es decir, está cambiando la versión de GKE que se ejecuta en los nodos del grupo de nodos).
Al ejecutar este comando se activa una actualización repentina y GKE en AWS realiza las siguientes acciones:
- Crea 2 nodos adicionales porque el valor de
max-surge-update
es igual a 2. - Asigna estos 2 nodos adicionales a un nuevo grupo de escalamiento automático de AWS.
- Elimina nodos del grupo de escalado automático original una vez que estos nuevos nodos están operativos. GKE en AWS desactiva hasta 3 nodos (el valor combinado de
max-surge-update
ymax-unavailable-update
), pero garantiza que, como máximo, solo un nodo deje de estar disponible a la vez (debido al valor demax-unavailable-update
de 1). - Repita estos pasos hasta que todos los nodos del grupo de nodos se hayan actualizado a la nueva versión de GKE.
Durante esta actualización, el grupo de nodos contiene entre 4 y 7 nodos operativos.
Cosas a tener en cuenta antes de ejecutar actualizaciones de sobretensión
Antes de ejecutar una actualización repentina, tenga en cuenta lo siguiente:
- Las instancias adicionales creadas como parte de este incremento podrían exceder su límite de cuota de instancias de AWS. Si no tiene suficiente cuota y no se pueden aprovisionar estas instancias adicionales, la actualización podría fallar.
- Si
max-unavailable-update
se establece en 0, aún pueden ocurrir interrupciones en las cargas de trabajo a medida que los pods se expulsan y se reprograman en los nodos más nuevos. - La cantidad máxima de nodos que se pueden actualizar simultáneamente es igual a la suma de
max-surge-update
ymax-unavailable-update
, y está limitada a 20.
Elija la configuración de sobretensión adecuada para sus necesidades
Mientras que las actualizaciones continuas estándar suelen utilizar un enfoque de "finalizar antes de crear", las actualizaciones de aumento ofrecen mayor flexibilidad. Según la configuración, las actualizaciones de aumento pueden seguir una estrategia de "crear antes de finalizar", una estrategia de "finalizar antes de crear" o una combinación de ambas. Esta sección describe diferentes configuraciones para ayudarle a seleccionar el mejor enfoque para sus cargas de trabajo.
La siguiente tabla muestra tres configuraciones de ejemplo y destaca su impacto en la velocidad de la actualización y la posible interrupción de sus cargas de trabajo:
Nombre | Descripción | Configuración |
Configuración equilibrada (predeterminada) | Equilibrado, más lento pero menos disruptivo. | maxSurge=1, maxUnavailable=0 |
Actualizaciones rápidas sin recursos adicionales | Rápido, sin sobrecarga de recursos, más disruptivo. | maxSurge=0, maxUnavailable=20 |
Actualizaciones rápidas y menos disruptivas | Rápido, con mayor cantidad de recursos y menos interrupciones. | maxSurge=20, maxUnavailable=0 |
Cada una de las configuraciones de la tabla se describe en las siguientes secciones.
Configuración equilibrada (predeterminada)
La forma más sencilla de usar las actualizaciones de Surge es con la configuración predeterminada de max-surge-update=1
y max-unavailable-update=0
. Esta configuración añade solo un nodo de Surge al grupo de nodos durante la actualización, y solo se actualiza un nodo a la vez, siguiendo un enfoque de "crear antes de terminar". En comparación con la actualización continua estándar sin Surge, que equivale a ( max-surge-update=0
, max-unavailable-update=1
), este método es menos disruptivo, acelera los reinicios del pod durante las actualizaciones y es más conservador en su progresión.
Es importante tener en cuenta que adoptar la configuración equilibrada puede generar costos adicionales debido al nodo de sobretensión temporal añadido durante la actualización. Este nodo adicional genera cargos mientras está activo, lo que aumenta ligeramente el gasto total en comparación con los métodos sin nodos de sobretensión.
Actualizaciones rápidas sin recursos adicionales
Para cargas de trabajo que toleran interrupciones, un enfoque de actualización más rápido podría ser adecuado. Configurar max-surge-update=0
y max-unavailable-update=20
logra esto. Con esta configuración, se pueden actualizar 20 nodos simultáneamente sin agregar ningún nodo de aumento repentino. Este método de actualización sigue un enfoque de "terminar antes de crear". Dado que no se agregan nodos de aumento repentino adicionales durante el proceso, este método también es el más rentable, ya que evita los gastos adicionales asociados con los nodos temporales.
Actualizaciones rápidas y menos disruptivas
Si sus cargas de trabajo son susceptibles a interrupciones, puede aumentar la velocidad de actualización con las siguientes configuraciones: max-surge-update=20
y max-unavailable-update=0
. Esta configuración actualiza 20 nodos en paralelo con un sistema de "crear antes de terminar".
Sin embargo, la velocidad general de la actualización puede verse limitada si ha configurado PodDisruptionBudgets
(PDB) para sus cargas de trabajo. Esto se debe a que el PDB restringe la cantidad de pods que se pueden vaciar en un momento dado. Aunque la configuración de los PDB puede variar, si crea un PDB con un valor maxUnavailable
igual a 1 para una o más cargas de trabajo que se ejecutan en el grupo de nodos, solo se podrá vaciar un pod de esas cargas de trabajo a la vez, lo que limita el paralelismo de toda la actualización.
Recuerde que iniciar varios nodos de aumento al inicio del proceso de actualización puede generar un aumento temporal en los costos, especialmente en comparación con configuraciones que no agregan nodos adicionales o agregan menos nodos durante las actualizaciones.
¿Qué sigue?
Para obtener información sobre cómo habilitar y configurar las actualizaciones de Surge para GKE en AWS, consulte Configurar actualizaciones de Surge de grupos de nodos .