Delen via


Opslagkoppelingen gebruiken 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.

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 worden verwerkt door een sidecarcontainer.
Azure Files Permanente opslag Gegevens blijven behouden in Azure Files Bestanden naar een bestandsshare schrijven om gegevens toegankelijk te maken door andere systemen.

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 opslag met containerbereik en opslag met replicabereik die beschikbaar is voor elke replica, is afhankelijk van de totale hoeveelheid vCPU's die aan de replica zijn toegewezen.

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

Opslag met containerbereik

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 gericht op één replica. Gebruik een EmptyDir volume om gegevens te delen tussen containers in dezelfde replica.

Opslag met replicabereik 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

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.
    • Definieer voor elke container in de sjabloon die u het volume wilt koppelen een volumekoppeling in de volumeMounts matrix van de containerdefinitie.
      • Dit volumeName is de naam die is gedefinieerd in de volumes matrix.
      • Het mountPath is het pad in de container om het volume te koppelen.
    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 wilt koppelen in een container, moet u de volgende wijzigingen aanbrengen in de resource container-apps 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.
  • Definieer voor elke container in de sjabloon die u het volume wilt koppelen een volumekoppeling in de volumeMounts matrix van de containerdefinitie.
    • Dit volumeName is de naam die is gedefinieerd in de volumes matrix.
    • Het mountPath is het pad in de container om het volume te koppelen.

Voorbeeld van 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 Een containercontext bewerken het tabblad Volumekoppelingen .

  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 zijn geschreven onder de koppelingslocatie, worden opgeslagen in de bestandsshare.
  • 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- als NFS-protocollen. 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.

Notitie

Ondersteuning voor het koppelen van NFS-shares in Azure Container Apps is in preview.

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.
    • Definieer voor elke container in de sjabloon die u Azure Files-opslag wilt koppelen een volumekoppeling in de volumeMounts matrix van de containerdefinitie.
      • Dit volumeName is de naam die is gedefinieerd in de volumes matrix.
      • Het mountPath is het pad in de container om het volume te koppelen.
    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
        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 onderliggende resource 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"
                }
              ]
            }
          ],
          "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.
    • Definieer voor elke container in de sjabloon die u Azure Files-opslag wilt koppelen een volumekoppeling in de volumeMounts matrix van de containerdefinitie.
      • Dit volumeName is de naam die is gedefinieerd in de volumes matrix.
      • Het mountPath is het pad in de container om het volume te koppelen.

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 linkermenu.

  3. Selecteer Toevoegen.

  4. Voer in het contextmenu Bestandsshare 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 'Lezen/schrijven' en 'Alleen-lezen'.
  5. Selecteer Toevoegen om het contextvenster af te sluiten.

  6. Selecteer Opslaan om de wijzigingen door te voeren.

  7. Navigeer naar uw container-app.

  8. Selecteer Revisiebeheer in het linkermenu.

  9. Selecteer Nieuwe revisie maken.

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

  11. Selecteer in het deelvenster Een containercontext bewerken het tabblad Volumekoppelingen .

  12. Maak onder de sectie Bestandsshares een nieuw volume met de volgende informatie.

    • Naam van bestandsshare: de bestandsshare die u hebt toegevoegd.
    • Koppelpad: het absolute pad in de container om het volume te koppelen.
  13. Selecteer Opslaan om wijzigingen op te slaan en het contextvenster af te sluiten.

  14. Selecteer Maken om de nieuwe revisie te maken.