Containrar i Azure Container Apps

Azure Container Apps hanterar information om Kubernetes och containerorkestrering åt dig. Du kan använda valfri körmiljö, valfritt programmeringsspråk och valfri utvecklingsstack för containrar i Azure Container Apps.

Azure Container Apps: Containers

Azure Container Apps stöder:

  • Alla Linux-baserade x86-64-containeravbildningar (linux/amd64) utan nödvändig basavbildning
  • Containrar från alla offentliga eller privata containerregister
  • Sidovagns- och initcontainrar

Bland funktionerna finns även:

  • Ändringar i konfigurationsavsnittet template utlöser en ny revision av containerappen.
  • Om en container kraschar startas den automatiskt om.

Jobbfunktionerna omfattar:

  • Jobbkörningar använder konfigurationsavsnittet template för att definiera containeravbildningen och andra inställningar när varje körning startar.
  • Om en container avslutas med en slutkod som inte är noll markeras jobbkörningen som misslyckad. Du kan konfigurera ett jobb för att försöka utföra misslyckade körningar igen.

Konfiguration

Följande kod är ett exempel på matrisen containersproperties.template i avsnittet i en resursmall för containerappen. Utdraget visar tillgängliga konfigurationsalternativ när du konfigurerar en container.

{
  "properties": {
    "template": {
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "env": [
            {
              "name": "HTTP_PORT",
              "value": "80"
            },
            {
              "name": "SECRET_VAL",
              "secretRef": "mysecret"
            }
          ],
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/appsettings",
              "volumeName": "appsettings-volume"
            }
          ],
          "probes": [
            {
              "type": "liveness",
              "httpGet": {
                "path": "/health",
                "port": 8080,
                "httpHeaders": [
                  {
                    "name": "Custom-Header",
                    "value": "liveness probe"
                  }
                ]
              },
              "initialDelaySeconds": 7,
              "periodSeconds": 3
            },
            {
              "type": "readiness",
              "tcpSocket": {
                "port": 8081
              },
              "initialDelaySeconds": 10,
              "periodSeconds": 3
            },
            {
              "type": "startup",
              "httpGet": {
                "path": "/startup",
                "port": 8080,
                "httpHeaders": [
                  {
                    "name": "Custom-Header",
                    "value": "startup probe"
                  }
                ]
              },
              "initialDelaySeconds": 3,
              "periodSeconds": 3
            }
          ]
        }
      ]
    },
    "initContainers": [
      {
        "name": "init",
        "image": "[parameters('init_container_image')]",
        "resources": {
          "cpu": 0.25,
          "memory": "0.5Gi"
        },
        "volumeMounts": [
          {
            "mountPath": "/appsettings",
            "volumeName": "appsettings-volume"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Inställning Description Kommentarer
image Containeravbildningens namn för containerappen. Det här värdet har formen repository/<IMAGE_NAME>:<TAG>.
name Eget namn på containern. Används för rapportering och identifiering.
command Containerns startkommando. Motsvarar Docker-startpunktsfältet.
args Starta kommandoargument. Poster i matrisen kopplas samman för att skapa en parameterlista som ska skickas till startkommandot.
env En matris med nyckel/värde-par som definierar miljövariabler. Använd secretRef i stället för fältet value för att referera till en hemlighet.
resources.cpu Antalet processorer som allokerats till containern. Med förbrukningsplanen måste värdena följa följande regler:

• större än noll
• mindre än eller lika med 2
• kan vara valfritt decimaltal (med högst två decimaler)

Är till exempel 1.25 giltigt, men 1.555 är ogiltigt.
Standardvärdet är 0,25 processorer per container.

När du använder arbetsbelastningsprofilen Förbrukning i den dedikerade planen gäller samma regler, förutom att processorer måste vara mindre än eller lika med 4.

När du använder den dedikerade planen måste de maximala processorerna vara mindre än eller lika med det antal kärnor som är tillgängliga i profilen där containerappen körs.
resources.memory Mängden RAM-minne som har allokerats till containern. Med förbrukningsplanen måste värdena följa följande regler:

• större än noll
• mindre än eller lika med 4Gi
• kan vara valfritt decimaltal (med högst två decimaler)

Är till exempel 1.25Gi giltigt, men 1.555Gi är ogiltigt.
Standardvärdet är 0.5Gi per container.

När du använder arbetsbelastningen Förbrukning i den dedikerade planen gäller samma regler förutom att 8Giminnet måste vara mindre än eller lika med .

När du använder den dedikerade planen måste det maximala minnet vara mindre än eller lika med mängden minne som är tillgängligt i profilen där containerappen körs.
volumeMounts En matris med volymmonteringsdefinitioner. Du kan definiera en tillfällig volym eller flera permanenta lagringsvolymer för din container. Mer information om lagringsvolymer finns i Använda lagringsmonteringar i Azure Container Apps.
probes En matris med hälsoavsökningar aktiverade i containern. Den här funktionen baseras på Kubernetes-hälsoavsökningar. Mer information om avsökningsinställningar finns i Hälsoavsökningar i Azure Container Apps.

När du använder antingen förbrukningsplanen eller en förbrukningsarbetsbelastning i den dedikerade planen måste den totala cpu- och minnesallokeringen som begärs för alla containrar i en containerapp lägga till någon av följande kombinationer.

vCPU:er (kärnor) Minne Förbrukningsplan Förbrukningsprofil för arbetsbelastning
0.25 0.5Gi
0.5 1.0Gi
0.75 1.5Gi
1.0 2.0Gi
1.25 2.5Gi
1.5 3.0Gi
1.75 3.5Gi
2.0 4.0Gi
2.25 4.5Gi
2.5 5.0Gi
2.75 5.5Gi
3.0 6.0Gi
3.25 6.5Gi
3.5 7.0Gi
3.75 7.5Gi
4.0 8.0Gi
  • Summan av CPU-begäranden i alla dina containrar måste matcha ett av värdena i kolumnen vCPU:er .

  • Summan av minnesbegäranden i alla containrar måste matcha minnesvärdet i minneskolumnen på samma rad i CPU-kolumnen.

När du använder förbrukningsprofilen i den dedikerade planen måste den totala processor- och minnesallokeringen som begärs för alla containrar i en containerapp vara mindre än eller lika med kärnorna och minnet som är tillgängligt i profilen.

Flera containrar

I avancerade scenarier kan du köra flera containrar i en enda containerapp. Använd endast det här mönstret i specifika fall där containrarna är tätt kopplade.

För de flesta mikrotjänstscenarier är bästa praxis att distribuera varje tjänst som en separat containerapp.

Flera containrar i samma containerapp delar hårddisk- och nätverksresurser och har samma programlivscykel.

Det finns två sätt att köra flera containrar i en containerapp: sidovagnscontainrar och init-containrar.

Sidovagnscontainrar

Du kan definiera flera containrar i en enda containerapp för att implementera sidovagnsmönstret.

Exempel på sidovagnscontainrar är:

  • En agent som läser loggar från den primära appcontainern på en delad volym och vidarebefordrar dem till en loggningstjänst.

  • En bakgrundsprocess som uppdaterar en cache som används av den primära appcontainern på en delad volym.

Dessa scenarier är exempel och representerar inte de enda sätten du kan implementera en sidovagn på.

Om du vill köra flera containrar i en containerapp lägger du till fler än en container i containers containerappmallens matris.

Init-containrar

Du kan definiera en eller flera init-containrar i en containerapp. Init-containrar körs före den primära appcontainern och används för att utföra initieringsuppgifter som att ladda ned data eller förbereda miljön.

Init-containrar definieras i matrisen initContainers för containerappmallen. Containrarna körs i den ordning de definieras i matrisen och måste slutföras innan den primära appcontainern startar.

Kommentar

Init-containrar stöder avbildningshämtningar med hanterade identiteter, men processer som körs i init-containrar har inte åtkomst till hanterade identiteter.

Containerregister

Du kan distribuera avbildningar som finns i privata register genom att ange autentiseringsuppgifter i Container Apps-konfigurationen.

Om du vill använda ett containerregister definierar du de obligatoriska fälten i registries matrisen properties.configuration i avsnittet i resursmallen för containerappen. Fältet passwordSecretRef identifierar namnet på hemligheten i matrisnamnet secrets där du definierade lösenordet.

{
  ...
  "registries": [{
    "server": "docker.io",
    "username": "my-registry-user-name",
    "passwordSecretRef": "my-password-secret-name"
  }]
}

Sparade autentiseringsuppgifter används för att hämta en containeravbildning från det privata registret när appen distribueras.

I följande exempel visas hur du konfigurerar autentiseringsuppgifter för Azure Container Registry i en containerapp.

{
  ...
  "configuration": {
    "secrets": [
      {
        "name": "acr-password",
        "value": "my-acr-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "myacr.azurecr.io",
        "username": "someuser",
        "passwordSecretRef": "acr-password"
      }
    ]
  }
}

Kommentar

Docker Hub begränsar antalet Nedladdningar av Docker-avbildningar. När gränsen har nåtts startar inte containrar i din app. Använd ett register med tillräckliga gränser, till exempel Azure Container Registry för att undvika det här problemet.

Hanterad identitet med Azure Container Registry

Du kan använda en hanterad Azure-identitet för att autentisera med Azure Container Registry i stället för att använda ett användarnamn och lösenord. Mer information finns i Hanterade identiteter i Azure Container Apps.

När du tilldelar en hanterad identitet till ett register använder du resurs-ID:t för hanterad identitet för en användartilldelad identitet eller system för den systemtilldelade identiteten.

{
    "identity": {
        "type": "SystemAssigned,UserAssigned",
        "userAssignedIdentities": {
            "<IDENTITY1_RESOURCE_ID>": {}
        }
    }
    "properties": {
        "configuration": {
            "registries": [
            {
                "server": "myacr1.azurecr.io",
                "identity": "<IDENTITY1_RESOURCE_ID>"
            },
            {
                "server": "myacr2.azurecr.io",
                "identity": "system"
            }]
        }
        ...
    }
}

Mer information om hur du konfigurerar användartilldelade identiteter finns i Lägga till en användartilldelad identitet.

Begränsningar

Azure Container Apps har följande begränsningar:

  • Privilegierade containrar: Azure Container Apps tillåter inte privilegierat containerläge med åtkomst på värdnivå.

  • Operativsystem: Linux-baserade (linux/amd64) containeravbildningar krävs.

Nästa steg