Condividi tramite


Usare i montaggi di archiviazione nelle App contenitore di Azure

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 di app principale che scrive i file di log elaborati da un contenitore sidecar.
File di Azure Archiviazione persistente I dati vengono salvati in modo persistente 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 spazio di archiviazione con ambito contenitore e con ambito replica disponibile per ogni replica dipende dal numero totale di vCPU allocati 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 equivalente a EmptyDir (directory vuota) in Kubernetes. Questa risorsa di archiviazione ha come ambito una singola replica. Usare un volume EmptyDir 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ù volumi EmptyDir.

Per configurare l'archiviazione con ambito replica, definire innanzitutto un volume EmptyDir 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 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 matrice volumes alla sezione template della definizione dell'app contenitore e definire un volume. Se si dispone già di una matrice volumes, aggiungere un nuovo volume alla matrice.
      • name è un identificatore per il volume.
      • Usare EmptyDir come storageType.
    • Per ogni contenitore nel modello per cui si vuole montare il volume, definire un montaggio del volume nella matrice volumeMounts della definizione del contenitore.
      • volumeName è il nome definito nella matrice volumes.
      • 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 matrice volumes alla sezione template della definizione dell'app contenitore e definire un volume. Se si dispone già di una matrice volumes, aggiungere un nuovo volume alla matrice.
    • name è un identificatore per il volume.
    • Usare EmptyDir come storageType.
  • Per ogni contenitore nel modello per cui si vuole montare il volume, definire un montaggio del volume nella matrice volumeMounts della definizione del contenitore.
    • volumeName è il nome definito nella matrice volumes.
    • 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. Passare all'app contenitore nel portale di Azure.

  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 del contesto Modifica 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.

Archiviazione File di Azure presenta le caratteristiche seguenti:

  • I file scritti nel percorso di montaggio vengono salvati in modo persistente 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 di File di Azure in un singolo contenitore.

File di Azure supporta i protocolli SMB (Server Message Block) e NFS (Network File System). È possibile montare una condivisione di 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 contenitore di Azure è disponibile in anteprima.

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

  • Creare una definizione di archiviazione nell'ambiente App contenitore di Azure.
  • 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 concedere le autorizzazioni alle 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 app contenitore.

Impostazione

Quando si configura un'app contenitore per montare un volume di 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 di File di Azure in App contenitore di Azure.

  1. Aggiungere una definizione di archiviazione all'ambiente App contenitore di Azure.

    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 matrice volumes alla sezione template della definizione dell'app contenitore e definire un volume. Se si dispone già di una matrice volumes, 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 storageName, usare il nome dell'archiviazione definito nell'ambiente.
    • Per ogni contenitore nel modello per cui si vuole montare il volume di archiviazione File di Azure, definire un montaggio del volume nella matrice volumeMounts della definizione del contenitore.
      • volumeName è il nome definito nella matrice volumes.
      • 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 di Azure e usarla in un'app contenitore.

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

    {
      "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 matrice volumes alla sezione template della definizione dell'app contenitore e definire un volume. Se si dispone già di una matrice volumes, 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 storageName, usare il nome dell'archiviazione definito nell'ambiente.
    • Per ogni contenitore nel modello per cui si vuole montare il volume di archiviazione File di Azure, definire un montaggio del volume nella matrice volumeMounts della definizione del contenitore.
      • volumeName è il nome definito nella matrice volumes.
      • 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 l'archiviazione di File di Azure nel portale di Azure, aggiungere una condivisione file all'ambiente App contenitore di Azure e quindi aggiungere un montaggio del volume all'app contenitore creando una nuova revisione.

  1. Passare all'ambiente App contenitore di Azure nel portale di Azure.

  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.
    • Nome dell'account di archiviazione: nome dell'account di archiviazione che contiene la condivisione file.
    • Chiave dell'account di archiviazione: 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 "In 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 del contesto Modifica 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.