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, arrestato in modo anomalo o arrestato, tutto 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 montare una condivisione file di Azure creata con File di Azure. File di Azure offre condivisioni file completamente gestite ospitate in Archiviazione di Azure accessibili tramite il protocollo SMB (Industry Standard Server Message Block). 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.

Limitazioni

  • È possibile montare solo File di Azure condivisioni in contenitori Linux. Per altre informazioni sulle differenze nel supporto delle funzionalità per i gruppi di contenitori Linux e Windows, vedere la panoramicadi .
  • Il montaggio del volume della condivisione file di Azure richiede che il contenitore Linux sia eseguito come radice.
  • I montamenti del volume della condivisione file di Azure sono limitati al supporto CIFS.

Nota

Il montaggio di una File di Azure in un'istanza del contenitore è simile a un montaggio di associazioneDocker. Se si monta una condivisione in una directory contenitore in cui sono presenti file o directory, il montaggio nasconde i file o le directory, rendendoli inaccessibili durante l'esecuzione del contenitore.

Importante

Se si distribuiscono gruppi di contenitori in una rete virtuale di Azure, è necessario aggiungere un endpoint di servizio all'account Archiviazione di Azure locale.

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 account di archiviazione: se è stato usato lo script precedente, il nome dell'account di archiviazione è stato archiviato nella $ACI_PERS_STORAGE_ACCOUNT_NAME variabile . Per visualizzare il nome dell'account, digitare:

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • Nome condivisione: questo valore è già noto (definito acishare come nello script precedente)

  • Chiave dell'account di archiviazione: questo valore è disponibile 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 il contenitore e il volume di montaggio - 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 sono stati eseguiti i passaggi precedenti, è possibile montare la condivisione creata in precedenza usando 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 --dns-name-label valore deve essere univoco all'interno dell'area di Azure in cui si crea l'istanza del 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 la semplice 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 o uno strumento come il Microsoft Azure Storage Explorer per recuperare ed esaminare il file o i file scritti nella condivisione file.

Distribuire un contenitore e montare un 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 tramite 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 aci-hellofiles l'immagine. Il contenitore monta l'acishare di condivisione file di Azure 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, dnsNameLabel il valore deve essere univoco all'interno dell'area di Azure in cui si crea l'istanza di contenitore. Se necessario, aggiornare il valore nel 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

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 il contenitore e montare il volume - Resource Manager

Oltre alla distribuzione dell'interfaccia della riga di comando e di YAML, è possibile distribuire un gruppo di contenitori e montare un volume in un contenitore usando un modello Resource Manager Azure.

Popolare innanzitutto la matrice volumes nella sezione properties del gruppo di contenitori del modello.

Quindi, per ogni contenitore in cui si desidera montare il volume, popolare la volumeMounts matrice nella sezione della definizione del properties contenitore.

Il modello Resource Manager seguente definisce un gruppo di contenitori con un contenitore creato con aci-hellofiles l'immagine. Il contenitore monta l'acishare di condivisione file di Azure 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 deve essere dnsNameLabel univoco all'interno dell'area di Azure in cui si crea l'istanza di contenitore. Se necessario, aggiornare il valore nel modello.

{
  "$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 Resource Manager, salvare il codice JSON precedente in un file denominato , quindi eseguire il deploy-aci.json 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 usando un modello di Azure Resource Manager, un file YAML o un altro metodo a livello di codice. Per usare un modello o un file YAML, specificare i dettagli della condivisione e definire i volumi popolando la volumes matrice nella sezione del properties file.

Ad esempio, se sono state create due condivisioni File di Azure denominate share1 e share2 nell'account di archiviazione myStorageAccount, la matrice in un modello di Resource Manager sarà simile alla volumes 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: