Mount an Azure file share in Azure Container Instances (Montare una condivisione file di Azure in Istanze di Azure Container)
Per impostazione predefinita, Istanze di Azure Container è senza stato. Se il contenitore si blocca o si arresta, lo stato viene perso. Per rendere persistente lo stato oltre la durata del contenitore, è necessario montare un volume da un archivio esterno. Come illustrato in questa unità, in Istanze di Azure Container è possibile montare una condivisione file di Azure creata con File di Azure. File di Azure offre condivisioni file completamente gestite nel cloud, accessibili tramite il protocollo SMB (Server Message Block) standard di settore. L'uso di una condivisione file di Azure con Istanze di Azure Container offre funzionalità di condivisione di file simili all'uso di una condivisione file di Azure con macchine virtuali di Azure.
Limiti
- È possibile montare le condivisioni file di Azure solo in contenitori Linux.
- Il montaggio del volume della condivisione file di Azure richiede che il contenitore Linux venga eseguito come radice.
- I montaggi del volume della condivisione file di Azure sono limitati al supporto CIFS.
Distribuire contenitori e montare volumi
Per montare una condivisione file di Azure come un volume all'interno di un contenitore usando l'interfaccia della riga di comando di Azure, specificare il punto di montaggio della condivisione e del volume quando si crea il contenitore con az container create
. Di seguito è riportato un esempio del comando :
az container create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles \
--image mcr.microsoft.com/azuredocs/aci-hellofiles \
--dns-name-label aci-demo \
--ports 80 \
--azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--azure-file-volume-account-key $STORAGE_KEY \
--azure-file-volume-share-name $ACI_PERS_SHARE_NAME \
--azure-file-volume-mount-path /aci/logs/
Il valore --dns-name-label
deve essere univoco all'interno dell'area di Azure in cui si crea l'istanza di contenitore. Aggiornare il valore nel comando precedente se viene visualizzato un messaggio di errore relativo all'etichetta del nome DNS quando si esegue il comando.
Distribuire il contenitore e montare il volume - YAML
È possibile anche distribuire un gruppo di contenitori e montare un volume in un contenitore usando l'interfaccia della riga di comando di Azure e un modello YAML. La distribuzione mediante il modello YAML è il metodo preferito quando si distribuiscono gruppi di contenitori costituiti da più contenitori.
Il modello YAML seguente definisce un gruppo di contenitori con un contenitore creato con l'immagine aci-hellofiles
. Il contenitore monta la condivisione file di Azure acishare creata in precedenza come volume. Di seguito è riportato un esempio del file YAML.
apiVersion: '2019-12-01'
location: eastus
name: file-share-demo
properties:
containers:
- name: hellofiles
properties:
environmentVariables: []
image: mcr.microsoft.com/azuredocs/aci-hellofiles
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumeMounts:
- mountPath: /aci/logs/
name: filesharevolume
osType: Linux
restartPolicy: Always
ipAddress:
type: Public
ports:
- port: 80
dnsNameLabel: aci-demo
volumes:
- name: filesharevolume
azureFile:
sharename: acishare
storageAccountName: <Storage account name>
storageAccountKey: <Storage account key>
tags: {}
type: Microsoft.ContainerInstance/containerGroups
Montare più volumi
Per montare più volumi in un'istanza di contenitore, è necessario eseguire la distribuzione usando un modello di Azure Resource Manager o un file YAML. Per usare un modello o un file YAML, specificare i dettagli di condivisione e definire i volumi popolando la matrice volumes
nella sezione properties
del modello.
Ad esempio, se sono state create due condivisioni di File di Azure denominate share1 e share2 nell'account di archiviazione myStorageAccount, la matrice volumes
in un modello di Resource Manager sarà simile a quanto segue:
"volumes": [{
"name": "myvolume1",
"azureFile": {
"shareName": "share1",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
},
{
"name": "myvolume2",
"azureFile": {
"shareName": "share2",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
}]
Successivamente, per ogni contenitore del relativo gruppo in cui si desidera montare i volumi, inserire la matrice volumeMounts
nella sezione properties
della definizione del contenitore. Ad esempio, in questo modo vengono montati i due volumi, myvolume1 e myvolume2, definiti in precedenza:
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]