Share via


Usare i montaggi di archiviazione nelle app Azure Container

Un'app contenitore ha accesso a diversi tipi di archiviazione. Una singola app può sfruttare più di un tipo di spazio di archiviazione, se necessario.

Tipo di archiviazione Descrizione Persistenza Esempio di utilizzo
Archiviazione con ambito contenitore Archiviazione temporanea disponibile per un contenitore in esecuzione I dati sono disponibili fino all'arresto del contenitore Scrittura di una cache dell'app locale.
Archiviazione con ambito replica Archiviazione temporanea per la condivisione di file tra contenitori nella stessa replica I dati sono disponibili fino all'arresto della replica Il contenitore principale dell'app che scrive i file di log elaborati da un contenitore sidecar.
File di Azure Archiviazione permanente I dati vengono salvati in modo permanente in File di Azure Scrittura di file in una condivisione file per rendere i dati accessibili da altri sistemi.

Archiviazione temporanea

Un'app contenitore può leggere e scrivere dati temporanei nell'archiviazione temporanea. Lo spazio di archiviazione temporaneo può essere limitato a un contenitore o a una replica. La quantità totale di risorse di archiviazione con ambito contenitore e con ambito di replica disponibili per ogni replica dipende dalla quantità totale di vCPU allocate alla replica.

vCPU Spazio di archiviazione temporaneo totale
0,25 o inferiore 1 GiB
0,5 o inferiore 2 GiB
1 o inferiore 4 GiB
Oltre 1 8 GiB

Archiviazione con ambito contenitore

Un contenitore può scrivere nel proprio file system.

L'archiviazione del file system del contenitore presenta le caratteristiche seguenti:

  • L'archiviazione è temporanea e scompare quando il contenitore viene arrestato o riavviato.
  • I file scritti in questa risorsa di archiviazione sono visibili solo ai processi in esecuzione nel contenitore corrente.

Archiviazione con ambito replica

È possibile montare un volume temporaneo temporaneo equivalente a EmptyDir (directory vuota) in Kubernetes. Questa risorsa di archiviazione ha come ambito una singola replica. Usare un EmptyDir volume per condividere i dati tra contenitori nella stessa replica.

L'archiviazione con ambito replica presenta le caratteristiche seguenti:

  • I file vengono mantenuti per la durata della replica.
    • Se un contenitore in una replica viene riavviato, i file nel volume rimangono.
  • Qualsiasi contenitore di app o init nella replica può montare lo stesso volume.
  • Un contenitore può montare più EmptyDir volumi.

Per configurare l'archiviazione con ambito replica, definire innanzitutto un EmptyDir volume nella revisione. Definire quindi un montaggio del volume in uno o più contenitori nella revisione.

Prerequisiti

Requisito Istruzioni
Account di Azure Se non si dispone di un account, crearne uno gratuitamente.
Ambiente di App contenitore di Azure Creare un ambiente di app contenitore.

Impostazione

Quando si configura l'archiviazione con ambito replica usando l'interfaccia della riga di comando di Azure, è necessario usare una definizione YAML per creare o aggiornare l'app contenitore.

  1. Per aggiornare un'app contenitore esistente per usare l'archiviazione con ambito replica, esportare la specifica dell'app in un file YAML denominato app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. Apportare le modifiche seguenti alla specifica dell'app contenitore.

    • Aggiungere una volumes matrice alla template sezione della definizione dell'app contenitore e definire un volume. Se si dispone già di una volumes matrice, aggiungere un nuovo volume alla matrice.
      • name è un identificatore per il volume.
      • Usare EmptyDir come storageType.
    • Per ogni contenitore nel modello che si vuole montare il volume, definire un montaggio del volume nella volumeMounts matrice della definizione del contenitore.
      • volumeName è il nome definito nella volumes matrice.
      • mountPath è il percorso nel contenitore per montare il 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. Aggiornare l'app contenitore usando il file YAML.

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

Per un esempio completo, vedere la specifica YAML.

Per creare un volume con ambito di replica e montarlo in un contenitore, apportare le modifiche seguenti alla risorsa app contenitore in un modello di Resource Manager:

  • Aggiungere una volumes matrice alla template sezione della definizione dell'app contenitore e definire un volume. Se si dispone già di una volumes matrice, aggiungere un nuovo volume alla matrice.
    • name è un identificatore per il volume.
    • Usare EmptyDir come storageType.
  • Per ogni contenitore nel modello che si vuole montare il volume, definire un montaggio del volume nella volumeMounts matrice della definizione del contenitore.
    • volumeName è il nome definito nella volumes matrice.
    • mountPath è il percorso nel contenitore per montare il volume.

Esempio di frammento di modello di Resource Manager:

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

Per un esempio completo, vedere la specifica dell'API del modello di Resource Manager.

Per creare un volume con ambito di replica e montarlo in un contenitore, distribuire una nuova revisione dell'app contenitore usando il portale di Azure.

  1. Nella portale di Azure passare all'app contenitore.

  2. Selezionare Gestione revisioni nel menu a sinistra.

  3. Selezionare Crea nuova revisione.

  4. Selezionare il contenitore in cui si vuole montare il volume.

  5. Nel riquadro Modifica contesto contenitore selezionare la scheda Montaggi volume.

  6. Nella sezione Archiviazione temporanea creare un nuovo volume con le informazioni seguenti.

    • Nome volume: nome del volume temporaneo.
    • Percorso di montaggio: percorso assoluto nel contenitore per montare il volume.
  7. Selezionare Salva per salvare le modifiche e uscire dal riquadro del contesto.

  8. Selezionare Crea per creare la nuova revisione.

Volume di File di Azure

È possibile montare una condivisione file da File di Azure come volume in un contenitore.

File di Azure archiviazione presenta le caratteristiche seguenti:

  • I file scritti nel percorso di montaggio vengono salvati in modo permanente nella condivisione file.
  • I file nella condivisione sono disponibili tramite il percorso di montaggio.
  • Più contenitori possono montare la stessa condivisione file, incluse quelle presenti in un'altra replica, revisione o app contenitore.
  • Tutti i contenitori che montano la condivisione possono accedere ai file scritti da qualsiasi altro contenitore o metodo.
  • È possibile montare più di un volume File di Azure in un singolo contenitore.

File di Azure supporta sia i protocolli SMB che NFS. È possibile montare una condivisione File di Azure usando uno dei due protocolli. La condivisione file definita nell'ambiente deve essere configurata con lo stesso protocollo usato dalla condivisione file nell'account di archiviazione.

Nota

Il supporto per il montaggio di condivisioni NFS in App Azure Container è disponibile in anteprima.

Per abilitare File di Azure archiviazione nel contenitore, è necessario configurare l'ambiente e l'app contenitore come indicato di seguito:

  • Creare una definizione di archiviazione nell'ambiente App contenitore.
  • Se si usa NFS, l'ambiente deve essere configurato con una rete virtuale personalizzata e l'account di archiviazione deve essere configurato per consentire l'accesso dalla rete virtuale. Per altre informazioni, vedere Condivisioni file NFS in File di Azure .
  • Se l'ambiente è configurato con una rete virtuale personalizzata, è necessario consentire le porte 445 e 2049 nel gruppo di sicurezza di rete (NSG) associato alla subnet.
  • Definire un volume di tipo AzureFile (SMB) o NfsAzureFile (NFS) in una revisione.
  • Definire un montaggio del volume in uno o più contenitori nella revisione.
  • L'account di archiviazione File di Azure usato deve essere accessibile dalla rete virtuale dell'app contenitore. Per altre informazioni, vedere Concedere l'accesso da una rete virtuale.

Prerequisiti

Requisito Istruzioni
Account di Azure Se non si dispone di un account, crearne uno gratuitamente.
Account di archiviazione di Azure Creare un account di archiviazione.
Ambiente di App contenitore di Azure Creare un ambiente di app contenitore.

Impostazione

Quando si configura un'app contenitore per montare un volume File di Azure usando l'interfaccia della riga di comando di Azure, è necessario usare una definizione YAML per creare o aggiornare l'app contenitore.

Per un'esercitazione dettagliata sul montaggio di una condivisione file SMB, vedere Creare un montaggio di archiviazione File di Azure in App Azure Container.

  1. Aggiungere una definizione di archiviazione all'ambiente app contenitore.

    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
    

    Sostituire <STORAGE_ACCOUNT_NAME> e <STORAGE_ACCOUNT_KEY> con il nome e la chiave dell'account di archiviazione. Sostituire <STORAGE_SHARE_NAME> con il nome della condivisione file nell'account di archiviazione.

    I valori validi per --access-mode sono ReadWrite e ReadOnly.

  2. Per aggiornare un'app contenitore esistente per montare una condivisione file, esportare la specifica dell'app in un file YAML denominato app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. Apportare le modifiche seguenti alla specifica dell'app contenitore.

    • Aggiungere una volumes matrice alla template sezione della definizione dell'app contenitore e definire un volume. Se si dispone già di una volumes matrice, aggiungere un nuovo volume alla matrice.
      • name è un identificatore per il volume.
      • Per storageType, usare AzureFile per SMB o NfsAzureFile per NFS. Questo valore deve corrispondere al tipo di archiviazione definito nell'ambiente.
      • Per storageNameusare il nome dell'archiviazione definita nell'ambiente.
    • Per ogni contenitore nel modello che si vuole montare File di Azure archiviazione, definire un montaggio del volume nella volumeMounts matrice della definizione del contenitore.
      • volumeName è il nome definito nella volumes matrice.
      • mountPath è il percorso nel contenitore per montare il volume.
    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. Aggiornare l'app contenitore usando il file YAML.

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

Per un esempio completo, vedere la specifica YAML.

I frammenti di modello di Resource Manager seguenti illustrano come aggiungere una condivisione File di Azure a un ambiente app contenitore e usarla in un'app contenitore.

  1. Aggiungere una storages risorsa figlio all'ambiente App contenitore.

    {
      "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. Aggiornare la risorsa dell'app contenitore per aggiungere un volume e un montaggio del volume.

    {
      "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"
            }
          ]
        }
      }
    }
    
    • Aggiungere una volumes matrice alla template sezione della definizione dell'app contenitore e definire un volume. Se si dispone già di una volumes matrice, aggiungere un nuovo volume alla matrice.
      • name è un identificatore per il volume.
      • Per storageType, usare AzureFile per SMB o NfsAzureFile per NFS. Questo valore deve corrispondere al tipo di archiviazione definito nell'ambiente.
      • Per storageNameusare il nome dell'archiviazione definita nell'ambiente.
    • Per ogni contenitore nel modello che si vuole montare File di Azure archiviazione, definire un montaggio del volume nella volumeMounts matrice della definizione del contenitore.
      • volumeName è il nome definito nella volumes matrice.
      • mountPath è il percorso nel contenitore per montare il volume.

Per un esempio completo, vedere la specifica dell'API del modello di Resource Manager.

Per configurare un montaggio del volume per File di Azure archiviazione nel portale di Azure, aggiungere una condivisione file all'ambiente App contenitore e quindi aggiungere un montaggio del volume all'app contenitore creando una nuova revisione.

  1. Nella portale di Azure passare all'ambiente App contenitore.

  2. Selezionare File di Azure dal menu a sinistra.

  3. Selezionare Aggiungi.

  4. Nel menu di scelta rapida Aggiungi condivisione file immettere le informazioni seguenti:

    • Nome: nome della condivisione file.
    • Archiviazione nome dell'account: nome dell'account di archiviazione che contiene la condivisione file.
    • Archiviazione chiave dell'account: chiave di accesso per l'account di archiviazione.
    • Condivisione file: nome della condivisione file.
    • Modalità di accesso: modalità di accesso per la condivisione file. I valori validi sono "Lettura/Scrittura" e "Sola lettura".
  5. Selezionare Aggiungi per uscire dal riquadro di contesto.

  6. Selezionare Salva per eseguire il commit delle modifiche.

  7. Passare all'app contenitore.

  8. Selezionare Gestione revisioni dal menu a sinistra.

  9. Selezionare Crea nuova revisione.

  10. Selezionare il contenitore in cui si vuole montare il volume.

  11. Nel riquadro Modifica contesto contenitore selezionare la scheda Montaggi volume.

  12. Nella sezione Condivisioni file creare un nuovo volume con le informazioni seguenti.

    • Nome condivisione file: condivisione file aggiunta.
    • Percorso di montaggio: percorso assoluto nel contenitore per montare il volume.
  13. Selezionare Salva per salvare le modifiche e uscire dal riquadro del contesto.

  14. Selezionare Crea per creare la nuova revisione.