Configuración de sondeos de estado y períodos de gracia de finalización para aplicaciones hospedadas en Azure Spring Apps
Nota:
Los planes Básico, Estándar y Enterprise quedarán en desuso a partir de mediados de marzo de 2025, con un período de retirada de 3 años. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte el anuncio de retirada de Azure Spring Apps.
El plan de Consumo estándar y dedicado quedará obsoleto a partir del 30 de septiembre de 2024, con un cierre completo al cabo de seis meses. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte Migrar el consumo estándar y el plan dedicado de Azure Spring Apps a Azure Container Apps.
Este artículo se aplica a: ✔️ Java ✔️ C#
La información de este artículo puede ponerse en práctica en: ✔️ Básico o Estándar ✔️ Enterprise
Este artículo muestra cómo personalizar las aplicaciones que se ejecutan en Azure Spring Apps con sondeos de estado y períodos de gracia de finalización.
Un sondeo es una actividad de diagnóstico que Azure Spring Apps realiza periódicamente en una instancia de una aplicación. Para realizar un diagnóstico, Azure Spring Apps realiza una de las siguientes acciones:
- Ejecuta un comando arbitrario de su elección en la instancia de la aplicación.
- Establece una conexión de socket TCP.
- Realiza una solicitud HTTP
Azure Spring Apps ofrece reglas de sondeo de estado predeterminadas para cada aplicación. En este artículo se muestra cómo personalizar una aplicación con tres tipos de sondeos de estado:
Los sondeos de ejecución determinan cuándo debe reiniciarse una aplicación. Por ejemplo, los sondeos de ejecución pueden identificar un interbloqueo, como cuando una aplicación se está ejecutando pero no puede avanzar. Reiniciar la aplicación en estado de bloqueo puede ayudar a que esté más disponible a pesar de los errores.
Los sondeos de preparación determinan cuándo una instancia de aplicación está lista para empezar a aceptar tráfico. Por ejemplo, los sondeos de preparación pueden controlar qué instancias de aplicación se usan como back-end para la aplicación. Cuando una instancia de una aplicación no está lista, se quita de la detección de servicios de Kubernetes. Para obtener más información, consulte Detectar y registrar sus aplicaciones Spring Boot. Para obtener más información sobre la detección de servicios con el plan Enterprise, consulte Uso del Registro de servicios de Tanzu.
Los sondeos de inicio determinan cuándo se ha iniciado una aplicación. Un sondeo de inicio deshabilita la ejecución y las comprobaciones de preparación hasta que el inicio se realiza correctamente, lo que garantiza que los sondeos de ejecución y preparación no interfieren con el inicio de la aplicación. Puede usar sondeos de inicio para realizar comprobaciones de ejecución en aplicaciones de inicio lentas, lo que impide que la aplicación finalice antes de que esté en funcionamiento.
Requisitos previos
CLI de Azurecon la extensión Azure Spring Apps. Use el siguiente comando para quitar las versiones anteriores e instalar la extensión más reciente: Si ya ha instalado la extensión spring-cloud, desinstálela para evitar errores de coincidencia de la configuración y la versión.
az extension remove --name spring az extension add --name spring az extension remove --name spring-cloud
Configuración de sondeos de estado y un período de gracia de finalización para aplicaciones
En las secciones siguientes se describe cómo configurar sondeos de estado y terminación correcta mediante la CLI de Azure.
Período de gracia de finalización
En la tabla siguiente se describe la propiedad terminationGracePeriodSeconds
, que puede usar para configurar la terminación correcta.
Nombre de la propiedad | Descripción |
---|---|
terminationGracePeriodSeconds |
La duración en segundos después de que se envíe una señal de finalización a los procesos que se ejecutan en la instancia de la aplicación y antes de que se detengan forzosamente. Establezca este valor más largo que el tiempo de limpieza esperado para el proceso. Debe ser un número entero no negativo. Al establecer el período de gracia en 0 se detiene la instancia de la aplicación inmediatamente a través de la señal de eliminación, sin oportunidad de apagarse. Si el valor es nulo, Azure Spring Apps usa el período de gracia predeterminado. El valor predeterminado es 90. |
Propiedades de sondeo de estado
En la tabla siguiente se describen las propiedades que puede usar para configurar sondeos de estado.
Nombre de la propiedad | Descripción |
---|---|
initialDelaySeconds |
Número de segundos después de que se haya iniciado la instancia de la aplicación antes de que se inicien los sondeos. El valor predeterminado es 0, el valor mínimo. |
periodSeconds |
La frecuencia en segundos con que se ejecutará el sondeo. El valor predeterminado es 10. El valor mínimo es 1. |
timeoutSeconds |
Número de segundos hasta que se agota el tiempo de espera del sondeo. El valor predeterminado es 1, el valor mínimo. |
failureThreshold |
Número mínimo de errores consecutivos para que el sondeo se considere erróneo después de haberse realizado correctamente. El valor predeterminado es 3. El valor mínimo es 1. |
successThreshold |
Número mínimo de operaciones correctas consecutivas para que el sondeo se considere correcto después de haber producido un error. El valor predeterminado es 1. El valor debe ser 1 para la ejecución y el inicio. El valor mínimo es 1. |
Propiedades de acciones de sondeo
Hay tres maneras de comprobar una instancia de una aplicación con un sondeo. Cada sondeo debe definir una de las siguientes acciones de sondeo:
HTTPGetAction
Realiza una solicitud HTTP GET en la instancia de la aplicación en una ruta de acceso especificada. El diagnóstico se considera correcto si la respuesta tiene un código de estado mayor o igual que 200 y menor que 400.
Nombre de la propiedad Descripción scheme
Esquema que debe usarse para la conexión al host. El valor predeterminado es HTTP. path
Ruta de acceso al servidor HTTP de la instancia de la aplicación, como /healthz. ExecAction
Ejecuta un comando especificado dentro de la instancia de la aplicación. El diagnóstico se considera correcto si el comando produce el código de estado 0.
Nombre de la propiedad Descripción command
El comando que debe ejecutarse en la instancia de la aplicación. El directorio de trabajo del comando es el directorio raíz (/) en el sistema de archivos de la instancia de la aplicación. Ya que el comando se ejecuta con exec
, no dentro de un shell, las instrucciones de shell no funcionan. Para usar un shell, llame explícitamente a ese shell. Un estado de salida de 0 se trata como activo o correcto, y un valor distinto de cero se considera incorrecto.TCPSocketAction
Realiza una comprobación TCP en la instancia de la aplicación.
No hay ninguna propiedad disponible para la acción
TCPSocketAction
.
Personalización de la aplicación
Siga estos pasos para personalizar la aplicación mediante Azure Portal.
En Configuración, seleccione Aplicaciones y, a continuación, seleccione la aplicación en la lista.
Seleccione Configuración en el panel de navegación izquierdo, seleccione Sondeos de estado y, a continuación, especifique Propiedades de sondeo de estado.
Para establecer el período de gracia de finalización, seleccione Configuración general y especifique un valor en el cuadro Período de gracia de finalización.
procedimientos recomendados
Use los procedimientos recomendados siguientes al agregar sondeos de estado a Azure Spring Apps:
Use los sondeos de ejecución y preparación juntos. Azure Spring Apps proporciona dos enfoques para la detección de servicios al mismo tiempo. Cuando se produce un error en el sondeo de preparación, la instancia de la aplicación solo se quita de la detección de servicios de Kubernetes. Un sondeo de ejecución configurado correctamente puede quitar la instancia de la aplicación emitida de la detección de servicios de Eureka para evitar casos inesperados. Para obtener más información sobre la detección de servicios, consulte Detectar y registrar sus aplicaciones Spring Boot. Para obtener más información sobre la detección de servicios con el plan Enterprise, consulte Uso del Registro de servicios de Tanzu.
Cuando se inicia una instancia de aplicación, la primera comprobación se realiza pasado el retraso especificado por
initialDelaySeconds
. Las comprobaciones posteriores se producen periódicamente, según la longitud del período especificada porperiodSeconds
. Si la aplicación no responde a las solicitudes varias veces según lo especificado porfailureThreshold
, se reinicia la instancia de la aplicación. Asegúrese de que la aplicación puede iniciarse lo suficientemente rápido, o actualice estos parámetros, para que el tiempo de espera total (initialDelaySeconds + periodSeconds * failureThreshold
) sea mayor que la hora de inicio de la aplicación.En el caso de las aplicaciones de Spring Boot, Spring Boot incluye compatibilidad con los grupos de estado, lo que permite a los desarrolladores seleccionar un subconjunto de indicadores de estado y agruparlos en un único estado de mantenimiento correlacionado. Para obtener más información, consulte Sondeos de preparación y ejecución con Spring Boot en el blog de Spring.
En el ejemplo siguiente se muestra un sondeo de ejecución con Spring Boot:
"probe": { "initialDelaySeconds": 30, "periodSeconds": 10, "timeoutSeconds": 1, "failureThreshold": 30, "successThreshold": 1, "probeAction": { "type": "HTTPGetAction", "scheme": "HTTP", "path": "/actuator/health/liveness" } }
En el ejemplo siguiente se muestra un sondeo de preparación con Spring Boot:
"probe": { "initialDelaySeconds": 0, "periodSeconds": 10, "timeoutSeconds": 1, "failureThreshold": 3, "successThreshold": 1, "probeAction": { "type": "HTTPGetAction", "scheme": "HTTP", "path": "/actuator/health/readiness" } }
Preguntas más frecuentes
En esta sección se proporcionan respuestas a las preguntas más frecuentes sobre el uso de sondeos de estado con Azure Spring Apps.
He recibido una respuesta 400 cuando he creado aplicaciones con sondeos de estado personalizados. ¿Qué significa esto?
El mensaje de error indica qué sondeo es responsable del error de aprovisionamiento. Asegúrese de que las reglas de sondeo de estado son correctas y de que el tiempo de espera es lo suficientemente largo para que la aplicación esté en ejecución.
¿Cuál es la configuración de sondeo predeterminada para una aplicación que ya existe?
En el siguiente ejemplo se muestra la configuración predeterminada:
"startupProbe": null, "livenessProbe": { "disableProbe": false, "failureThreshold": 3, "initialDelaySeconds": 300, "periodSeconds": 10, "probeAction": { "type": "TCPSocketAction" }, "successThreshold": 1, "timeoutSeconds": 3 }, "readinessProbe": { "disableProbe": false, "failureThreshold": 3, "initialDelaySeconds": 0, "periodSeconds": 5, "probeAction": { "type": "TCPSocketAction" }, "successThreshold": 1, "timeoutSeconds": 3 }