Sondes d’intégrité dans Azure Container Apps
Les sondes d’intégrité Azure Container Apps permettent au runtime Container Apps d’inspecter régulièrement l’état de vos applications conteneur.
Vous pouvez configurer des sondes en utilisant uniquement TCP ou HTTP(S).
Container Apps prend en charge les sondes suivantes :
Sonde | Description |
---|---|
Startup | Vérifie si votre application a démarré correctement. Cette vérification est distincte de la sonde d'activité et s'exécute pendant la phase de démarrage initiale de votre application. |
Activité | Vérifie si votre application est toujours en cours d’exécution et réactive. |
Préparation | Vérifie si un réplica est prêt à gérer les requêtes entrantes. |
Pour obtenir la liste complète des spécifications de sonde prises en charge dans Azure Container Apps, reportez-vous aux spécifications de l'API REST Azure.
Sondes HTTP
Les sondes HTTP vous permettent d’implémenter une logique personnalisée pour vérifier l’état des dépendances de l’application avant de signaler un état sain.
Configurez vos points de terminaison de sonde d’intégrité pour répondre avec un code d’état HTTP supérieur ou égal à 200
et inférieur 400
à pour indiquer la réussite. Tout autre code de réponse en dehors de cette plage indique un échec.
L’exemple suivant montre comment implémenter un point de terminaison d’activité dans 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
}
})
Sondes TCP
Les sondes TCP attendent d’établir une connexion avec le serveur pour indiquer la réussite. La sonde échoue si elle ne peut pas établir de connexion à votre application.
Restrictions
- Vous ne pouvez ajouter qu’un seul type de sonde par conteneur.
- Les sondes
exec
ne sont pas prises en charge. - Les valeurs de port doivent être des entiers ; les ports nommés ne sont pas pris en charge.
- gRPC n'est pas pris en charge.
Exemples
La liste de codes suivante montre comment vous pouvez définir des sondes d’intégrité pour vos conteneurs.
Les espaces réservés ...
indiquent le code omis. Reportez-vous à la Spécification de l’API de modèle ARM Container Apps pour obtenir les détails du modèle ARM complet.
{
...
"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
}]
}]
...
}
Le paramètre facultatif failureThreshold
définit le nombre de tentatives que Container Apps tente d'exécuter la sonde en cas d'échec de l'exécution. Les tentatives qui dépassent la quantité failureThreshold
provoquent des résultats différents pour chaque type de sonde.
Configuration par défaut
Si l’entrée est activée, les probes par défaut suivantes sont automatiquement ajoutées au conteneur d’application principal si aucune n’est définie pour chaque type.
Type de probe | Valeurs par défaut |
---|---|
Startup | Protocole : TCP Port : port cible d’entrée Délai d’expiration : 3 secondes Période : 1 seconde Délai initial : 1 seconde Seuil de succès : 1 Seuil d’échec : 240 |
Préparation | Protocole : TCP Port : port cible d’entrée Délai d’expiration : 5 secondes Période : 5 secondes Délai initial : 3 secondes Seuil de succès : 1 Seuil d’échec : 48 |
Activité | Protocole : TCP Port : port cible d’entrée |
Si votre application prend beaucoup de temps pour démarrer (ce qui est courant en Java), vous devez souvent personnaliser les sondes afin que votre conteneur ne se bloque pas.
L’exemple suivant montre comment configurer les sondes liveness et readiness pour étendre les temps de démarrage.
"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
}]