Probe di integrità nelle App contenitore di Azure
I probe di integrità delle app contenitore consentono al runtime di App contenitore di controllare regolarmente lo stato delle app contenitore.
È possibile configurare i probe usando esclusivamente TCP o HTTP(S).
App contenitore supporta i probe seguenti:
Probe | Descrizione |
---|---|
Startup | Controlla se l'applicazione è stata avviata correttamente. Questo controllo è separato dal probe di attività e viene eseguito durante la fase di avvio iniziale dell'applicazione. |
Attività | Controlla se l'applicazione è ancora in esecuzione e reattiva. |
Idoneità | Verifica se una replica è pronta per gestire le richieste in ingresso. |
Per un elenco completo delle specifiche del probe supportate in App Azure Container, vedere Specifiche dell'API REST di Azure.
Probe HTTP
I probe HTTP consentono di implementare la logica personalizzata per controllare lo stato delle dipendenze dell'applicazione prima di segnalare uno stato integro.
Configurare gli endpoint del probe di integrità per rispondere con un codice di stato HTTP maggiore o uguale a 200
e minore di 400
per indicare l'esito positivo. Qualsiasi altro codice di risposta esterno a questo intervallo indica un errore.
L'esempio seguente illustra come implementare un endpoint di attività in 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
}
})
Probe TCP
I probe TCP attendono di stabilire una connessione con il server per indicare l'esito positivo. Il probe non riesce se non riesce a stabilire una connessione all'applicazione.
Restrizioni
- È possibile aggiungere un solo tipo di probe per ogni contenitore.
exec
i probe non sono supportati.- I valori di porta devono essere numeri interi; le porte denominate non sono supportate.
- gRPC non è supportato.
Esempi
L'elenco di codice seguente illustra come definire i probe di integrità per i contenitori.
I ...
segnaposto indicano il codice omesso. Per informazioni dettagliate sul modello di Resource Manager, vedere Specifica dell'API del modello di Resource Manager per app contenitore.
{
...
"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
}]
}]
...
}
L'impostazione facoltativa failureThreshold
definisce il numero di tentativi di esecuzione di App contenitore se l'esecuzione non riesce. I tentativi che superano la failureThreshold
quantità causano risultati diversi per ogni tipo di probe.
Configurazione predefinita
Se l'ingresso è abilitato, i probe predefiniti seguenti vengono aggiunti automaticamente al contenitore principale dell'app se non è definito alcun tipo per ogni tipo.
Tipo di probe | Valori predefiniti |
---|---|
Startup | Protocollo: TCP Porta: porta di destinazione in ingresso Timeout: 3 secondi Periodo: 1 secondo Ritardo iniziale: 1 secondo Soglia di riuscita: 1 Soglia di errore: 240 |
Idoneità | Protocollo: TCP Porta: porta di destinazione in ingresso Timeout: 5 secondi Periodo: 5 secondi Ritardo iniziale: 3 secondi Soglia di riuscita: 1 Soglia di errore: 48 |
Attività | Protocollo: TCP Porta: porta di destinazione in ingresso |
Se l'app richiede una quantità estesa di tempo per l'avvio (che è comune in Java), spesso è necessario personalizzare i probe in modo che il contenitore non si arresti in modo anomalo.
L'esempio seguente illustra come configurare i probe di attività e conformità per estendere i tempi di avvio.
"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
}]