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 viene riavviato, 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 questo articolo, Istanze di Azure Container può montare una condivisione file di Azure creata con File di Azure. File di Azure offre condivisioni file completamente gestite ospitate in Archiviazione di Azure e accessibili tramite il protocollo SMB (Server Message Block) standard del 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
- Archiviazione di Azure non supporta il montaggio SMB della condivisione file usando l'identità gestita
- È possibile montare le condivisioni file di Azure solo in contenitori Linux. Per altre informazioni sulle differenze nel supporto delle funzionalità per i gruppi di contenitori Linux e Windows, vedere la panoramica.
- 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.
Nota
Il montaggio di una condivisione di File di Azure in un'istanza del contenitore è simile a un montaggio di associazione Docker. Se si monta una condivisione in una directory del contenitore in cui esistono file o directory, il montaggio nasconde i file o le directory, rendendoli inaccessibili durante l'esecuzione del contenitore.
Importante
Se la connessione in uscita a Internet è bloccata nella subnet delegata, è necessario aggiungere un endpoint di servizio ad Azure Strorage nella subnet delegata.
Creare una condivisione file di Azure
Prima di usare una condivisione file di Azure con Istanze di Azure Container è necessario creare la condivisione. Eseguire questo script per creare un account di archiviazione per ospitare la condivisione file e la condivisione in sé. Il nome dell'account di archiviazione deve essere globalmente univoco, quindi lo script aggiunge un valore casuale alla stringa di base.
# Change these four parameters as needed
ACI_PERS_RESOURCE_GROUP=myResourceGroup
ACI_PERS_STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
ACI_PERS_LOCATION=eastus
ACI_PERS_SHARE_NAME=acishare
# Create the storage account with the parameters
az storage account create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--location $ACI_PERS_LOCATION \
--sku Standard_LRS
# Create the file share
az storage share create \
--name $ACI_PERS_SHARE_NAME \
--account-name $ACI_PERS_STORAGE_ACCOUNT_NAME
Ottenere le credenziali di archiviazione
Per montare una condivisione file di Azure come volume in Istanze di Azure Container sono necessari tre valori: il nome dell'account di archiviazione, il nome della condivisione e la chiave di accesso alle risorse di archiviazione.
Nome dell'account di archiviazione: se è stato usato lo script precedente, il nome dell'account di archiviazione è stato archiviato nella variabile
$ACI_PERS_STORAGE_ACCOUNT_NAME
. Per visualizzare il nome dell'account, digitare:echo $ACI_PERS_STORAGE_ACCOUNT_NAME
Nome condivisione: questo valore è già noto (definito come
acishare
nello script precedente)Chiave dell'account di archiviazione: questo valore è reperibile usando il comando seguente:
STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name $ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" --output tsv) echo $STORAGE_KEY
Distribuire contenitori e montare volumi - Interfaccia della riga di comando
Per montare una condivisione file di Azure come volume in un contenitore usando l'interfaccia della riga di comando di Azure, specificare la condivisione e il punto di montaggio del volume quando si crea il contenitore con az container create. Se è stata eseguita la procedura precedente, è possibile montare la condivisione creata in precedenza tramite il comando seguente per creare un contenitore:
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.
Gestire i file nel volume montato
Dopo l'avvio del contenitore, è possibile usare l'app Web distribuita tramite l'immagine Microsoft aci-hellofiles per creare piccoli file di testo nella condivisione file di Azure nel percorso di montaggio specificato. Ottenere il nome di dominio completo (FQDN) dell'app Web con il comando az container show:
az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles --query ipAddress.fqdn --output tsv
Dopo aver salvato il testo usando l'app, è possibile usare il portale di Azure oppure uno strumento come Microsoft Azure Storage Explorer per recuperare e ispezionare il file scritto nella condivisione file.
Distribuire il contenitore e montare il volume - YAML
È anche possibile distribuire un gruppo di contenitori e montare un volume in un contenitore con l'interfaccia della riga di comando di Azure e un modello YAML. La distribuzione mediante il modello YAML è un 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. Dove indicato, immettere il nome e la chiave di archiviazione per l'account di archiviazione che ospita la condivisione file.
Come nell'esempio dell'interfaccia della riga di comando, il valore dnsNameLabel
deve essere univoco all'interno dell'area di Azure in cui si crea l'istanza del contenitore. Aggiornare il valore nel file YAML, se necessario.
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
Per eseguire la distribuzione con il modello YAML, salvare il codice YAML precedente in un file denominato deploy-aci.yaml
, quindi eseguire il comando az container create con il parametro --file
:
# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml
Distribuire un contenitore e un volume di montaggio - Resource Manager
Oltre all'interfaccia della riga di comando e alla distribuzione YAML, è possibile distribuire un gruppo di contenitori e montare un volume in un contenitore usando un modello di Azure Resource Manager.
Popolare innanzitutto la matrice volumes
nella sezione properties
del gruppo di contenitori del modello.
Quindi, per ogni contenitore in cui si vuole montare il volume, popolare la matrice volumeMounts
nella sezione properties
della definizione del contenitore.
Il modello di Resource Manager 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. Dove indicato, immettere il nome e la chiave di archiviazione per l'account di archiviazione che ospita la condivisione file.
Come negli esempi precedenti, il valore dnsNameLabel
deve essere univoco all'interno dell'area di Azure in cui si crea l'istanza del contenitore. Aggiornare il valore nel modello, se necessario.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "hellofiles",
"container1image": "mcr.microsoft.com/azuredocs/aci-hellofiles"
},
"resources": [
{
"name": "file-share-demo",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "filesharevolume",
"mountPath": "/aci/logs"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
],
"dnsNameLabel": "aci-demo"
},
"volumes": [
{
"name": "filesharevolume",
"azureFile": {
"shareName": "acishare",
"storageAccountName": "<Storage account name>",
"storageAccountKey": "<Storage account key>"
}
}
]
}
}
]
}
Per eseguire la distribuzione con il modello di Resource Manager, salvare il codice JSON precedente in un file denominato deploy-aci.json
, quindi eseguire il comando az deployment group create con il parametro --template-file
:
# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json
Montare più volumi
Per montare più volumi in un'istanza di contenitore, è necessario eseguire la distribuzione tramite un modello di Azure Resource Manager, un file YAML o un altro metodo programmatico. 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 file.
Ad esempio, se sono state create due condivisioni File di Azure denominate share1 e share2 nell'account di archiviazione myStorageAccount, la volumes
matrice in un modello di Resource Manager sarà simile all'esempio seguente:
"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/"
}]
Passaggi successivi
Informazioni su come montare altri tipi di volume in Istanze di Azure Container:
- Mount an emptyDir volume in Azure Container Instances (Montare un volume emptyDir in Istanze di Azure Container)
- Mount a gitRepo volume in Azure Container Instances (Montare un volume gitRepo in Istanze di Azure Container)
- Mount a secret volume in Azure Container Instances (Montare un volume segreto in Istanze di Azure Container)