Monter un partage de fichiers Azure dans Azure Container Instances

Effectué

Par défaut, les conteneurs Azure Container Instances sont sans état. Si le conteneur se bloque ou s’arrête, son état est entièrement perdu. Pour conserver l’état au-delà de la durée de vie du conteneur, vous devez monter un volume à partir d’un magasin externe. Comme indiqué dans cette unité, Azure Container Instances peut monter un partage de fichiers Azure créé avec Azure Files. Azure Files offre des partages de fichiers complètement managés dans le cloud, accessibles via le protocole SMB (Server Message Block) standard. L'utilisation d'un partage de fichiers Azure avec Azure Container Instances offre des fonctionnalités de partage de fichiers similaires à l’utilisation d’un partage de fichiers Azure avec machines virtuelles Azure.

Limites

  • Vous pouvez uniquement monter des partages Azure Files sur des conteneurs Linux.
  • Le montage de volume de partage de fichiers Azure requiert l’exécution du conteneur Linux en tant que racine.
  • Les montages de volumes de partage de fichiers Azure sont limités à la prise en charge de CIFS.

Déployer le conteneur et monter le volume

Pour monter un partage de fichiers Azure comme volume dans un conteneur à l’aide d’Azure CLI, spécifiez le point de montage du partage et du volume quand vous créez le conteneur avec az container create. Voici un exemple de la commande :

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/

La valeur --dns-name-label doit être unique au sein de la région Azure dans laquelle vous créez l’instance de conteneur. Mettez à jour la valeur de la commande précédente si vous recevez un message d’erreur Étiquette de nom DNS lorsque vous exécutez la commande.

Déployer le conteneur et monter le volume - YAML

Vous pouvez également déployer un groupe de conteneurs et monter un volume dans un conteneur avec l’interface Azure CLI et un modèle YAML. Le déploiement avec un modèle YAML est la méthode privilégiée lorsqu’il s’agit de déployer des groupes de conteneurs, composés de conteneurs multiples.

Le modèle YAML suivant définit un groupe de conteneurs avec un seul conteneur créé avec l’image aci-hellofiles. Le conteneur monte le partage de fichiers Azure acishare créé précédemment en tant que volume. Voici un exemple de fichier 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

Monter plusieurs volumes

Pour monter plusieurs volumes dans une instance de conteneur, vous devez effectuer le déploiement à l’aide d’un modèle Azure Resource Manager ou d'un fichier YAML. Pour utiliser un modèle ou fichier YAML, fournissez les détails de partage et définissez les volumes en remplissant le tableau volumes dans la section properties du modèle.

Par exemple, si vous avez créé deux partages de fichiers Azure nommés share1 et share2 dans le compte de stockage myStorageAccount, le tableau volumes dans un modèle Resource Manager ressemblerait à ceci :

"volumes": [{
  "name": "myvolume1",
  "azureFile": {
    "shareName": "share1",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
},
{
  "name": "myvolume2",
  "azureFile": {
    "shareName": "share2",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
}]

Ensuite, pour chaque conteneur du groupe de conteneurs dans lequel vous souhaitez monter les volumes, remplissez le tableau volumeMounts dans la section properties de la définition de conteneur. Ainsi, nous obtenons les deux volumes montés, myvolume1 et myvolume2, définis précédemment :

"volumeMounts": [{
  "name": "myvolume1",
  "mountPath": "/mnt/share1/"
},
{
  "name": "myvolume2",
  "mountPath": "/mnt/share2/"
}]