Gereedheidstests configureren

Voor toepassingen in containers die verkeer verwerken, wilt u mogelijk controleren of uw container gereed is voor het afhandelen van binnenkomende aanvragen. Azure Container Instances ondersteunt gereedheidstests om configuraties op te nemen, zodat uw container onder bepaalde voorwaarden niet kan worden geopend. De gereedheidstest gedraagt zich als een Kubernetes-gereedheidstest. Een containertoepassing moet bijvoorbeeld mogelijk een grote gegevensset laden tijdens het opstarten en u wilt niet dat deze aanvragen ontvangt gedurende deze tijd.

In dit artikel wordt uitgelegd hoe u een containergroep implementeert die een gereedheidstest bevat, zodat een container alleen verkeer ontvangt wanneer de test slaagt.

Azure Container Instances ondersteunt ook liveness-tests, die u kunt configureren om ervoor te zorgen dat een beschadigde container automatisch opnieuw wordt opgestart.

YAML-configuratie

Maak bijvoorbeeld een readiness-probe.yaml bestand met het volgende codefragment dat een gereedheidstest bevat. Dit bestand definieert een containergroep die bestaat uit een container waarop een kleine web-app wordt uitgevoerd. De app wordt geïmplementeerd vanuit de openbare mcr.microsoft.com/azuredocs/aci-helloworld installatiekopie. Deze container-app wordt ook gedemonstreerd in Een containerinstantie in Azure implementeren met behulp van de Azure CLI en andere quickstarts.

apiVersion: 2019-12-01
location: eastus
name: readinesstest
properties:
  containers:
  - name: mycontainer
    properties:
      image: mcr.microsoft.com/azuredocs/aci-helloworld
      command:
        - "/bin/sh"
        - "-c"
        - "node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait"
      ports:
      - port: 80
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      readinessProbe:
        exec:
          command:
          - "cat"
          - "/tmp/ready"
        periodSeconds: 5
  osType: Linux
  restartPolicy: Always
  ipAddress:
    type: Public
    ports:
    - protocol: tcp
      port: '80'
tags: null
type: Microsoft.ContainerInstance/containerGroups

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 een tijd gesimuleerd waarop de web-app wordt uitgevoerd, maar de container niet gereed is.

Eerst wordt er een shellsessie gestart en wordt een node opdracht uitgevoerd om de web-app te starten. Er wordt ook een opdracht gestart om 240 seconden te slapen, waarna er een bestand wordt gemaakt dat in de /tmp map wordt aangeroepenready:

node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait

Gereedheidsopdracht

Dit YAML-bestand definieert een readinessProbe die ondersteuning biedt voor een exec gereedheidsopdracht die fungeert als de gereedheidscontrole. In dit voorbeeld test u de gereedheidsopdracht voor het bestaan van het ready bestand in de /tmp map.

Wanneer het ready bestand niet bestaat, wordt de gereedheidsopdracht afgesloten met een waarde die niet nul is. De container wordt nog steeds uitgevoerd, maar kan niet worden geopend. Wanneer de opdracht wordt afgesloten met afsluitcode 0, is de container klaar om te worden geopend.

De periodSeconds eigenschap wijst de gereedheidsopdracht aan die elke 5 seconden moet worden uitgevoerd. De gereedheidstest wordt uitgevoerd voor de levensduur van de containergroep.

Voorbeeldimplementatie

Voer de volgende opdracht uit om een containergroep te implementeren met de voorgaande YAML-configuratie:

az container create --resource-group myResourceGroup --file readiness-probe.yaml

Gereedheidscontroles weergeven

In dit voorbeeld mislukt de gereedheidsopdracht gedurende de eerste 240 seconden wanneer wordt gecontroleerd op het bestaan van het ready bestand. De statuscode retourneert signalen dat de container niet gereed is.

Deze gebeurtenissen kunnen worden weergegeven vanuit Azure Portal of Azure CLI. In de portal ziet u bijvoorbeeld dat gebeurtenissen van het type Unhealthy worden geactiveerd wanneer de gereedheidsopdracht mislukt.

Gebeurtenis in slechte staat van portal

Gereedheid van containers controleren

Nadat u de container hebt gestart, kunt u controleren of deze in eerste instantie niet toegankelijk is. Haal na het inrichten het IP-adres van de containergroep op:

az container show --resource-group myResourceGroup --name readinesstest --query "ipAddress.ip" --out tsv

Probeer toegang te krijgen tot de site terwijl de gereedheidstest mislukt:

wget <ipAddress>

Uitvoer toont dat de site in eerste instantie niet toegankelijk is:

wget 192.0.2.1
--2019-10-15 16:46:02--  http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...

Na 240 seconden slaagt de gereedheidsopdracht, waarbij de container gereed is. Wanneer u de wget opdracht uitvoert, slaagt deze nu:

wget 192.0.2.1
--2019-10-15 16:46:02--  http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...200 OK
Length: 1663 (1.6K) [text/html]
Saving to: ‘index.html.1’

index.html.1                       100%[===============================================================>]   1.62K  --.-KB/s    in 0s

2019-10-15 16:49:38 (113 MB/s) - ‘index.html.1’ saved [1663/1663]

Wanneer de container klaar is, kunt u ook toegang krijgen tot de web-app door met behulp van een webbrowser naar het IP-adres te bladeren.

Notitie

De gereedheidstest blijft gedurende de levensduur van de containergroep worden uitgevoerd. Als de gereedheidsopdracht op een later tijdstip mislukt, is de container weer ontoegankelijk.

Volgende stappen

Een gereedheidstest kan nuttig zijn in scenario's met meerdere containers die bestaan uit afhankelijke containers. Zie Containergroepen in Azure Container Instances voor meer informatie over scenario's met meerdere containers.