Durante el ciclo de vida de un clúster de GKE de larga duración, se producen interrupciones periódicas en las cargas de trabajo debido a interrupciones de la infraestructura que Cloud de Confiance by S3NS emite. Estos eventos automáticos pueden ocurrir para responder a decisiones de programación (eventos de interrupción) o actualizaciones de nodos, que incluyen actualizaciones automáticas de nodos de GKE (eventos de mantenimiento) o corrección de problemas detectados (eventos de finalización).
Este documento te ayuda a comprender qué significa la interrupción de nodos en GKE y a minimizar el impacto de la interrupción en tus nodos de GKE.
Para obtener detalles sobre la supervisión de notificaciones y eventos de mantenimiento, consulta Supervisa eventos de mantenimiento.
Este documento se aplica a los siguientes tipos de máquinas:
- Tipos de máquinas con GPU o TPU conectadas
- Tipos de máquinas Z3 con más de 18 TiB de SSD de Titanium conectadas
- Tipos de máquinas H4D
- Instancias de Bare Metal de la serie de máquinas C4A . Para obtener más información, consulta la sección Requisitos y limitaciones en el documento "Cargas de trabajo de Arm en GKE".
- Nodos de GKE confidenciales que usan tipos de máquinas que no admiten la migración en vivo.
Este documento está destinado a administradores y operadores de plataformas que administran el ciclo de vida de la infraestructura técnica subyacente. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el Cloud de Confiance by S3NS contenido de, consulta Roles y tareas comunes del usuario de GKE.
¿Qué significa la interrupción de la infraestructura en GKE?
Tus clústeres de GKE administran el ciclo de vida de los nodos de GKE. Estos nodos se aprovisionan en VMs de Compute Engine, que experimentan periódicamente las siguientes interrupciones:
Corrección de problemas detectados (
TerminationEvent): Estos eventos ocurren porque Cloud de Confiance by S3NS detecta un problema e interrumpe la infraestructura de tu clúster. Los eventosTerminationEventno admiten el cierre correcto. Los eventosTerminationEventse activan por los siguientes problemas:- La reparación automática ocurre cuando GKE repara un nodo después de verificaciones de estado fallidas repetidas.
- HostError ocurre cuando un error de hardware o software en la máquina física hace que la VM se detenga.
Eventos de mantenimiento o actualización (
MaintenanceEvent): Estos eventos ocurren cuando Cloud de Confiance by S3NS debe interrumpir una VM para realizar el mantenimiento. Estos eventos se activan con las siguientes tareas de mantenimiento:- Los eventos de mantenimiento ocurren cuando Cloud de Confiance by S3NS actualiza el host subyacente.
- Las actualizaciones de nodos, que incluyen las actualizaciones automáticas de nodos, ocurren cuando GKE actualiza la configuración del nodo, como la versión de GKE.
Para obtener más información sobre cómo tú y GKE administran los cambios durante el ciclo de vida de un clúster, consulta Tipos de cambios.
Respuesta a las decisiones de programación (
PreemptionEvent): Estos eventos ocurren cuando Cloud de Confiance by S3NS debe interrumpir las VMs para que la capacidad esté disponible para los recursos de mayor prioridad. Los eventosPreemptionEventpueden ser cualquiera de los siguientes:- Expulsión: Ocurre cuando se interrumpe la infraestructura interrumpible o Spot para alojar una VM de mayor prioridad.
- Desfragmentación: Ocurre cuando GKE interrumpe una porción de TPU más pequeña para alojar una porción de TPU más grande. La desfragmentación solo ocurre en porciones de TPU.
Durante el ciclo de vida de un clúster de GKE de larga duración, los nodos pueden experimentar interrupciones periódicas en las cargas de trabajo. Cuando estas interrupciones afectan a los nodos de GKE que ejecutan tus cargas de trabajo, GKE debe reiniciar las cargas de trabajo en ejecución y el nodo subyacente.
Por qué los nodos que no admiten la migración en vivo requieren administración de interrupciones
La mayoría de las VMs de Compute Engine, con algunas excepciones, tienen su
política de mantenimiento del host configurada
para la migración en vivo, lo que
significa que las cargas de trabajo en ejecución suelen experimentar poca o ninguna interrupción.
Sin embargo, ciertas clases de VMs no admiten
la migración en vivo, incluidas las VMs con
GPU conectadas
y
TPU, los tipos de máquinas Z3 con más
de 18 TiB de SSD, los tipos de máquinas H4D y el tipo de máquina dec4a-highmem-96-metal
máquina. Por ejemplo, cuando ocurre un evento de host en la VM dentro de una porción de TPU, se interrumpe toda la porción y, luego, se vuelve a programar porque todos los eventos de mantenimiento se coordinan a nivel de la porción. Por lo tanto, si creas una porción de TPU que tiene cientos de VMs, todas esas VMs recibirán la misma programación de eventos de mantenimiento.
Cuando ocurre un evento de host, GKE finaliza el nodo y sus Pods. Si los Pods se implementan como parte de una carga de trabajo más grande, como un trabajo o implementación, GKE reinicia los Pods en el nodo afectado.
Administra eventos de mantenimiento
En el resto de este documento, se describe cómo administrar las interrupciones de MaintenanceEvent.
La administración de la interrupción de nodos durante los eventos de mantenimiento del host sigue un flujo de trabajo de tres etapas:
- Detecta el mantenimiento programado del host: Usa etiquetas de nodos de GKE, extremos de metadatos o registros.
- Actúa sobre el mantenimiento detectado: Si se programa el mantenimiento, evalúa tu infraestructura y cargas de trabajo, y determina la mejor acción para tu caso de uso. Realiza la acción adecuada, como permitir que el sistema controle el evento de mantenimiento de forma automática, iniciar el mantenimiento del host de forma manual o coordinar estrategias de mantenimiento.
- Verifica el resultado del evento de mantenimiento: Verifica que el evento de mantenimiento se haya iniciado correctamente, ya sea cuando Compute Engine inicia el evento de mantenimiento según la programación o cuando lo inicias de forma manual.
Detecta el mantenimiento programado del host
Para supervisar y detectar los próximos eventos de mantenimiento, debes ver las notificaciones de GKE y Compute Engine.
Para obtener detalles sobre la supervisión de notificaciones y eventos de mantenimiento, consulta Supervisa eventos de mantenimiento.
Actúa sobre el mantenimiento detectado
Si ves una notificación de mantenimiento programado próximo para uno o más nodos de tu clúster, usa el siguiente árbol de decisión para determinar la mejor manera de controlar la interrupción:
Mantenimiento automático: Permite que Compute Engine inicie el evento de mantenimiento según la programación. Tus VMs se migrarán en vivo automáticamente en segundo plano con interrupciones mínimas o nulas.
- Si la VM del host admite la migración en vivo, te recomendamos que permitas que el evento de mantenimiento se produzca de forma automática.
- Si tus cargas de trabajo se ejecutan en nodos flexibles inactivos, puedes optimizar el tiempo de mantenimiento de forma automática configurando el mantenimiento oportunista. Esto activa las actualizaciones necesarias solo durante los períodos de tiempo de inactividad natural.
Inicia un evento de mantenimiento del host de forma manual: Evalúa las siguientes preguntas para determinar la mejor manera de controlar la interrupción de forma manual:
¿Los nodos afectados son VMs únicas o aisladas?
- Sí (ejecuto una VM única o aislada):
- Si no necesitas controles de tiempo precisos, permite que Compute Engine inicie el evento de mantenimiento según la programación (automático predeterminado).
- Si necesitas evitar la interrupción inesperada, inicia de forma manual el evento de mantenimiento del host en el nodo individual en un momento conveniente, por ejemplo, durante períodos de tráfico menor.
- No (ejecuto un grupo de nodos de aceleradores): Elige una de las opciones del siguiente paso.
- Sí (ejecuto una VM única o aislada):
Elige una de las siguientes opciones según tu caso de uso:
Si tu grupo de aceleradores ejecuta tareas de entrenamiento de IA/AA acopladas: implementa la estrategia paralela. Guarda el estado de entrenamiento en un punto de control, cierra el grupo de forma correcta y realiza actualizaciones del host y del clúster de GKE de forma simultánea antes de reiniciar.
Si tu grupo de aceleradores ejecuta extremos de entrega de IA/AA de alta disponibilidad o de inferencia: Implementa la estrategia de implementación continua. Coordina el mantenimiento programado del host y las actualizaciones de versión en lotes continuos dentro de los límites de tu zona o grupo, usando réplicas activas para proteger los ANS.
Inicia un evento de mantenimiento del host de forma manual en VMs únicas o aisladas
Puedes iniciar el mantenimiento reprogramable de forma manual cuando se ajuste a tu programación, por ejemplo, durante períodos de baja actividad. Para ello, aplica la etiqueta cloud.google.com/perform-maintenance=true si se cumplen las siguientes condiciones:
- Compute Engine emite una notificación sobre un evento de mantenimiento programado.
- El evento de mantenimiento subyacente de Compute Engine se puede reprogramar. Para verificar
si el evento se puede reprogramar, busca la notificación
can_reschedule=TRUEen los metadatos del evento. Si el evento no se puede reprogramar, configurar la etiquetacloud.google.com/perform-maintenance=trueno tiene ningún efecto, y el mantenimiento se realiza en el horario programado originalmente.
Si se cumplen las condiciones anteriores, en un nodo del grupo de nodos, establece la etiqueta de nodo cloud.google.com/perform-maintenance en true. Por ejemplo:
kubectl label nodes <node-name> cloud.google.com/perform-maintenance=true
Si inicias un evento de mantenimiento, GKE ejecuta las siguientes operaciones:
- Daña el nodo.
- Expulsa los Pods de forma correcta.
- Solicita a Compute Engine que inicie el evento de mantenimiento de inmediato, en lugar de esperar el horario programado.
Verifica el resultado del evento de mantenimiento
Después de detectar un próximo evento de mantenimiento y decidir el mejor curso de acción, puedes verificar el resultado del evento de mantenimiento.
Compute Engine inicia el evento de mantenimiento según la programación
Cuando comienza el evento de mantenimiento, un nodo puede apagarse una o más veces con un breve tiempo de notificación antes de su finalización inminente. En estos casos, GKE hace su mejor esfuerzo para finalizar las cargas de trabajo y expulsar los Pods de forma correcta.
Comienza el mantenimiento programado
Cuando comienza el mantenimiento programado, Compute Engine actualiza los metadatos en el directorio http://metadata.google.internal/computeMetadata/v1/instance/attributes/. Compute Engine actualiza las etiquetas de metadatos de la siguiente manera:
- Establece
maintenance-eventenTERMINATE_ON_HOST_MAINTENANCE. - En
upcoming-maintenance, establecemaintenance_statusenONGOING.
GKE detecta y controla el evento de mantenimiento programado del host, ya sea que lo actives de forma manual o permitas que GKE continúe automáticamente.
La siguiente métrica del sistema de GKE informa el recuento de interrupciones para un nodo de GKE desde la última muestra (la métrica se muestrea cada 60 segundos):
kubernetes.io/node/interruption_count
Los campos interruption_type (como TerminationEvent, MaintenanceEvent o PreemptionEvent) y interruption_reason (como HostError, Eviction o AutoRepair) pueden ayudar a proporcionar el motivo por el que se interrumpió un nodo.
Para obtener un desglose de las interrupciones y sus causas en los nodos de TPU de los clústeres de tu proyecto, usa la siguiente consulta de PromQL:
sum by (interruption_type,interruption_reason)(
sum_over_time(
kubernetes_io:node_interruption_count{monitored_resource="k8s_node"}[${__interval}]))
Para ver solo los
eventos de mantenimiento del host,
actualiza la consulta para filtrar el HW/SW Maintenance valor para el interruption_reason. Usa la siguiente consulta de PromQL:
sum by (interruption_type,interruption_reason)(
sum_over_time(
kubernetes_io:node_interruption_count{monitored_resource="k8s_node", interruption_reason="HW/SW Maintenance"}[${__interval}]))
Para ver el recuento de interrupciones agregado por grupo de nodos, usa la siguiente consulta de PromQL:
sum by (node_pool_name,interruption_type,interruption_reason)(
sum_over_time(
kubernetes_io:node_pool_interruption_count{monitored_resource="k8s_node_pool", interruption_reason="HW/SW Maintenance", node_pool_name=NODE_POOL_NAME }[${__interval}]))
Configuraciones avanzadas para minimizar las interrupciones
En esta sección, se describen herramientas adicionales para configurar tu clúster y cargas de trabajo para minimizar las interrupciones.
Habilita el control de interrupciones
apiVersion: v1
kind: ConfigMap
metadata:
name: gke-disruption-handling
namespace: kube-system
data:
maintenance-experience.yaml: |
gracefulTermination: true
Para habilitar el control de interrupciones, crea un archivo llamado maintenance-config.yaml con este ConfigMap. Aplica el ConfigMap al clúster con el siguiente comando:
kubectl apply -f my-configmap.yaml
Configura GKE para finalizar tus cargas de trabajo de forma ordenada
En esta sección, configurarás GKE para administrar el ciclo de vida de tu aplicación y minimizar la interrupción de tu carga de trabajo. Si no configuras un período de gracia, el valor predeterminado es de 30 segundos.
GKE hace su mejor esfuerzo para finalizar estos Pods de forma correcta y ejecutar la acción de finalización que definiste, por ejemplo, guardar un estado de entrenamiento. GKE envía una señal SIGTERM a los Pods al comienzo del período de gracia. Si los Pods no salen al final del período de gracia, GKE envía una señal SIGKILL de seguimiento a todos los procesos que aún se ejecutan en cualquier contenedor del Pod.
Para configurar el período de finalización correcta, establece el período de gracia de finalización (en segundos) en el campo spec.terminationGracePeriodSeconds del manifiesto de tu Pod. Por ejemplo, para obtener un tiempo de notificación de 10 minutos, establece el campo spec.terminationGracePeriodSeconds en el manifiesto de tu Pod en 600 segundos de la siguiente manera:
spec:
terminationGracePeriodSeconds: 600
Te recomendamos que establezcas un período de gracia de finalización que sea lo suficientemente extenso como para que cualquier tarea en curso finalice en el período de notificación.
Si tu carga de trabajo usa un framework de AA, como MaxText, Pax o JAX con
Orbax, las cargas de trabajo
pueden capturar la señal SIGTERM de apagado e iniciar un proceso de punto de control.
Para obtener más información, consulta Autocheckpoint de TPU.
Proceso de finalización correcta
Cuando comienza un evento de mantenimiento iniciado de forma manual, Compute Engine indica el cierre inminente de la máquina actualizando la clave de metadatos maintenance-event.
GKE inicia la finalización correcta.
En el siguiente flujo de trabajo, se muestra cómo GKE ejecuta la finalización correcta de nodos cuando hay un cierre de nodos inminente:
- En un plazo de 60 segundos, ocurre lo siguiente:
- Los componentes del sistema aplican la etiqueta de nodo
cloud.google.com/active-node-maintenanceestablecida enONGOINGpara indicar que se detienen las cargas de trabajo. - GKE aplica el taint de nodo para evitar que se programen Pods nuevos en el nodo. El taint tiene la clave
cloud.google.com/impending-node-termination:NoSchedule. Te recomendamos que no modifiques tus cargas de trabajo para tolerar este taint debido a la terminación conocida que se produce.
- Los componentes del sistema aplican la etiqueta de nodo
- El componente de controlador de mantenimiento comienza a expulsar Pods. Primero, expulsa los Pods de carga de trabajo y, luego, los Pods del sistema (por ejemplo, kube-system).
- GKE envía una señal de apagado
SIGTERMa los Pods de carga de trabajo que se ejecutan en el nodo para alertarlos de un cierre inminente. Los Pods pueden usar esta alerta para finalizar cualquier tarea en curso. GKE hace su mejor esfuerzo para finalizar estos Pods de forma correcta. - Una vez que finaliza la expulsión, GKE actualiza el valor de la etiqueta
cloud.google.com/active-node-maintenanceaterminatingpara indicar que el nodo está listo para finalizar.
Luego, se produce la finalización del nodo y se asigna un nodo de reemplazo. GKE borra las etiquetas y los taints cuando finaliza el proceso. Para aumentar el período de finalización de tus cargas de trabajo con GPU o TPU, completa los pasos de la sección Inicia un evento de mantenimiento del host de forma manual.
Verifica el progreso de una finalización correcta activa
Puedes filtrar los registros de GKE por los siguientes eventos de finalización correcta:
- Cuando la VM detecta una interrupción debido a una finalización de nodo inminente, como un evento de mantenimiento del host de Compute Engine, GKE establece
cloud.google.com/active-node-maintenanceenONGOINGcuando se detienen las cargas de trabajo y enterminatingcuando finalizan las cargas de trabajo y el nodo está listo para finalizar. - Cuando se restringen las cargas de trabajo nuevas para que no se programen, GKE aplica el taint
cloud.google.com/impending-node-termination:NoSchedule.
Minimiza la interrupción de las cargas de trabajo en ejecución con el mantenimiento oportunista
Puedes minimizar la interrupción de las cargas de trabajo en ejecución activando automáticamente el mantenimiento cuando GKE detecta que los nodos con GPU o TPU están inactivos. Para habilitar esta función, crea un grupo de nodos nuevo. No puedes habilitar el mantenimiento oportunista en un grupo de nodos existente.
Crea un grupo de nodos nuevo con mantenimiento oportunista
En el siguiente comando, se muestra cómo puedes crear un grupo de nodos con el mantenimiento oportunista habilitado:
gcloud beta container node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--accelerator ACCELERATOR_ARG \
--machine-type MACHINE_TYPE \
--num-nodes NODE_COUNT \
--zone ZONE \
--project=PROJECT_ID \
--opportunistic-maintenance=node-idle-time=NODE_IDLE_TIME,min-nodes=MIN_NODES,window=WINDOW
Reemplaza los siguientes valores:
NODE_POOL_NAME: Es el nombre de tu grupo de nodos de GKE.CLUSTER_NAME: Es el nombre del clúster de GKE.NODE_IDLE_TIME: Es la cantidad de tiempo que un nodo puede permanecer inactivo (es decir, no se ejecutan cargas de trabajo que consuman aceleradores) antes de que se active el mantenimiento. El valor representa la duración en segundos, con hasta nueve dígitos decimales, y termina con elscarácter, por ejemplo:80000s.MIN_NODES: Es la cantidad mínima de nodos que deben estar disponibles en un grupo de nodos. Esta opción bloquea el mantenimiento si hace que la cantidad de nodos en ejecución sea inferior a este valor, por ejemplo:10.WINDOW: Es el período, en segundos, en el que se puede ejecutar el mantenimiento oportunista. El valor termina con un carácters. Por ejemplo, un valor de 14 días, o1209600s, implica que el mantenimiento oportunista solo se puede ejecutar en las dos semanas anteriores a la fecha de mantenimiento programada. Un valor de 28 días, o2419200s, permite que el mantenimiento oportunista se ejecute en cualquier momento durante el período de mantenimiento programado. Este período para el mantenimiento del host de Compute Engine es distinto de los períodos de mantenimiento de GKE, que determinan cuándo puede ocurrir el mantenimiento del clúster de GKE y se configuran por separado.
Ejemplo de configuración para el mantenimiento oportunista
Considera el siguiente ejemplo: Tienes un grupo de nodos con cuatro nodos y la configuración de mantenimiento oportunista se establece en --opportunistic-maintenance=node-idle-time=600s,window=2419200s,min-nodes=3.
En esta situación, ocurre lo siguiente:
node1tiene una carga de trabajo de GPU en ejecución. Este nodo no está inactivo, por lo que se omite.node2ha estado inactivo durante 60 segundos. Este nodo no ha estado inactivo durante el tiempo suficiente, por lo que se omite.node3ha estado inactivo durante 600 segundos. Este nodo cumple con el requisito de inactividad.node4ha estado inactivo durante 600 segundos. Este nodo cumple con el requisito de inactividad.
Tanto node3 como node4 cumplen con el requisito de inactividad. Sin embargo, solo uno de estos nodos activará el mantenimiento oportunista porque el valor de la opción min-nodes se establece en 3.
Verifica la configuración y el estado de los nodos con mantenimiento oportunista
Ejecuta el siguiente comando para verificar si el mantenimiento oportunista está configurado para un nodo:
kubectl describe node NODE_NAME | grep node.gke.io/opportunistic-config
Reemplaza NODE_NAME por el nombre del nodo que deseas verificar.
Verifica si un nodo configurado con mantenimiento oportunista está en mantenimiento:
kubectl describe node NODE_NAME | grep node.gke.io/maintenance-state
Si el nodo se activa con el mantenimiento oportunista, la anotación maintenance-state muestra opportunistic-triggered como true.
Limitaciones
Ten en cuenta las siguientes limitaciones del mantenimiento oportunista:
- Esta función solo se puede usar con grupos de nodos de GPU y TPU.
- El mantenimiento oportunista no es compatible con el ajuste de escala automático del clúster porque el escalador automático del clúster ya reduce la escala de los nodos inactivos.
- Para los grupos de nodo TPU de varios hosts, el valor de la configuración
min-nodes-per-pooldebe ser0porque estos grupos de nodos son atómicos. - La versión mínima admitida de GKE es 1.33.3-gke.1118000.
- Solo se admite el mantenimiento planificado que incluye la
can_reschedule=TRUEnotificación. - Para inhabilitar esta función, debes volver a crear el grupo de nodos sin las marcas respectivas. También puedes inhabilitar la función de forma manual en nodos específicos con
cloud.google.com/opportunistic-disable=true. - En casos excepcionales, el mantenimiento puede tardar más en finalizar en un nodo.
Los clientes que usan esta función pueden experimentar menos nodos disponibles, hasta el valor de la configuración
min-nodes-per-pool, durante un período.
¿Qué sigue?
- Para supervisar notificaciones y eventos de mantenimiento, consulta Supervisa eventos de mantenimiento.
- Aprende a implementar cargas de trabajo de GPUs en Autopilot.
- Aprende a implementar cargas de trabajo de TPU en GKE Autopilot.
- Obtén más información sobre el proceso de migración en vivo durante los eventos de mantenimiento.
- Aprende a supervisar eventos de mantenimiento.