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 zonder vereiste basisinstallatiekopieën
  • Containers uit een openbaar of persoonlijk containerregister
  • Sidecar- en init-containers

Functies zijn ook:

  • 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 volgende code is een voorbeeld van de containers matrix in de properties.template sectie van een resourcesjabloon voor een container-app. In het fragment ziet u de beschikbare configuratieopties bij het instellen van een 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"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Instelling Omschrijving 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 van sleutel-/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. Bij het verbruiksabonnement moeten waarden voldoen aan de volgende regels:

• groter dan nul
• kleiner dan of gelijk aan 2
• kan elk decimaal getal zijn (met een maximum van twee decimalen)

Is bijvoorbeeld 1.25 geldig, maar 1.555 is ongeldig.
De standaardwaarde is 0,25 CPU's per container.

Wanneer u het workloadprofiel Verbruik voor het Toegewezen abonnement gebruikt, zijn dezelfde regels van toepassing, behalve CPU's moeten kleiner zijn dan of gelijk zijn aan 4.

Wanneer u het Dedicated-abonnement gebruikt, moeten de maximale CPU's kleiner zijn dan of gelijk zijn aan het aantal kernen dat beschikbaar is in het profiel waarop de container-app wordt uitgevoerd.
resources.memory De hoeveelheid RAM die aan de container is toegewezen. Bij het verbruiksabonnement moeten waarden voldoen aan de volgende regels:

• groter dan nul
• kleiner dan of gelijk aan 4Gi
• kan elk decimaal getal zijn (met een maximum van twee decimalen)

Is bijvoorbeeld 1.25Gi geldig, maar 1.555Gi is ongeldig.
De standaardwaarde is 0.5Gi per container.

Wanneer u de workload Verbruik voor het toegewezen abonnement gebruikt, gelden dezelfde regels, behalve dat het geheugen kleiner dan of gelijk is aan 8Gi.

Wanneer u het Dedicated-abonnement gebruikt, moet het maximale geheugen kleiner zijn dan of gelijk zijn aan de hoeveelheid geheugen die beschikbaar is in het profiel waarop de container-app wordt uitgevoerd.
volumeMounts Een matrix met definities voor volumekoppeling. U kunt een tijdelijk volume of meerdere permanente opslagvolumes voor uw container definiëren. Zie Opslagkoppelingen gebruiken in Azure Container Apps voor meer informatie over opslagvolumes.
probes Een matrix met statustests die zijn ingeschakeld in de container. Deze functie is gebaseerd op Kubernetes-statustests. Zie Statustests in Azure Container Apps voor meer informatie over testinstellingen.

Wanneer u het verbruiksabonnement of een workload Verbruik in het toegewezen abonnement gebruikt, moeten de totale CPU- en geheugentoewijzingen die zijn aangevraagd voor alle containers in een container-app, een van de volgende combinaties toevoegen.

vCPU's (kernen) Geheugen Verbruiksabonnement Workloadprofiel verbruik
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
  • Het totaal van de CPU-aanvragen in al uw containers moet overeenkomen met een van de waarden in de kolom vCPU's .

  • Het totaal van de geheugenaanvragen in al uw containers moet overeenkomen met de geheugenwaarde in de geheugenkolom in dezelfde rij van de CPU-kolom.

Wanneer u het verbruiksprofiel in het toegewezen abonnement gebruikt, moeten de totale CPU- en geheugentoewijzingen die zijn aangevraagd voor alle containers in een container-app, kleiner zijn dan of gelijk zijn aan de kernen en het geheugen die beschikbaar zijn in het profiel.

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.

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

Er zijn twee manieren om meerdere 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 ondersteunen pulls van installatiekopieën met behulp van beheerde identiteiten, maar processen die worden uitgevoerd in init-containers hebben 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 de vereiste velden in 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": "acr-password",
        "value": "my-acr-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "myacr.azurecr.io",
        "username": "someuser",
        "passwordSecretRef": "acr-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.

Wanneer u een beheerde identiteit toewijst aan een register, 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.

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

Volgende stappen