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 andere waarde dan nul. 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.
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.