Dela via


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: