Een init-container uitvoeren voor het instellen van taken in een containergroep
Azure Container Instances ondersteunt init-containers in een containergroep. Init-containers worden uitgevoerd tot voltooiing voordat de toepassingscontainer of -containers worden gestart. Net als bij Kubernetes init-containers gebruikt u een of meer init-containers om initialisatielogica uit te voeren voor uw app-containers, zoals het instellen van accounts, het uitvoeren van installatiescripts of het configureren van databases.
In dit artikel wordt beschreven hoe u een Azure Resource Manager-sjabloon gebruikt om een containergroep met een init-container te configureren.
Goed om te weten
API-versie : u hebt ten minste Azure Container Instances API-versie 2019-12-01 nodig om init-containers te implementeren. Implementeren met behulp van een
initContainers
eigenschap in een YAML-bestand of een Resource Manager-sjabloon.Volgorde van uitvoering : Init-containers worden uitgevoerd in de volgorde die is opgegeven in de sjabloon en vóór andere containers. Standaard kunt u maximaal 59 init-containers per containergroep opgeven. Ten minste één niet-init-container moet zich in de groep bevinden.
Hostomgeving : Init-containers worden uitgevoerd op dezelfde hardware als de rest van de containers in de groep.
Resources : u geeft geen resources op voor init-containers. Ze krijgen de totale resources, zoals CPU's en geheugen, die beschikbaar zijn voor de containergroep. Terwijl een init-container wordt uitgevoerd, worden er geen andere containers uitgevoerd in de groep.
Ondersteunde eigenschappen : Init-containers kunnen enkele groepseigenschappen gebruiken, zoals volumes en geheimen. Ze kunnen echter geen poorten, IP-adressen en beheerde identiteiten gebruiken als ze zijn geconfigureerd voor de containergroep.
Beleid voor opnieuw opstarten: elke init-container moet worden afgesloten voordat de volgende container in de groep wordt gestart. Als een init-container niet kan worden afgesloten, is de opstartactie afhankelijk van het beleid voor opnieuw opstarten dat is geconfigureerd voor de groep:
Beleid in groep Beleid in init Altijd OnFailure OnFailure OnFailure Nooit Nooit Kosten : voor de containergroep worden kosten in rekening gebracht bij de eerste implementatie van een init-container.
Voorbeeld van Resource Manager-sjabloon
Kopieer eerst de volgende JSON naar een nieuw bestand met de naam azuredeploy.json
. Met de sjabloon wordt een containergroep ingesteld met één init-container en twee toepassingscontainers:
- De init1-container voert de installatiekopieën van het postvak BEZET uit. Het slaapt 60 seconden en schrijft vervolgens een opdrachtregeltekenreeks naar een bestand in een leegDir-volume.
- Beide toepassingscontainers voeren de Microsoft-containerinstallatiekopieën
aci-wordcount
uit:- De hamletcontainer voert de wordcount-app uit in de standaardconfiguratie, waarbij woordfrequenties in Shakespeares play Hamlet worden geteld.
- De juliet app-container leest de opdrachtregeltekenreeks van het emptDir-volume om de wordcount-app uit te voeren in plaats daarvan op Shakespeare's Romeo en Juliet.
Zie Omgevingsvariabelen instellen in containerinstanties voor meer informatie en voorbeelden met behulp van de aci-wordcount
installatiekopie.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"sku": "Standard",
"initContainers": [
{
"name": "init1",
"properties": {
"image": "mcr.microsoft.com/aks/e2e/library-busybox:master.210714.1",
"environmentVariables": [],
"volumeMounts": [
{
"name": "emptydir1",
"mountPath": "/mnt/emptydir"
}
],
"command": [
"/bin/sh",
"-c",
"sleep 60; echo python wordcount.py http://shakespeare.mit.edu/romeo_juliet/full.html > /mnt/emptydir/command_line.txt"
]
}
}
],
"containers": [
{
"name": "hamlet",
"properties": {
"image": "mcr.microsoft.com/azuredocs/aci-wordcount",
"volumeMounts": [
{
"name": "emptydir1",
"mountPath": "/mnt/emptydir"
}
],
"environmentVariables": [
{
"name": "NumWords",
"value": "3"
},
{ "name": "MinLength",
"value": "5"
}
],
"resources": {
"requests": {
"memoryInGB": 1.0,
"cpu": 1
}
}
}
},
{
"name": "juliet",
"properties": {
"image": "mcr.microsoft.com/azuredocs/aci-wordcount",
"volumeMounts": [
{
"name": "emptydir1",
"mountPath": "/mnt/emptydir"
}
],
"command": [
"/bin/sh",
"-c",
"$(cat /mnt/emptydir/command_line.txt)"
],
"environmentVariables": [
{
"name": "NumWords",
"value": "3"
},
{ "name": "MinLength",
"value": "5"
}
],
"resources": {
"requests": {
"memoryInGB": 1.0,
"cpu": 1
}
}
}
}
],
"restartPolicy": "OnFailure",
"osType": "Linux",
"volumes": [
{
"name": "emptydir1",
"emptyDir": {}
}
]
},
"tags": {}
}
]
}
De sjabloon implementeren
Een resourcegroep maken met de opdracht az group create.
az group create --name myResourceGroup --location eastus
Implementeer de sjabloon met de opdracht az deployment group create .
az deployment group create \
--resource-group myResourceGroup \
--template-file azuredeploy.json
In een groep met een init-container wordt de implementatietijd verhoogd vanwege de tijd die nodig is om de init-container of -containers te voltooien.
Containerlogboeken ophalen
Als u wilt controleren of de init-container is uitgevoerd, bekijkt u de logboekuitvoer van de app-containers met behulp van de opdracht az container logs . Met --container-name
het argument wordt de container opgegeven waaruit logboeken moeten worden opgehaald. In dit voorbeeld haalt u de logboeken op voor de hamlet - en julietcontainers , waarin verschillende uitvoer van opdrachten wordt weergegeven:
az container logs \
--resource-group myResourceGroup \
--name myContainerGroup \
--container-name hamlet
Uitvoer:
[('HAMLET', 386), ('HORATIO', 127), ('CLAUDIUS', 120)]
az container logs \
--resource-group myResourceGroup \
--name myContainerGroup \
--container-name juliet
Uitvoer:
[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]
Volgende stappen
Init-containers helpen u bij het uitvoeren van installatie- en initialisatietaken voor uw toepassingscontainers. Zie Containertaken uitvoeren met beleid voor opnieuw opstarten voor meer informatie over het uitvoeren van op taken gebaseerde containers.
Azure Container Instances biedt andere opties voor het wijzigen van het gedrag van toepassingscontainers. Voorbeelden zijn: