Delen via


Gebruik opslagkoppelingen in Azure Container Apps

Een container-app heeft toegang tot verschillende typen opslag. Eén app kan, indien nodig, profiteren van meer dan één type opslag.

Notitie

Vermijd het gebruik van speciale tekens in volumenamen om implementatiefouten te voorkomen. Een volume met de naam credentials.json bevat bijvoorbeeld een speciaal teken (.) dat resulteert in een implementatiefout.

Opslagtype Beschrijving Persistentie Verbruiksvoorbeeld
Opslag met containerbereik Tijdelijke opslag beschikbaar voor een actieve container Gegevens zijn beschikbaar totdat de container wordt afgesloten Een lokale app-cache schrijven.
Opslag met replicabereik Tijdelijke opslag voor het delen van bestanden tussen containers in dezelfde replica Gegevens zijn beschikbaar totdat de replica wordt afgesloten De hoofd-app-container die logboekbestanden schrijft die door een sidecar-container worden verwerkt.
Azure Files Permanente opslag Gegevens blijven behouden in Azure Files Bestanden naar een bestandsshare schrijven om gegevens toegankelijk te maken door andere systemen.

Notitie

Azure Container Apps biedt geen ondersteuning voor het koppelen van bestandsshares vanuit Azure NetApp Files of Azure Blob Storage.

Tijdelijke opslag

Een container-app kan tijdelijke gegevens lezen en schrijven naar tijdelijke opslag. Tijdelijke opslag kan worden beperkt tot een container of een replica. De totale hoeveelheid container-bereik opslag en replica-bereik opslag die beschikbaar is voor elke replica, is afhankelijk van het totale aantal vCPU's dat aan de replica is toegewezen.

vCPU's Totale tijdelijke opslag
0,25 of lager 1 GiB
0,5 of lager dan 2 GiB
1 of lager dan 4 GiB
Meer dan 1 8 GiB

Opslag met container-scope

Een container kan naar een eigen bestandssysteem schrijven.

Containerbestandssysteemopslag heeft de volgende kenmerken:

  • De opslag is tijdelijk en verdwijnt wanneer de container wordt afgesloten of opnieuw wordt opgestart.
  • Bestanden die naar deze opslag worden geschreven, zijn alleen zichtbaar voor processen die worden uitgevoerd in de huidige container.

Opslag met replicabereik

U kunt een kortstondig, tijdelijk volume koppelen dat gelijk is aan EmptyDir (lege map) in Kubernetes. Deze opslag is bedoeld voor een enkele replica. Gebruik een EmptyDir volume om gegevens te delen tussen containers in dezelfde replica.

Opslag binnen het bereik van replicas heeft de volgende kenmerken:

  • Bestanden blijven behouden gedurende de levensduur van de replica.
    • Als een container in een replica opnieuw wordt opgestart, blijven de bestanden in het volume behouden.
  • Alle init- of app-containers in de replica kunnen hetzelfde volume koppelen.
  • Een container kan meerdere EmptyDir volumes koppelen.

Als u opslag met replicabereik wilt configureren, definieert u eerst een EmptyDir volume in de revisie. Definieer vervolgens een volumekoppeling in een of meer containers in de revisie.

Vereisten

Vereiste Instructies
Azure-account Als u nog geen account hebt, maakt u gratis een account.
Azure Container Apps-omgeving Maak een container-apps-omgeving.
Configuratie van beheerde identiteit Zorg ervoor dat aan de beheerde identiteit die is gekoppeld aan uw Container Apps-omgeving de juiste rollen zijn toegewezen voor toegang tot Azure Files.

Configuratie

Wanneer u opslag met replicabereik configureert met behulp van de Azure CLI, moet u een YAML-definitie gebruiken om uw container-app te maken of bij te werken.

  1. Als u een bestaande container-app wilt bijwerken voor het gebruik van opslag met replicabereik, exporteert u de specificatie van uw app naar een YAML-bestand met de naam app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. Breng de volgende wijzigingen aan in de specificatie van uw container-app.

    • Voeg een volumes matrix toe aan de sectie van de template definitie van uw container-app en definieer een volume. Als u al een volumes matrix hebt, voegt u een nieuw volume toe aan de matrix.
      • Dit name is een id voor het volume.
      • Gebruiken EmptyDir als de storageType.
    • Voor elke container in de sjabloon waarvoor u het volume wilt koppelen, definieer een volumekoppeling in de volumeMounts array van de containerdefinitie.
      • De volumeName is de naam die is gedefinieerd in de volumes array.
      • Het mountPath omvat het pad in de container voor het koppelen van het volume.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
        activeRevisionsMode: Single
      template:
        containers:
        - image: <IMAGE_NAME1>
          name: my-container-1
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        - image: <IMAGE_NAME_2>
          name: my-container-2
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        volumes:
        - name: myempty
          storageType: EmptyDir
    
  3. Werk uw container-app bij met behulp van het YAML-bestand.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Zie de YAML-specificatie voor een volledig voorbeeld.

Als u een volume met replicabereik wilt maken en in een container wilt koppelen, moet u de volgende wijzigingen aanbrengen in de container-apps-resource in een ARM-sjabloon.

  • Voeg een volumes matrix toe aan de sectie van de template definitie van uw container-app en definieer een volume. Als u al een volumes matrix hebt, voegt u een nieuw volume toe aan de matrix.
    • Dit name is een id voor het volume.
    • Gebruiken EmptyDir als de storageType.
  • Voor elke container in de sjabloon waarvoor u het volume wilt koppelen, definieer een volumekoppeling in de volumeMounts array van de containerdefinitie.
    • De volumeName is de naam die is gedefinieerd in de volumes array.
    • Het mountPath omvat het pad in de container voor het koppelen van het volume.

Voorbeeld van een ARM-sjabloonfragment:

{
  "apiVersion": "2022-03-01",
  "type": "Microsoft.App/containerApps",
  "name": "[parameters('containerappName')]",
  "location": "[parameters('location')]",
  "properties": {

    ...

    "template": {
      "revisionSuffix": "myrevision",
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        },
        {
          "name": "sidecar",
          "image": "[parameters('sidecar_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 3
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        }
      ]
    }
  }
}

Zie de API-specificatie van de ARM-sjabloon voor een volledig voorbeeld.

Als u een volume met replicabereik wilt maken en wilt koppelen in een container, implementeert u een nieuwe revisie van uw container-app met behulp van Azure Portal.

  1. Navigeer in Azure Portal naar uw container-app.

  2. Selecteer Revisiebeheer in het linkermenu.

  3. Selecteer Nieuwe revisie maken.

  4. Selecteer de container waaraan u het volume wilt koppelen.

  5. Selecteer in het deelvenster Container bewerken het tabblad Volumemounts.

  6. Maak onder de sectie Tijdelijke opslag een nieuw volume met de volgende informatie.

    • Volumenaam: een naam voor het tijdelijke volume.
    • Koppelpad: het absolute pad in de container om het volume te koppelen.
  7. Selecteer Opslaan om wijzigingen op te slaan en het contextvenster af te sluiten.

  8. Selecteer Maken om de nieuwe revisie te maken.

Azure Files-volume

U kunt een bestandsshare vanuit Azure Files koppelen als een volume in een container.

Azure Files Storage heeft de volgende kenmerken:

  • Bestanden die onder de aankoppellocatie zijn geschreven, worden opgeslagen in de bestandsdeling.
  • Bestanden in de share zijn beschikbaar via de koppelingslocatie.
  • Meerdere containers kunnen dezelfde bestandsshare koppelen, inclusief containers die zich in een andere replica, revisie of container-app bevinden.
  • Alle containers die de share koppelen, hebben toegang tot bestanden die zijn geschreven door een andere container of methode.
  • Meer dan één Azure Files-volume kan in één container worden gekoppeld.

Azure Files ondersteunt zowel SMB-protocollen (Server Message Block) als NFS (Network File System). U kunt een Azure Files-share koppelen met behulp van beide protocollen. De bestandsshare die u in de omgeving definieert, moet worden geconfigureerd met hetzelfde protocol dat wordt gebruikt door de bestandsshare in het opslagaccount.

Als u Azure Files-opslag in uw container wilt inschakelen, moet u uw omgeving en container-app als volgt instellen:

  • Maak een opslagdefinitie in de Container Apps-omgeving.
  • Als u NFS gebruikt, moet uw omgeving worden geconfigureerd met een aangepast VNet en moet het opslagaccount worden geconfigureerd om toegang vanuit het VNet toe te staan. Zie NFS-bestandsshares in Azure Files voor meer informatie.
  • Als uw omgeving is geconfigureerd met een aangepast VNet, moet u poort 445 en 2049 toestaan in de netwerkbeveiligingsgroep (NSG) die is gekoppeld aan het subnet.
  • Definieer een volume van het type AzureFile (SMB) of NfsAzureFile (NFS) in een revisie.
  • Definieer een volumekoppeling in een of meer containers in de revisie.
  • Het gebruikte Azure Files-opslagaccount moet toegankelijk zijn vanuit het virtuele netwerk van uw container-app. Zie Toegang verlenen vanuit een virtueel netwerk voor meer informatie.

Vereisten

Vereiste Instructies
Azure-account Als u nog geen account hebt, maakt u gratis een account.
Azure Storage-account Een opslagaccount maken.
Azure Container Apps-omgeving Maak een container-apps-omgeving.

Configuratie

Wanneer u een container-app configureert om een Azure Files-volume te koppelen met behulp van de Azure CLI, moet u een YAML-definitie gebruiken om uw container-app te maken of bij te werken.

Voor een stapsgewijze zelfstudie over het koppelen van een SMB-bestandsshare raadpleegt u Een Azure Files-opslagkoppeling maken in Azure Container Apps.

  1. Voeg een opslagdefinitie toe aan uw Container Apps-omgeving.

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --storage-type AzureFile \
        --azure-file-account-name <STORAGE_ACCOUNT_NAME> \
        --azure-file-account-key <STORAGE_ACCOUNT_KEY> \
        --azure-file-share-name <STORAGE_SHARE_NAME> \
        --access-mode ReadWrite
    

    Vervang <STORAGE_ACCOUNT_NAME> en <STORAGE_ACCOUNT_KEY> door de naam en sleutel van uw opslagaccount. Vervang <STORAGE_SHARE_NAME> door de naam van de bestandsshare in het opslagaccount.

    Geldige waarden voor --access-mode zijn en ReadWriteReadOnly.

  2. Als u een bestaande container-app wilt bijwerken om een bestandsshare te koppelen, exporteert u de specificatie van uw app naar een YAML-bestand met de naam app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. Breng de volgende wijzigingen aan in de specificatie van uw container-app.

    • Voeg een volumes matrix toe aan de sectie van de template definitie van uw container-app en definieer een volume. Als u al een volumes matrix hebt, voegt u een nieuw volume toe aan de matrix.
      • Dit name is een id voor het volume.
      • Voor storageType, gebruiken AzureFile voor SMB of NfsAzureFile voor NFS. Deze waarde moet overeenkomen met het opslagtype dat u in de omgeving hebt gedefinieerd.
      • Gebruik storageNamehiervoor de naam van de opslag die u in de omgeving hebt gedefinieerd.
      • Het mountOptions is een door komma's gescheiden reeks koppelopties. Zie MountOptions-instellingen gebruiken in Azure Files voor meer informatie.
      • De secrets lijst is een lijst met geheimen die in het volume moeten worden gemonteerd. Zie Geheimen in een volume monteren voor meer informatie.
    • Definieer voor elke container in de sjabloon, waarvoor u Azure Files-opslag wilt koppelen, een volumekoppeling in de volumeMounts array van de containerdefinitie.
      • De volumeName is de naam die is gedefinieerd in de volumes array.
      • Het mountPath omvat het pad in de container voor het koppelen van het volume.
      • Het subPath is het pad in het volume dat gemount moet worden. Als dat niet gespecificeerd is, wordt de root van het volume gemount. Voor meer informatie, zie (#sub-pad).
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - volumeName: azure-files-volume
            mountPath: /my-files
            subPath: my-sub-path
        volumes:
        - name: azure-files-volume
          storageType: AzureFile
          storageName: mystorage
    
  4. Werk uw container-app bij met behulp van het YAML-bestand.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Zie de YAML-specificatie voor een volledig voorbeeld.

De volgende ARM-sjabloonfragmenten laten zien hoe u een Azure Files-share toevoegt aan een Container Apps-omgeving en deze gebruikt in een container-app.

  1. Voeg een storages subresource toe aan de Container Apps-omgeving.

    {
      "type": "Microsoft.App/managedEnvironments",
      "apiVersion": "2022-03-01",
      "name": "[parameters('environment_name')]",
      "location": "[parameters('location')]",
      "properties": {
        "daprAIInstrumentationKey": "[parameters('dapr_ai_instrumentation_key')]",
        "appLogsConfiguration": {
          "destination": "log-analytics",
          "logAnalyticsConfiguration": {
            "customerId": "[parameters('log_analytics_customer_id')]",
            "sharedKey": "[parameters('log_analytics_shared_key')]"
          }
        }
      },
      "resources": [
        {
          "type": "storages",
          "name": "myazurefiles",
          "apiVersion": "2022-03-01",
          "dependsOn": [
            "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]"
          ],
          "properties": {
            "azureFile": {
              "accountName": "[parameters('storage_account_name')]",
              "accountKey": "[parameters('storage_account_key')]",
              "shareName": "[parameters('storage_share_name')]",
              "accessMode": "ReadWrite"
            }
          }
        }
      ]
    }
    
  2. Werk de container-app-resource bij om een volume- en volumekoppeling toe te voegen.

    {
      "apiVersion": "2023-05-01",
      "type": "Microsoft.App/containerApps",
      "name": "[parameters('containerappName')]",
      "location": "[parameters('location')]",
      "properties": {
    
        ...
    
        "template": {
          "revisionSuffix": "myrevision",
          "containers": [
            {
              "name": "main",
              "image": "[parameters('container_image')]",
              "resources": {
                "cpu": 0.5,
                "memory": "1Gi"
              },
              "volumeMounts": [
                {
                  "mountPath": "/myfiles",
                  "volumeName": "azure-files-volume",
                  "subPath": "my-sub-path"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • Voeg een volumes matrix toe aan de sectie van de template definitie van uw container-app en definieer een volume. Als u al een volumes matrix hebt, voegt u een nieuw volume toe aan de matrix.
      • Dit name is een id voor het volume.
      • Voor storageType, gebruiken AzureFile voor SMB of NfsAzureFile voor NFS. Deze waarde moet overeenkomen met het opslagtype dat u in de omgeving hebt gedefinieerd.
      • Gebruik storageNamehiervoor de naam van de opslag die u in de omgeving hebt gedefinieerd.
      • Het mountOptions is een door komma's gescheiden reeks koppelopties. Zie MountOptions-instellingen gebruiken in Azure Files voor meer informatie.
      • De secrets lijst is een lijst met geheimen die in het volume moeten worden gemonteerd. Zie Geheimen in een volume monteren voor meer informatie.
    • Definieer voor elke container in de sjabloon, waarvoor u Azure Files-opslag wilt koppelen, een volumekoppeling in de volumeMounts array van de containerdefinitie.
      • De volumeName is de naam die is gedefinieerd in de volumes array.
      • Het mountPath omvat het pad in de container voor het koppelen van het volume.
      • De subPath (optioneel) is het pad in het volume dat moet worden gekoppeld. Als dat niet gespecificeerd is, wordt de root van het volume gemount. Voor meer informatie, zie (#sub-pad).

Zie de API-specificatie van de ARM-sjabloon voor een volledig voorbeeld.

Als u een volumekoppeling wilt configureren voor Azure Files-opslag in Azure Portal, voegt u een bestandsshare toe aan uw Container Apps-omgeving en voegt u vervolgens een volumekoppeling toe aan uw container-app door een nieuwe revisie te maken.

  1. Navigeer in Azure Portal naar uw Container Apps-omgeving.

  2. Selecteer Azure Files in het navigatiedeelvenster onder Instellingen.

  3. Selecteer Toevoegen.

  4. Selecteer Server Message Block (SMB) of Network File System (NFS), afhankelijk van het protocol dat wordt gebruikt door uw bestandsshare.

  5. Voer in het contextvenster Bestandsdeling toevoegen de volgende gegevens in:

    • Naam: Een naam voor de bestandsshare.
    • Naam van opslagaccount: de naam van het opslagaccount dat de bestandsshare bevat.
    • Sleutel voor opslagaccount: de toegangssleutel voor het opslagaccount.
    • Bestandsshare: de naam van de bestandsshare.
    • Toegangsmodus: de toegangsmodus voor de bestandsshare. Geldige waarden zijn alleen-lezen/schrijven en alleen-lezen.
  6. Selecteer Toevoegen om het contextvenster af te sluiten.

  7. Selecteer Opslaan om de wijzigingen door te voeren.

  8. Navigeer naar uw container-app.

  9. Selecteer revisies en replica's in het navigatiedeelvenster onder Toepassing.

  10. Selecteer Nieuwe revisie maken.

  11. Ga naar de pagina Nieuwe revisie maken en implementeren en selecteer het tabblad Volumes.

  12. Selecteer Toevoegen.

  13. In het contextpaneel Volume toevoegen, stel het volgende in.

    • Volumetype: Azure-bestandsvolume.
    • Naam: Voer een volumenaam in.
    • Naam van bestandsshare: selecteer de bestandsshare die u eerder hebt gemaakt.
    • Opties voor koppelen: Voer desgewenst een door komma's gescheiden reeks koppelingsopties in. Zie MountOptions-instellingen gebruiken in Azure Files voor meer informatie.
  14. Selecteer Toevoegen om het contextvenster af te sluiten.

  15. Op de pagina Nieuwe revisie maken en opnieuw implementeren selecteert u het tabblad Container.

  16. Selecteer de container waarin u het volume wilt koppelen.

  17. Selecteer in het deelvenster Container bewerken het tabblad Volumemounts.

  18. Selecteer onder Volumenaam het volume dat u eerder hebt gemaakt.

  19. Voer in het koppelpad het absolute pad in de container in om het volume te koppelen.

  20. Voer in subpad (optioneel) het pad in het volume in dat moet worden gekoppeld. Als dat niet gespecificeerd is, wordt de root van het volume gemount. Voor meer informatie, zie (#sub-pad).

  21. Selecteer Opslaan om wijzigingen op te slaan en het contextvenster af te sluiten.

  22. Selecteer Maken om de nieuwe revisie te maken.

Subpad

Wanneer u een bestandsshare koppelt vanuit Azure Files, kunt u naast het koppelpad ook een subpad opgeven.

  • Koppelpad: het pad in de container waar u het volume wilt koppelen.
  • Subpad: het pad binnen het volume dat u wilt koppelen.

Het subpad is optioneel. Als dat niet gespecificeerd is, wordt de root van het volume gemount.

Het subpad is een relatief pad vanaf de wortel van het volume. Het subpad mag niet beginnen met /. Het opgeven van een subpad dat begint met / kan ervoor zorgen dat uw container-app niet wordt gestart. Is bijvoorbeeld my-volume-folder een geldig subpad, waar /my-volume-folder dat niet is.

Het subpad kan verwijzen naar een map of een bestand in het volume.

  • Als het subpad naar een map verwijst, moet het koppelpad verwijzen naar een lege map in de container.

  • Als het subpad naar een bestand verwijst, moet het koppelpad verwijzen naar een bestand dat nog niet bestaat in de container.

    Stel dat het subpad my-volume-folder/my-volume-file.txt is en het koppelpad /my-container-folder/my-container-file is. De map /my-container-folder moet al aanwezig zijn in de container, maar mag het bestand my-container-file.txtnog niet bevatten.

Eventuele schuine strepen aan het einde van subpaden worden genegeerd.