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.
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
Apportare le modifiche seguenti alla specifica dell'app contenitore.
- Aggiungere una matrice
volumes
alla sezionetemplate
della definizione dell'app contenitore e definire un volume. Se si dispone già di una matricevolumes
, aggiungere un nuovo volume alla matrice.name
è un identificatore per il volume.- Usare
EmptyDir
comestorageType
.
- 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 matricevolumes
.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
- Aggiungere una matrice
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 sezionetemplate
della definizione dell'app contenitore e definire un volume. Se si dispone già di una matricevolumes
, aggiungere un nuovo volume alla matrice.name
è un identificatore per il volume.- Usare
EmptyDir
comestorageType
.
- 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 matricevolumes
.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.
Passare all'app contenitore nel portale di Azure.
Selezionare Gestione revisioni nel menu a sinistra.
Selezionare Crea nuova revisione.
Selezionare il contenitore in cui si vuole montare il volume.
Nel riquadro del contesto Modifica contenitore selezionare la scheda Montaggi volume.
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.
Selezionare Salva per salvare le modifiche e uscire dal riquadro del contesto.
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) oNfsAzureFile
(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.
- Se si usa NFS, è necessario disabilitare anche il trasferimento sicuro. Per altre informazioni, vedere Condivisioni file NFS in File di Azure e la sezione Creare una condivisione file di Azure NFS in questa esercitazione.
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.
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
sonoReadWrite
eReadOnly
.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
Apportare le modifiche seguenti alla specifica dell'app contenitore.
- Aggiungere una matrice
volumes
alla sezionetemplate
della definizione dell'app contenitore e definire un volume. Se si dispone già di una matricevolumes
, aggiungere un nuovo volume alla matrice.name
è un identificatore per il volume.- Per
storageType
, usareAzureFile
per SMB oNfsAzureFile
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 matricevolumes
.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
- Aggiungere una matrice
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.
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" } } } ] }
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 sezionetemplate
della definizione dell'app contenitore e definire un volume. Se si dispone già di una matricevolumes
, aggiungere un nuovo volume alla matrice.name
è un identificatore per il volume.- Per
storageType
, usareAzureFile
per SMB oNfsAzureFile
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 matricevolumes
.mountPath
è il percorso nel contenitore per montare il volume.
- Aggiungere una matrice
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.
Passare all'ambiente App contenitore di Azure nel portale di Azure.
Selezionare File di Azure dal menu a sinistra.
Selezionare Aggiungi.
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".
Selezionare Aggiungi per uscire dal riquadro di contesto.
Selezionare Salva per eseguire il commit delle modifiche.
Passare all'app contenitore.
Selezionare Gestione revisioni dal menu a sinistra.
Selezionare Crea nuova revisione.
Selezionare il contenitore in cui si vuole montare il volume.
Nel riquadro del contesto Modifica contenitore selezionare la scheda Montaggi volume.
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.
Selezionare Salva per salvare le modifiche e uscire dal riquadro del contesto.
Selezionare Crea per creare la nuova revisione.