Monter un partage de fichiers Azure dans Azure Container Instances

Par défaut, les conteneurs Azure Container Instances sont sans état. Si le conteneur est redémarré, 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 stockage externe. Comme indiqué dans cet article, 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 hébergés dans Stockage Azure qui sont 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. Pour plus d’informations sur les différences de prise en charge des fonctionnalités pour les groupes de conteneurs Linux et Windows, consultez la Vue d’ensemble.
  • Le montage du volume de partage de fichiers Azure nécessite que le conteneur Linux soit exécuté en tant que racine.
  • Les montages de volumes de partage de fichiers Azure sont limités à la prise en charge de CIFS.

Notes

Le montage d’un partage Azure Files vers une instance de conteneur est similaire à un montage de liaison Docker. Si vous montez un partage dans un répertoire de conteneur dans lequel des fichiers ou des répertoires existent, le montage masque les fichiers ou les répertoires, les rendant inaccessibles pendant l’exécution du conteneur.

Important

Si vous déployez des groupes de conteneurs dans un réseau virtuel Azure, vous devez ajouter un point de terminaison de service à votre compte de stockage Azure.

Crée un partage de fichiers Azure

Avant d’utiliser un partage de fichiers Azure avec Azure Container Instances, vous devez le créer. Exécutez le script suivant pour créer un compte de stockage et y héberger le partage de fichiers, et le partage proprement dit. Comme le nom du compte de stockage doit être globalement unique, le script ajoute une valeur aléatoire à la chaîne de 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

Obtenir des informations d’identification de stockage

Pour monter un partage de fichiers Azure en tant que volume dans Azure Container Instances, vous avez besoin de trois valeurs : le nom du compte de stockage, le nom du partage et la clé d’accès de stockage.

  • Nom du compte de stockage : si vous avez utilisé le script précédent, le nom du compte de stockage a été stocké dans la variable $ACI_PERS_STORAGE_ACCOUNT_NAME. Pour afficher le nom du compte, entrez :

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • Nom de partage : cette valeur est déjà connue (définie comme acishare dans le script précédent)

  • Clé de compte de stockage : cette valeur est disponible à l’aide de la commande suivante :

    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
    

Déployer le conteneur et monter le volume - CLI

Pour monter un partage de fichiers Azure en tant que volume dans un conteneur en utilisant Azure CLI, spécifiez le point de montage du volume et le partage lorsque vous créez le conteneur avec az container create. Si vous avez accompli les étapes précédentes, vous pouvez monter le partage que vous avez créé avant à l’aide de la commande suivante pour créer un conteneur :

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.

Gérer les fichiers dans le volume monté

Après le démarrage du conteneur, vous pouvez utiliser l’application web simple déployée par l’image Microsoft aci-hellofiles pour créer de petits fichiers texte dans le partage de fichiers Azure sur le chemin de montage que vous avez indiqué. Obtenir le nom de domaine complet de l’application web (FQDN) avec la commande az container show :

az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
  --name hellofiles --query ipAddress.fqdn --output tsv

Après avoir enregistré le texte à l’aide de l’application, vous pouvez utiliser le portail Azure ou un outil tel que l’Explorateur Stockage Microsoft Azure pour récupérer et inspecter le fichier ou les fichiers écrits sur le partage de fichiers.

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. Lorsque cela est indiqué, entrez la clé de stockage et le nom du compte de stockage qui héberge le partage de fichiers.

Comme dans l’exemple CLI, la valeur dnsNameLabel doit être unique au sein de la région Azure dans laquelle vous créez l’instance de conteneur. Si nécessaire, mettez à jour la valeur dans le 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

Pour effectuer un déploiement avec le modèle YAML, enregistrez le YAML précédent dans un fichier nommé deploy-aci.yaml, puis exécutez la commande az container create avec le paramètre --file :

# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml

Déployer le conteneur et monter le volume - Resource Manager

En plus du déploiement de l’interface CLI et de YAML, vous pouvez déployer un groupe de conteneurs et monter un volume dans un conteneur à l’aide d’un modèle Resource Manager Azure.

Tout d’abord, remplissez le tableau volumes dans la section properties du groupe de conteneurs du modèle.

Ensuite, pour chaque conteneur dans lequel vous souhaitez monter le volume, renseignez le tableau volumeMounts dans la section properties de la définition de conteneur.

Le modèle Resource Manager suivant définit un groupe de conteneurs avec un conteneur montant un volume aci-hellofilessecret sur . Le conteneur monte le partage de fichiers Azure acishare créé précédemment en tant que volume. Lorsque cela est indiqué, entrez la clé de stockage et le nom du compte de stockage qui héberge le partage de fichiers.

Comme dans les exemples précédents, la valeur dnsNameLabel doit être unique au sein de la région Azure dans laquelle vous créez l’instance de conteneur. Si nécessaire, mettez à jour la valeur dans le modèle.

{
  "$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>"
            }
          }
        ]
      }
    }
  ]
}

Pour effectuer un déploiement avec le modèle Resource Manager, enregistrez le JSON précédent dans un fichier nommé deploy-aci.json, puis exécutez la commande az deployment group create avec le paramètre --template-file :

# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json

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, d’un fichier YAML ou d’une autre méthode programmatique. 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 fichier.

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

Étapes suivantes

Découvrez comment monter d’autres types de volumes dans Azure Container Instances :