Integritätstests in Azure Container Apps
Integritätssonden von Azure Container Apps ermöglichen es der Container-Apps-Runtime, regelmäßig den Status Ihrer Container-Apps zu prüfen.
Sie können Tests ausschließlich über TCP oder HTTP(S) einrichten.
Container-Apps unterstützen die folgenden Prüfpunkte:
Test | Beschreibung |
---|---|
Startup | Überprüft, ob Ihre Anwendung erfolgreich gestartet wurde. Diese Überprüfung unterscheidet sich von dem Livetest und wird während der ersten Startphase Ihrer Anwendung ausgeführt. |
Livezustand | Überprüft, ob Ihre Anwendung noch ausgeführt wird und reaktionsfähig ist. |
Bereitschaft | Überprüft, ob ein Replikat für die Verarbeitung eingehender Anforderungen bereit ist. |
Eine vollständige Liste der in Azure Container Apps unterstützten Integritätstestspezifikationen finden Sie unter Azure-REST-API-Spezifikationen.
HTTP-Tests
Mit HTTP-Tests können Sie benutzerdefinierte Logik implementieren, um den Status von Anwendungsabhängigkeiten zu überprüfen, bevor Sie einen fehlerfreien Status melden.
Konfigurieren Sie Ihre Integritätstest-Endpunkte so, dass sie mit einem HTTP-Statuscode antworten, der größer oder gleich 200
und kleiner als 400
ist, um einen Erfolg zu signalisieren. Jeder andere Antwortcode außerhalb dieses Bereichs weist auf einen Fehler hin.
Im folgenden Beispiel wird veranschaulicht, wie ein Livetest-Endpunkt in JavaScript implementiert wird.
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
}
})
TCP-Tests
TCP-Prüfpunkte warten, um eine Verbindung mit dem Server herzustellen, um den Erfolg anzuzeigen. Der Prüfpunkt schlägt fehl, wenn keine Verbindung mit Ihrer Anwendung hergestellt werden kann.
Beschränkungen
- Sie können pro Container nur einen Testtyp hinzufügen.
exec
-Tests werden nicht unterstützt.- Portwerte müssen ganze Zahlen sein, benannte Ports werden nicht unterstützt.
- gRPC wird nicht unterstützt.
Beispiele
Die folgende Codeauflistung zeigt, wie Sie Integritätstests für Ihre Container definieren können.
Die Platzhalter ...
geben ausgelassenen Code an. Ausführliche Informationen zu ARM-Vorlagen finden Sie unter den API-Spezifikation der ARM-Vorlage für 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
}]
}]
...
}
Die optionale failureThreshold
-Einstellung definiert die Anzahl der Versuche, die Container Apps versuchen durchzuführen, wenn die Testausführung fehlerhaft ist. Über failureThreshold
hinausgehende Versuche führen zu unterschiedlichen Ergebnissen für jeden Testtyp.
Standardkonfiguration
Wenn eingehender Datenverkehr aktiviert ist, werden die folgenden Standardtests automatisch dem Hauptcontainer der App hinzugefügt, wenn nicht für jeden Typ einer definiert ist.
Testtyp | Standardwerte |
---|---|
Startup | Protokoll: TCP Port: Eingangszielport Timeout: 3 Sekunden Zeitraum: 1 Sekunde Anfängliche Verzögerung: 1 Sekunde Erfolgsschwellenwert: 1 Fehlerschwellenwert: 240 |
Bereitschaft | Protokoll: TCP Port: Eingangszielport Timeout: 5 Sekunden Zeitraum: 5 Sekunden Anfängliche Verzögerung: 3 Sekunden Erfolgsschwellenwert: 1 Fehlerschwellenwert: 48 |
Livezustand | Protokoll: TCP Port: Eingangszielport |
Wenn Ihre App eine längere Zeit benötigt, um zu starten, was in Java häufig auftritt, müssen Sie den Test oft anpassen, damit Ihr Container nicht abstürzt.
Im folgenden Beispiel wird veranschaulicht, wie die Live- und Bereitschaftstests konfiguriert werden, um die Startzeiten zu verlängern.
"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
}]