Állapottesztek az Azure Container Appsben

Az Azure Container Apps állapottesztjei lehetővé teszik, hogy a Container Apps-futtatókörnyezet rendszeresen ellenőrizze a tárolóalkalmazások állapotát.

A mintavételeket kizárólag TCP vagy HTTP(S) használatával állíthatja be.

Az Azure Container Apps a következő mintavételeket támogatja:

Probe Leírás
Induló vállalkozás Ellenőrzi, hogy az alkalmazás sikeresen elindul-e. Ez az ellenőrzés elkülönül az élőség-mintavételtől, és az alkalmazás kezdeti indítási fázisában fut.
Élő állapot Ellenőrzi, hogy az alkalmazás továbbra is fut-e és reagál-e.
Készenlét Ellenőrzi, hogy a replika készen áll-e a bejövő kérések kezelésére.

Az Azure Container Appsben támogatott mintavételi specifikációk teljes listáját az Azure REST API specifikációiban találja.

HTTP-mintavételek

A HTTP-mintavételekkel egyéni logikát implementálhat az alkalmazásfüggőségek állapotának ellenőrzéséhez, mielőtt kifogástalan állapotot jelez.

Konfigurálja az állapotadat-mintavétel végpontjait úgy, hogy a sikerességet jelezve az egyenlő vagy annál nagyobb 200 és kisebb 400 HTTP-állapotkóddal válaszoljanak. A tartományon kívüli egyéb válaszkódok hibát jeleznek.

Az alábbi példa bemutatja, hogyan implementálhat egy élőségi végpontot JavaScriptben.

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-mintavételek

A TCP-mintavételek megvárják, amíg kapcsolatot létesítenek a kiszolgálóval, hogy jelezzék a sikert. A mintavétel meghiúsul, ha nem tud kapcsolatot létesíteni az alkalmazással.

Korlátozások

  • Tárolónként minden mintavételi eszköz típusból csak egyet adhat hozzá.
  • exec a szondák nem támogatottak.
  • A portértékeknek egész számoknak kell lenniük; a névvel ellátott portok nem támogatottak.
  • A gRPC nem támogatott.

Példák

Az alábbi kódlista bemutatja, hogyan határozhatja meg a tárolók állapotmintáit.

A ... helyőrzők a kihagyott kódot jelölik. Az ARM-sablon teljes részleteiért tekintse meg a Container Apps ARM-sablon API-specifikációját.

{
  ...
  "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
        }]
    }]
  ...
}

Az opcionális failureThreshold beállítás határozza meg, hogy a Container Apps hány kísérletet kísérel meg végrehajtani a mintavétel végrehajtására, ha a végrehajtás sikertelen. Azokat a kísérleteket, amelyek túllépik az failureThreshold összeget, különböző eredményeket eredményeznek az egyes mintavételtípusok esetében.

Alapértelmezett konfiguráció

Ha engedélyezi a bejövő forgalmat, a portál automatikusan hozzáadja a következő alapértelmezett ellenőrzéseket a fő alkalmazáskonténerhez, ha nem határoz meg minden egyes típust, kivéve a GPU terhelési profilokat (mind dedikált, mind fogyasztási). A portál nem adja hozzá automatikusan az alapértelmezett mintavételeket a sidecar-tárolókhoz.

Mintavétel típusa Alapértelmezett értékek
startup vállalkozás Protokoll: TCP
Port: bemeneti célport
Időtúllépés: 3 másodperc
Időszak: 1 másodperc
Kezdeti késleltetés: 1 másodperc
Siker küszöbértéke: egy
Hibaküszöb: 240
Élő állapot Protokoll: TCP
Port: bemeneti célport
Készenlét Protokoll: TCP
Port: bemeneti célport
Időtúllépés: 5 másodperc
Időtartam: 5 másodperc
Kezdeti késleltetés: 3 másodperc
Siker küszöbértéke: egy
Hibaküszöb: 48

Ha több verziómódban futtatja a tárolóalkalmazást, várjon a változat üzembe helyezése után, amíg a készenléti ellenőrzések sikerességet jeleznek, mielőtt a forgalmat az adott verzióra irányítaná át. Egypéldányú átdolgozási üzemmódban a forgalom automatikusan eltolódik, amint a készenléti ellenőrzés sikeres állapotot ad vissza.

A verzió állapota nem megfelelőként jelenik meg, ha bármelyik replikája nem felel meg a készültségi ellenőrzésnek, még akkor is, ha a verzió többi replikája kifogástalan állapotú. A Container Apps újraindítja a szóban forgó replikát, amíg ismét kifogástalan állapotba nem kerül, vagy meg nem lépi a hibaküszöböt. Ha túllépi a hibaküszöböt, próbálja meg újraindítani a változatot, de ez azt jelentheti, hogy a változat nincs megfelelően konfigurálva.

Ha az alkalmazás hosszú indítási időt igényelhet, állítsa be az ellenőrzési beállításokat, hogy a tároló ne induljon újra (vagy ne legyen egészségtelennek jelölve), mielőtt készen állna. A mintavételi konfiguráció testreszabásával biztosítható, hogy az alkalmazásnak elegendő ideje legyen az indításra a szükségtelen újraindítások aktiválása nélkül.

Az alábbi példa bemutatja, hogyan konfigurálható az élettartam- és készültségi mintavétel az indítási idők meghosszabbításához.

"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
       }]

Következő lépések