Compartir a través de


Sondeos de estado en Azure Container Apps

Los sondeos de estado de Azure Container Apps permiten que el entorno de ejecución de Container Apps compruebe periódicamente el estado de las aplicaciones contenedoras.

Puede configurar sondeos mediante TCP o HTTP(S) exclusivamente.

Azure Container Apps admite las siguientes sondas:

Sondeo Descripción
Inicio Comprueba si la aplicación se inicia correctamente. Esta comprobación es independiente del sondeo de vivacidad y se ejecuta durante la fase de inicio de la aplicación.
Vivacidad Comprueba si la aplicación sigue en ejecución y responde.
Preparación Comprueba si una réplica está lista para manejar las solicitudes entrantes.

Para obtener una lista completa de las especificaciones de sondeo admitidas en Azure Container Apps, consulte Especificaciones de api REST de Azure.

Sondeos HTTP

Los sondeos HTTP permiten implementar lógica personalizada para comprobar el estado de las dependencias de la aplicación antes de notificar un estado correcto.

Configure los puntos de conexión de la sonda de estado para que respondan con un código de estado HTTP mayor o igual que 200 y menor que 400 para indicar éxito. Cualquier código de respuesta fuera de este intervalo indica un error.

En el ejemplo siguiente se muestra cómo implementar un punto de conexión de ejecución en JavaScript.

const express = require('express');
const app = express();

app.get('/liveness', (req, res) => {
  let isSystemStable = false;
  
  // check for database availability
  // check filesystem structure
  //  etc.

  // set isSystemStable to true if all checks pass

  if (isSystemStable) {
    res.status(200); // Success
  } else {
    res.status(503); // Service unavailable
  }
})

Sondeos TCP

Los sondeos TCP esperan a que se establezca una conexión con el servidor para indicar que se ha establecido correctamente. Se produce un error en el sondeo si no se puede establecer una conexión a la aplicación.

Restricciones

  • Solo puede agregar uno de cada tipo de sondeo por contenedor.
  • No se admiten los sondeos exec.
  • Los valores de puerto deben ser enteros. No se admiten puertos con nombre.
  • gRPC no es compatible.

Ejemplos

En la siguiente lista de códigos se muestra cómo puede definir sondeos de estado para los contenedores.

Los marcadores de posición ... indican que se ha omitido código. Para obtener detalles completos de la plantilla de ARM, consulte Especificación de la API de plantilla de ARM de Container Apps.

{
  ...
  "containers":[
    {
      "image":"nginx",
      "name":"web",
      "probes": [
        {
          "type": "Liveness",
          "httpGet": {
            "path": "/health",
            "port": 8080,
            "httpHeaders": [
              {
                "name": "Custom-Header",
                "value": "liveness probe"
              }]
          },
          "initialDelaySeconds": 7,
          "periodSeconds": 3
        },
        {
          "type": "Readiness",
          "tcpSocket": {
            "port": 8081
          },
          "initialDelaySeconds": 10,
          "periodSeconds": 3
        },
        {
          "type": "Startup",
          "httpGet": {
            "path": "/startup",
            "port": 8080,
            "httpHeaders": [
              {
                "name": "Custom-Header",
                "value": "startup probe"
              }]
          },
          "initialDelaySeconds": 3,
          "periodSeconds": 3
        }]
    }]
  ...
}

La configuración opcional failureThreshold define el número de intentos de Container Apps si se produce un error en la ejecución del sondeo. Los intentos que superan la cantidad failureThreshold provocan resultados diferentes en cada tipo de sondeo.

Configuración predeterminada

Si habilita la entrada, el portal agrega automáticamente los siguientes sondeos predeterminados al contenedor de aplicaciones principal si no define cada tipo, excepto los perfiles de carga de trabajo de GPU (tanto dedicados como de consumo). El portal no agrega automáticamente sondas predeterminadas a contenedores de acompañamiento.

Tipos de sondeo Valores predeterminados
Inicio Protocolo: TCP
Puerto: puerto de destino de entrada
Tiempo de espera: 3 segundos
Período: 1 segundo
Retraso inicial: 1 segundo
Umbral de éxito: uno
Umbral de error: 240
Vivacidad Protocolo: TCP
Puerto: puerto de destino de entrada
Preparación Protocolo: TCP
Puerto: puerto de destino de entrada
Tiempo de espera: 5 segundos
Período: 5 segundos
Retraso inicial: 3 segundos
Umbral de éxito: uno
Umbral de error: 48

Si ejecuta su aplicación de contenedor en modo de revisión múltiple, después de implementar una revisión, espere hasta que las pruebas de preparación indiquen que han tenido éxito antes de cambiar el tráfico a esa revisión. En el modo de revisión única, el tráfico se desplaza automáticamente una vez que el sondeo de disponibilidad devuelve un estado correcto.

El estado de una revisión aparece como incorrecto si alguna de sus réplicas no supera el sondeo de disponibilidad, aunque el resto de réplicas de la revisión estén en estado correcto. Container Apps reinicia la réplica en cuestión hasta que vuelva a estar en buen estado o se supere el umbral de error. Si se supera el umbral de error, intente reiniciar la revisión, pero podría significar que la revisión no está configurada correctamente.

Si la aplicación requiere un tiempo de inicio prolongado, ajuste la configuración del sondeo para evitar que el contenedor se reinicie (o se marque como incorrecto) antes de que esté listo. La personalización de la configuración del sondeo ayuda a garantizar que la aplicación tenga tiempo suficiente para iniciarse sin desencadenar reinicios innecesarios.

En el ejemplo siguiente se muestra cómo configurar las sondas de actividad y disponibilidad para prolongar el tiempo de inicio.

"probes": [
       {
        "type": "Liveness",
        "failureThreshold": 3,
        "periodSeconds": 10,
        "successThreshold": 1,
        "tcpSocket": {
          "port": 80
        },
        "timeoutSeconds": 1
       },
       {
         "type": "Readiness",
         "failureThreshold": 48,
         "initialDelaySeconds": 3,
         "periodSeconds": 5,
         "successThreshold": 1,
         "tcpSocket": {
           "port": 80
          },
          "timeoutSeconds": 5
       }]

Pasos siguientes