Sondy stavu v Azure Container Apps
Sondy stavu služby Azure Container Apps umožňují modulu runtime Container Apps pravidelně kontrolovat stav vašich aplikací kontejnerů.
Testy můžete nastavit výhradně pomocí protokolu TCP nebo HTTP.S.
Container Apps podporuje následující sondy:
Sonda | Popis |
---|---|
Spuštění | Zkontroluje, jestli se vaše aplikace úspěšně spustila. Tato kontrola je oddělená od sondy aktivity a provádí se během počáteční fáze spuštění aplikace. |
Životnost | Zkontroluje, jestli je vaše aplikace stále spuštěná a responzivní. |
Připravenost | Kontroluje, jestli je replika připravená na zpracování příchozích požadavků. |
Úplný seznam specifikace sondy podporované ve službě Azure Container Apps najdete v specifikacích rozhraní Azure REST API.
Testy HTTP
Testy HTTP umožňují implementovat vlastní logiku pro kontrolu stavu závislostí aplikace před hlášením stavu v pořádku.
Nakonfigurujte koncové body sondy stavu tak, aby reagovaly stavovým kódem HTTP, který je větší nebo roven 200
nebo menší než 400
značit úspěch. Jakýkoli jiný kód odpovědi mimo tento rozsah značí selhání.
Následující příklad ukazuje, jak implementovat koncový bod liveness v JavaScriptu.
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
}
})
Sondy PROTOKOLU TCP
Sondy PROTOKOLU TCP čekají na navázání připojení k serveru, aby bylo možné indikovat úspěch. Sonda selže, pokud nemůže navázat připojení k vaší aplikaci.
Omezení
- Pro každý kontejner můžete přidat pouze jeden z každého typu sondy.
exec
sondy nejsou podporovány.- Hodnoty portů musí být celá čísla; pojmenované porty nejsou podporované.
- GRPC není podporováno.
Příklady
Následující výpis kódu ukazuje, jak můžete definovat sondy stavu pro kontejnery.
Zástupné ...
symboly označují vynechaný kód. Úplné podrobnosti o šabloně ARM najdete ve specifikaci rozhraní API šablon ARM pro 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
}]
}]
...
}
Volitelné failureThreshold
nastavení definuje počet pokusů o spuštění služby Container Apps, pokud se spuštění nezdaří. Pokusy o překročení failureThreshold
množství způsobují různé výsledky pro každý typ sondy.
Výchozí konfigurace
Pokud je povolený příchozí přenos dat, následující výchozí testy se automaticky přidají do hlavního kontejneru aplikace, pokud pro každý typ není definován žádný.
Typ sondy | Výchozí hodnoty |
---|---|
Spuštění | Protokol: TCP Port: Cílový port příchozího přenosu dat Časový limit: 3 sekundy Období: 1 sekunda Počáteční zpoždění: 1 sekunda Prahová hodnota úspěchu: 1 Prahová hodnota selhání: 240 |
Připravenost | Protokol: TCP Port: Cílový port příchozího přenosu dat Časový limit: 5 sekund Období: 5 sekund Počáteční zpoždění: 3 sekundy Prahová hodnota úspěchu: 1 Prahová hodnota selhání: 48 |
Životnost | Protokol: TCP Port: Cílový port příchozího přenosu dat |
Pokud spuštění aplikace trvá delší dobu (což je běžné v Javě), často je potřeba přizpůsobit sondy, aby se váš kontejner nehroutí.
Následující příklad ukazuje, jak nakonfigurovat testy aktivity a připravenosti pro rozšíření doby spuštění.
"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
}]