Share via


Containers in Azure Container Apps

Azure Container Apps beheert de details van Kubernetes en containerindeling voor u. Containers in Azure Container Apps kunnen gebruikmaken van elke runtime-, computertaal of ontwikkelingsstack van uw keuze.

Azure Container Apps: Containers

Azure Container Apps ondersteunt:

  • Een x86-64-containerinstallatiekopieënlinux/amd64 op basis van Linux
  • Containers uit een openbaar of persoonlijk containerregister
  • Optionele sidecar- en init-containers

Functies zijn ook:

  • Apps gebruiken de template configuratiesectie om de containerinstallatiekopieën en andere instellingen te definiëren. Wijzigingen in de template configuratiesectie activeren een nieuwe revisie van de container-app.
  • Als een container vastloopt, wordt deze automatisch opnieuw opgestart.

Functies voor taken zijn onder andere:

  • Taakuitvoeringen gebruiken de template configuratiesectie om de containerinstallatiekopieën en andere instellingen te definiëren wanneer elke uitvoering wordt gestart.
  • Als een container wordt afgesloten met een afsluitcode die niet nul is, wordt de taakuitvoering gemarkeerd als mislukt. U kunt een taak configureren om mislukte uitvoeringen opnieuw uit te voeren.

Configuratie

De meeste container-apps hebben één container. In geavanceerde scenario's kan een app ook sidecar- en init-containers hebben. In een container-app-definitie worden de hoofd-app en de bijbehorende sidecarcontainers weergegeven in de containers matrix in de properties.template sectie en worden init-containers weergegeven in de initContainers matrix. In het volgende fragment ziet u de beschikbare configuratieopties bij het instellen van de containers van een app.

{
  "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"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Instelling Beschrijving Opmerkingen
image De naam van de containerinstallatiekopieën voor uw container-app. Deze waarde heeft de vorm van repository/<IMAGE_NAME>:<TAG>.
name Beschrijvende naam van de container. Wordt gebruikt voor rapportage en identificatie.
command De opstartopdracht van de container. Gelijk aan het invoerpuntveld van Docker.
args Opdrachtargumenten starten. Vermeldingen in de matrix worden samengevoegd om een parameterlijst te maken die moet worden doorgegeven aan de opstartopdracht.
env Een matrix met naam-/waardeparen die omgevingsvariabelen definiëren. Gebruik secretRef in plaats van het value veld om te verwijzen naar een geheim.
resources.cpu Het aantal CPU's dat aan de container is toegewezen. Zie vereisten voor vCPU en geheugentoewijzing
resources.memory De hoeveelheid RAM die aan de container is toegewezen. Zie vereisten voor vCPU en geheugentoewijzing
volumeMounts Een matrix met definities voor volumekoppeling. U kunt een tijdelijke of permanente opslagvolumes definiëren voor uw container. Zie Opslagkoppelingen gebruiken in Azure Container Apps voor meer informatie over opslagvolumes.
probes Een matrix met statustests die zijn ingeschakeld in de container. Zie Statustests in Azure Container Apps voor meer informatie over testinstellingen.

Vereisten voor vCPU en geheugentoewijzing

Wanneer u het verbruiksabonnement gebruikt, moet het totale CPU- en geheugen dat is toegewezen aan alle containers in een container-app, een van de volgende combinaties toevoegen.

vCPU's (kernen) Geheugen
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

Notitie

Apps die gebruikmaken van het verbruiksabonnement in een omgeving met alleen verbruik, zijn beperkt tot maximaal 2 kernen en 4Gi geheugen.

Meerdere containers

In geavanceerde scenario's kunt u meerdere containers uitvoeren in één container-app. Gebruik dit patroon alleen in specifieke gevallen waarin uw containers nauw zijn gekoppeld.

Voor de meeste microservicescenario's is de aanbevolen procedure om elke service als een afzonderlijke container-app te implementeren.

Meerdere containers in dezelfde container-app delen harde schijf- en netwerkbronnen en ervaren dezelfde toepassingslevenscyclus.

Er zijn twee manieren om extra containers uit te voeren in een container-app: sidecar-containers en init-containers.

Sidecar-containers

U kunt meerdere containers definiëren in één container-app om het sidecar-patroon te implementeren.

Voorbeelden van sidecarcontainers zijn:

  • Een agent die logboeken van de primaire app-container op een gedeeld volume leest en doorstuurt naar een logboekregistratieservice.

  • Een achtergrondproces waarmee een cache wordt vernieuwd die wordt gebruikt door de primaire app-container in een gedeeld volume.

Deze scenario's zijn voorbeelden en vertegenwoordigen niet de enige manieren waarop u een sidecar kunt implementeren.

Als u meerdere containers in een container-app wilt uitvoeren, voegt u meer dan één container toe in de containers matrix van de container-app-sjabloon.

Init-containers

U kunt een of meer init-containers definiëren in een container-app. Init-containers worden uitgevoerd vóór de primaire app-container en worden gebruikt om initialisatietaken uit te voeren, zoals het downloaden van gegevens of het voorbereiden van de omgeving.

Init-containers worden gedefinieerd in de initContainers matrix van de container-app-sjabloon. De containers worden uitgevoerd in de volgorde waarin ze zijn gedefinieerd in de matrix en moeten worden voltooid voordat de primaire app-container wordt gestart.

Notitie

Init-containers in apps die gebruikmaken van het Dedicated-plan of worden uitgevoerd in een omgeving met alleen verbruik, hebben tijdens runtime geen toegang tot beheerde identiteiten.

Containerregisters

U kunt installatiekopieën implementeren die worden gehost in privéregisters door referenties op te geven in de Container Apps-configuratie.

Als u een containerregister wilt gebruiken, definieert u het register in de registries matrix in de properties.configuration sectie van de resourcesjabloon voor de container-app. Het passwordSecretRef veld identificeert de naam van het geheim in de secrets matrixnaam waarin u het wachtwoord hebt gedefinieerd.

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

Opgeslagen referenties worden gebruikt om een containerinstallatiekopie op te halen uit het privéregister wanneer uw app wordt geïmplementeerd.

In het volgende voorbeeld ziet u hoe u Azure Container Registry-referenties configureert in een container-app.

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

Notitie

Docker Hub beperkt het aantal downloads van Docker-installatiekopieën. Wanneer de limiet is bereikt, kunnen containers in uw app niet worden gestart. Gebruik een register met voldoende limieten, zoals Azure Container Registry om dit probleem te voorkomen.

Beheerde identiteit met Azure Container Registry

U kunt een door Azure beheerde identiteit gebruiken om te verifiëren met Azure Container Registry in plaats van een gebruikersnaam en wachtwoord te gebruiken. Zie Beheerde identiteiten in Azure Container Apps voor meer informatie.

Als u een beheerde identiteit met een register wilt gebruiken, moet de identiteit zijn ingeschakeld in de app en moet deze rol in het register worden toegewezen acrPull . Als u het register wilt configureren, gebruikt u de resource-id van de beheerde identiteit voor een door de gebruiker toegewezen identiteit of system voor de door het systeem toegewezen identiteit in de identity eigenschap van het register. Configureer geen gebruikersnaam en wachtwoord bij het gebruik van een beheerde identiteit.

{
    "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"
            }]
        }
        ...
    }
}

Zie Een door de gebruiker toegewezen identiteit toevoegen voor meer informatie over het configureren van door de gebruiker toegewezen identiteiten.

Beperkingen

Azure Container Apps heeft de volgende beperkingen:

  • Bevoegde containers: Azure Container Apps staat de modus voor bevoegde containers met toegang op hostniveau niet toe.

  • Besturingssysteem: containerinstallatiekopieën op basis vanlinux/amd64 Linux zijn vereist.

  • Maximale afbeeldingsgrootte:

    • Het workloadprofiel Verbruik biedt ondersteuning voor containerinstallatiekopieën die maximaal 8 GB voor elke app of taakreplica in totaal bevatten.
    • Toegewezen workloadprofielen ondersteunen grotere containerinstallatiekopieën. Omdat een Toegewezen workloadprofiel meerdere apps of taken kan uitvoeren, delen meerdere containerinstallatiekopieën de beschikbare schijfruimte. De werkelijke ondersteunde afbeeldingsgrootte varieert op basis van resources die door andere apps en taken worden gebruikt.

Volgende stappen