Mount an Azure file share in Azure Container Instances (Montare una condivisione file di Azure in Istanze di Azure Container)

Completato

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