Köra en init-container för installationsuppgifter i en containergrupp
Azure Container Instances stöder init-containrar i en containergrupp. Init-containrar körs innan programcontainern eller containrarna startas. På samma sätt som Kubernetes init-containrar använder du en eller flera init-containrar för att utföra initieringslogik för dina appcontainrar, till exempel ställa in konton, köra installationsskript eller konfigurera databaser.
Den här artikeln visar hur du använder en Azure Resource Manager-mall för att konfigurera en containergrupp med en init-container.
Bra att känna till
API-version – Du behöver minst Azure Container Instances API version 2019-12-01 för att distribuera init-containrar. Distribuera med en
initContainers
egenskap i en YAML-fil eller en Resource Manager-mall.Körningsordning – Init-containrar körs i den ordning som anges i mallen och före andra containrar. Som standard kan du ange högst 59 init-containrar per containergrupp. Minst en container som inte är init måste finnas i gruppen.
Värdmiljö – Init-containrar körs på samma maskinvara som resten av containrarna i gruppen.
Resurser – Du anger inte resurser för init-containrar. De beviljas de totala resurserna, till exempel processorer och minne som är tillgängliga för containergruppen. När en init-container körs körs inga andra containrar i gruppen.
Egenskaper som stöds – Init-containrar kan använda vissa gruppegenskaper, till exempel volymer och hemligheter. De kan dock inte använda portar, IP-adresser och hanterade identiteter om de har konfigurerats för containergruppen.
Omstartsprincip – Varje init-container måste avslutas innan nästa container i gruppen startar. Om en init-container inte avslutas beror omstartsåtgärden på den omstartsprincip som konfigurerats för gruppen:
Princip i grupp Princip i init Alltid OnFailure OnFailure OnFailure Aldrig Aldrig Avgifter – Containergruppen debiteras från den första distributionen av en init-container.
Exempel på Resource Manager-mall
Börja med att kopiera följande JSON till en ny fil med namnet azuredeploy.json
. Mallen konfigurerar en containergrupp med en init-container och två programcontainrar:
- Init1-containern kör busybox-avbildningen. Den ligger i viloläge i 60 sekunder och skriver sedan en kommandoradssträng till en fil i en tomDir-volym.
- Båda programcontainrarna kör Microsoft-containeravbildningen
aci-wordcount
:- Hamletcontainern kör wordcount-appen i sin standardkonfiguration och räknar ordfrekvenser i Shakespeares pjäs Hamlet.
- Containern juliet app läser kommandoradssträngen från volymen emptDir för att köra ordräkningsappen istället på Shakespeares Romeo och Julia.
Mer information och exempel med hjälp av avbildningen aci-wordcount
finns i Ange miljövariabler i containerinstanser.
{
"$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": {}
}
]
}
Distribuera mallen
Skapa en resursgrupp med kommandot az group create.
az group create --name myResourceGroup --location eastus
Distribuera mallen med kommandot az deployment group create .
az deployment group create \
--resource-group myResourceGroup \
--template-file azuredeploy.json
I en grupp med en init-container ökar distributionstiden på grund av den tid det tar för init-containern eller containrarna att slutföras.
Visa containerloggar
Om du vill verifiera att init-containern har körts kan du visa loggutdata för appcontainrarna med kommandot az container logs . Argumentet --container-name
anger den container som loggarna ska hämtas från. I det här exemplet hämtar du loggarna för hamlet - och julietcontainrarna , som visar olika kommandoutdata:
az container logs \
--resource-group myResourceGroup \
--name myContainerGroup \
--container-name hamlet
Utdata:
[('HAMLET', 386), ('HORATIO', 127), ('CLAUDIUS', 120)]
az container logs \
--resource-group myResourceGroup \
--name myContainerGroup \
--container-name juliet
Utdata:
[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]
Nästa steg
Init-containrar hjälper dig att utföra konfigurations- och initieringsuppgifter för dina programcontainrar. Mer information om hur du kör aktivitetsbaserade containrar finns i Köra containerbaserade aktiviteter med omstartsprinciper.
Azure Container Instances innehåller andra alternativ för att ändra beteendet för programcontainrar. Exempel: