Hälsoavsökningar i Azure Container Apps
Med hälsoavsökningar i Azure Container Apps kan Container Apps-körningen regelbundet inspektera statusen för dina containerappar.
Du kan konfigurera avsökningar med enbart TCP eller HTTP(S).
Container Apps stöder följande avsökningar:
Avsökning | beskrivning |
---|---|
Start | Kontrollerar om programmet har startats. Den här kontrollen är separat från liveness-avsökningen och körs under programmets inledande startfas. |
Livskraft | Kontrollerar om programmet fortfarande körs och svarar. |
Beredskap | Kontrollerar om en replik är redo att hantera inkommande begäranden. |
En fullständig lista över avsökningsspecifikationen som stöds i Azure Container Apps finns i Azure REST API-specifikationer.
HTTP-avsökningar
MED HTTP-avsökningar kan du implementera anpassad logik för att kontrollera statusen för programberoenden innan du rapporterar en felfri status.
Konfigurera slutpunkterna för hälsoavsökningen så att de svarar med en HTTP-statuskod som är större än eller lika 200
med och mindre än 400
för att indikera att den lyckades. All annan svarskod utanför det här intervallet indikerar ett fel.
I följande exempel visas hur du implementerar en liveness-slutpunkt i 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
}
})
TCP-avsökningar
TCP-avsökningar väntar på att upprätta en anslutning till servern för att indikera att det har lyckats. Avsökningen misslyckas om den inte kan upprätta en anslutning till ditt program.
Begränsningar
- Du kan bara lägga till en av varje avsökningstyp per container.
exec
avsökningar stöds inte.- Portvärdena måste vara heltal. namngivna portar stöds inte.
- gRPC stöds inte.
Exempel
Följande kodlista visar hur du kan definiera hälsoavsökningar för dina containrar.
Platshållarna ...
anger utelämnad kod. Se API-specifikationen för ARM-mallar för Container Apps för fullständig INFORMATION om ARM-mallar.
{
...
"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
}]
}]
...
}
Den valfria failureThreshold
inställningen definierar antalet försök som Container Apps försöker köra avsökningen om körningen misslyckas. Försök som överskrider failureThreshold
mängden orsakar olika resultat för varje avsökningstyp.
Standardkonfiguration
Om ingress är aktiverat läggs följande standardavsökningar automatiskt till i huvudappcontainern om ingen definieras för varje typ.
Avsökningstyp | Standardvärden |
---|---|
Start | Protokoll: TCP Port: inkommande målport Tidsgräns: 3 sekunder Period: 1 sekund Inledande fördröjning: 1 sekund Tröskelvärde för lyckad åtgärd: 1 Tröskelvärde för fel: 240 |
Beredskap | Protokoll: TCP Port: inkommande målport Tidsgräns: 5 sekunder Period: 5 sekunder Inledande fördröjning: 3 sekunder Tröskelvärde för lyckad åtgärd: 1 Tröskelvärde för fel: 48 |
Livskraft | Protokoll: TCP Port: inkommande målport |
Om din app tar längre tid att starta (vilket är vanligt i Java) måste du ofta anpassa avsökningarna så att containern inte kraschar.
I följande exempel visas hur du konfigurerar liveness- och beredskapsavsökningar för att förlänga starttiderna.
"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
}]