Activiteitstests configureren

In containers geplaatste toepassingen kunnen langere tijd worden uitgevoerd, wat resulteert in beschadigde statussen die mogelijk moeten worden hersteld door de container opnieuw te starten. Azure Container Instances biedt ondersteuning voor liveness-tests, zodat u uw containers in uw containergroep kunt configureren om opnieuw op te starten als kritieke functionaliteit niet werkt. De livenesstest gedraagt zich als een Kubernetes-livenesstest.

In dit artikel wordt uitgelegd hoe u een containergroep implementeert die een livenesstest bevat, waarmee het automatisch opnieuw opstarten van een gesimuleerde beschadigde container wordt gedemonstreerd.

Azure Container Instances ondersteunt ook gereedheidstests, die u kunt configureren om ervoor te zorgen dat verkeer alleen een container bereikt wanneer deze gereed is.

YAML-implementatie

Maak een liveness-probe.yaml bestand met het volgende fragment. Dit bestand definieert een containergroep die bestaat uit een NGINX-container die uiteindelijk beschadigd raakt.

apiVersion: 2019-12-01
location: eastus
name: livenesstest
properties:
  containers:
  - name: mycontainer
    properties:
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      command:
        - "/bin/sh"
        - "-c"
        - "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      livenessProbe:
        exec:
            command:
                - "cat"
                - "/tmp/healthy"
        periodSeconds: 5
  osType: Linux
  restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

Voer de volgende opdracht uit om deze containergroep te implementeren met de bovenstaande YAML-configuratie:

az container create --resource-group myResourceGroup --name livenesstest -f liveness-probe.yaml

Startopdracht

De implementatie bevat een command eigenschap die een startopdracht definieert die wordt uitgevoerd wanneer de container voor het eerst wordt uitgevoerd. Deze eigenschap accepteert een matrix met tekenreeksen. Met deze opdracht wordt de container gesimuleerd die een beschadigde status invoert.

Eerst wordt er een bash-sessie gestart en wordt er een bestand gemaakt dat in de /tmp map wordt aangeroepenhealthy. Het slaapt vervolgens 30 seconden voordat het bestand wordt verwijderd en voert vervolgens een slaapstand van 10 minuten in:

/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"

Liveness-opdracht

Deze implementatie definieert een livenessProbe die ondersteuning biedt voor een exec liveness-opdracht die fungeert als de livenesscontrole. Als deze opdracht wordt afgesloten met een niet-nulwaarde, wordt de container gedood en opnieuw gestart, waardoor het healthy bestand niet kan worden gevonden. Als deze opdracht wordt afgesloten met afsluitcode 0, wordt er geen actie ondernomen.

De periodSeconds eigenschap wijst de liveness-opdracht aan die elke 5 seconden moet worden uitgevoerd.

Liveness-uitvoer controleren

Binnen de eerste 30 seconden bestaat het healthy bestand dat door de startopdracht is gemaakt. Wanneer de liveness-opdracht controleert op het bestaan van het healthy bestand, retourneert de statuscode 0, signalering geslaagd, zodat er geen herstart plaatsvindt.

Na 30 seconden begint de cat /tmp/healthy opdracht te mislukken, waardoor er beschadigde gebeurtenissen ontstaan en gebeurtenissen worden gedood.

Deze gebeurtenissen kunnen worden weergegeven vanuit Azure Portal of Azure CLI.

Gebeurtenis in slechte staat van portal

Door de gebeurtenissen in Azure Portal weer te geven, worden gebeurtenissen van het type Unhealthy geactiveerd wanneer de liveness-opdracht mislukt. De volgende gebeurtenis is van het type Killing, die een containerverwijdering aantekent, zodat opnieuw opstarten kan worden gestart. Het aantal keer dat de container opnieuw wordt opgestart, wordt steeds verhoogd wanneer deze gebeurtenis plaatsvindt.

Opnieuw opstarten wordt ter plaatse voltooid, zodat resources zoals openbare IP-adressen en knooppuntspecifieke inhoud behouden blijven.

Teller voor opnieuw opstarten van portal

Als de livenesstest continu mislukt en te veel herstarts activeert, voert uw container een vertraging voor exponentieel uitstel in.

Liveness-tests en beleid voor opnieuw opstarten

Beleid voor opnieuw opstarten vervangt het gedrag van opnieuw opstarten dat wordt geactiveerd door liveness-tests. Als u bijvoorbeeld een restartPolicy = Neveren een livenesstest instelt, wordt de containergroep niet opnieuw opgestart vanwege een mislukte livenesscontrole. De containergroep voldoet in plaats daarvan aan het beleid voor opnieuw opstarten van de containergroep.Never

Volgende stappen

Scenario's op basis van taken vereisen mogelijk een livenesstest om automatisch opnieuw opstarten in te schakelen als een vereiste functie niet goed werkt. Zie Taken in containers uitvoeren in Azure Container Instances voor meer informatie over het uitvoeren van op taken gebaseerde containers.