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 inspeccione periódicamente el estado de las aplicaciones de contenedor.
Puede configurar sondeos mediante TCP o HTTP(S) exclusivamente.
Container Apps admite los siguientes sondeos:
Sondeo | Descripción |
---|---|
Startup | Comprueba si la aplicación se ha iniciado correctamente. Esta comprobación es independiente del sondeo de ejecución y se ejecuta durante la fase de inicio inicial de la aplicación. |
Ejecución | Comprueba si la aplicación sigue en ejecución y responde. |
Preparación | Comprueba si una réplica está lista para controlar las solicitudes entrantes. |
Para obtener una lista completa de la especificación de sondeo admitida en Azure Container Apps, consulte Especificaciones de la API de 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 sondeo de estado para que respondan con un código de estado HTTP mayor o igual que 200
y menor que 400
para indicar que es correcto. 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 un sondeo de cada tipo por contenedor.
- No se admiten los sondeos
exec
. - Los valores de puerto deben ser enteros. No se admiten puertos con nombre.
- gRPC no se admite.
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. Consulte Especificación de la API de plantilla de ARM de Container Apps para obtener detalles completos de la plantilla de ARM.
{
...
"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 la entrada está habilitada, los siguientes sondeos predeterminados se añaden automáticamente al contenedor de aplicaciones principal si no se define ninguno para cada tipo.
Tipos de sondeo | Valores predeterminados |
---|---|
Startup | Protocolo: TCP Puerto: puerto de destino de entrada Tiempo de espera: 3 segundos Período: 1 segundo Retraso inicial: 1 segundo Umbral correcto: 1 Umbral de error: 240 |
Preparación | Protocolo: TCP Puerto: puerto de destino de entrada Tiempo de espera: 5 segundos Período: 5 segundos Retraso inicial: 3 segundos Umbral correcto: 1 Umbral de error: 48 |
Ejecución | Protocolo: TCP Puerto: puerto de destino de entrada |
Si la aplicación tarda mucho en iniciarse, algo que es común en Java, suele ser necesario personalizar los sondeos para que el contenedor no se bloquee.
En el ejemplo siguiente se muestra cómo configurar los sondeos de ejecución y preparación para ampliar los tiempos 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
}]