Compartir vía


Configuración de sondeos de estado y períodos de gracia de finalización para aplicaciones hospedadas en Azure Spring 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 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 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 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 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.

  1. En Configuración, seleccione Aplicaciones y, a continuación, seleccione la aplicación en la lista.

    Screenshot of Azure portal showing the Apps page.

  2. Seleccione Configuración en el panel de navegación izquierdo, seleccione Sondeos de estado y, a continuación, especifique Propiedades de sondeo de estado.

    Screenshot of the Azure portal Configuration page showing the Health probes tab.

  3. 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.

    Screenshot of the Azure portal Configuration page showing the General settings tab.

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 por periodSeconds. Si la aplicación no responde a las solicitudes varias veces según lo especificado por failureThreshold, 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 se incluye con la compatibilidad con grupos de mantenimiento, lo que permite a los desarrolladores seleccionar un subconjunto de indicadores de mantenimiento 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
    }
    

Pasos siguientes