Partager via


Utiliser des montages de stockage dans Azure Container Apps

Une application conteneur a accès à différents types de stockage. Une application unique peut tirer parti de plusieurs types de stockage si nécessaire.

Remarque

Évitez d'utiliser des caractères spéciaux dans les noms de volumes afin de prévenir les échecs de déploiement. Par exemple, un volume nommé credentials.json contient un caractère spécial (.) qui entraîne une erreur de déploiement.

Type de stockage Descriptif Persistance Exemple d’utilisation
Stockage à l'échelle du conteneur Stockage éphémère disponible pour un conteneur en cours d’exécution Les données sont disponibles jusqu’à l’arrêt du conteneur Écriture d’un cache d’application local.
Stockage délimité au réplica Stockage éphémère pour le partage de fichiers entre les conteneurs d’un même réplica Les données sont disponibles jusqu’à l’arrêt du réplica Le conteneur d’application principal qui écrit des fichiers journaux traités par un conteneur side-car.
Azure Files Stockage permanent Les données sont conservées de manière persistante dans Azure Files Écriture de fichiers dans un partage de fichiers pour rendre les données accessibles par d’autres systèmes.

Remarque

Azure Container Apps ne prend pas en charge le montage de partages de fichiers à partir d’Azure NetApp Files ou du Stockage Blob Azure.

Stockage éphémère

Une application conteneur peut lire et écrire des données temporaires dans un stockage éphémère. L’étendue du stockage éphémère peut être définie à l’échelle d’un conteneur ou d’un réplica. La quantité totale de stockage à l’échelle du conteneur et du réplica disponible pour chaque réplica dépend du nombre total de processeurs virtuels alloués au réplica.

Processeurs virtuels Total du stockage éphémère
0,25 ou moins 1 Gio
0,5 ou moins 2 Gio
1 ou moins 4 Gio
Plus de 1 8 Gio

Stockage à l’échelle du conteneur

Un conteneur peut écrire dans son propre système de fichiers.

Le stockage du système de fichiers conteneur présente les caractéristiques suivantes :

  • Le stockage est temporaire et disparaît quand le conteneur est arrêté ou redémarré.
  • Les fichiers écrits dans ce stockage ne sont visibles que par les processus en cours d’exécution dans le conteneur actuel.

Stockage à l’échelle du réplica

Vous pouvez monter un volume temporaire éphémère équivalent à EmptyDir (répertoire vide) dans Kubernetes. L’étendue de ce stockage est définie à l’échelle d’un seul réplica. Utilisez un volume EmptyDir pour partager des données entre les conteneurs d’un même réplica.

Le stockage à l’échelle d’un réplica présente les caractéristiques suivantes :

  • Les fichiers sont conservés pendant la durée de vie du réplica.
    • Si un conteneur redémarre dans un réplica, les fichiers situés dans le volume restent.
  • Tous les conteneurs init ou conteneurs d’application du réplica peuvent monter le même volume.
  • Un conteneur peut monter plusieurs volumes EmptyDir.

Pour configurer un stockage à l’échelle du réplica, définissez d’abord un volume EmptyDir dans la révision. Définissez ensuite un montage de volume dans un ou plusieurs conteneurs dans la révision.

Prérequis

Condition requise Les instructions
Compte Azure Si vous n’en avez pas, créez gratuitement un compte.
Environnement Azure Container Apps Créez un environnement d’applications conteneur.
Configuration de l’identité managée Vérifiez que l’identité managée associée à votre environnement Container Apps est affectée aux rôles appropriés pour accéder à Azure Files.

Paramétrage

Quand vous configurez un stockage à l’échelle du réplica à l’aide d’Azure CLI, vous devez utiliser une définition YAML pour créer ou mettre à jour votre application conteneur.

  1. Pour mettre à jour une application conteneur existante pour utiliser le stockage à portée de réplique, exportez la spécification de votre application vers un fichier YAML nommé app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. Apportez les modifications suivantes à la spécification de votre application conteneur.

    • Ajoutez un tableau volumes à la section template de votre définition d’application conteneur et définissez un volume. Si vous disposez déjà d’un tableau volumes, ajoutez un nouveau volume au tableau.
      • name correspond à un identificateur pour le volume.
      • Utilisez EmptyDir comme storageType.
    • Pour chaque conteneur du modèle où vous souhaitez monter le volume, définissez un montage de volume dans le tableau volumeMounts de la définition de conteneur.
      • volumeName correspond au nom défini dans le tableau volumes.
      • mountPath correspond au chemin dans le conteneur où monter le volume.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
        activeRevisionsMode: Single
      template:
        containers:
        - image: <IMAGE_NAME1>
          name: my-container-1
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        - image: <IMAGE_NAME_2>
          name: my-container-2
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        volumes:
        - name: myempty
          storageType: EmptyDir
    
  3. Mettez à jour votre application conteneur à l’aide du fichier YAML.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Consultez la spécification YAML pour obtenir un exemple complet.

Pour créer un volume à l’échelle d’un réplica et le monter dans un conteneur, apportez les changements suivants à la ressource d’applications conteneur dans un modèle ARM :

  • Ajoutez un tableau volumes à la section template de votre définition d’application conteneur et définissez un volume. Si vous disposez déjà d’un tableau volumes, ajoutez un nouveau volume au tableau.
    • name correspond à un identificateur pour le volume.
    • Utilisez EmptyDir comme storageType.
  • Pour chaque conteneur du modèle où vous souhaitez monter le volume, définissez un montage de volume dans le tableau volumeMounts de la définition de conteneur.
    • volumeName correspond au nom défini dans le tableau volumes.
    • mountPath correspond au chemin dans le conteneur où monter le volume.

Exemple d’extrait de modèle ARM :

{
  "apiVersion": "2022-03-01",
  "type": "Microsoft.App/containerApps",
  "name": "[parameters('containerappName')]",
  "location": "[parameters('location')]",
  "properties": {

    ...

    "template": {
      "revisionSuffix": "myrevision",
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        },
        {
          "name": "sidecar",
          "image": "[parameters('sidecar_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 3
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        }
      ]
    }
  }
}

Consultez la spécification de l’API de modèle ARM pour obtenir un exemple complet.

Pour créer un volume à l’échelle d’un réplica et le monter dans un conteneur, déployez une nouvelle révision de votre application conteneur à l’aide du portail Azure.

  1. Dans le portail Azure, accédez à votre application conteneur.

  2. Sélectionnez Gestion des révisions dans le menu de gauche.

  3. Sélectionnez Créer une révision.

  4. Sélectionnez le conteneur où vous souhaitez monter le volume.

  5. Dans le volet Modifier un conteneur, sélectionnez l’onglet Montages de volume.

  6. Sous la section stockage éphémère , créez un volume avec les informations suivantes.

    • Nom du volume : nom du volume éphémère.
    • Chemin d’accès du montage : chemin d’accès absolu dans le conteneur pour monter le volume.
  7. Sélectionnez Enregistrer pour enregistrer les modifications et quitter le volet contextuel.

  8. Sélectionnez Créer pour créer la nouvelle révision.

Volume Azure Files

Vous pouvez monter un partage de fichiers à partir d’Azure Files en tant que volume dans un conteneur.

Le stockage Azure Files présente les caractéristiques suivantes :

  • Les fichiers écrits sous l’emplacement de montage sont conservés dans le partage de fichiers.
  • Les fichiers inclus dans le partage sont disponibles par le biais de l’emplacement de montage.
  • Plusieurs conteneurs peuvent monter le même partage de fichiers, y compris ceux qui se trouvent dans un autre réplica, une autre révision ou une autre application conteneur.
  • Tous les conteneurs qui montent le partage peuvent accéder aux fichiers écrits par tout autre conteneur ou toute autre méthode.
  • Plusieurs volumes Azure Files peuvent être montés dans un seul conteneur.

Azure Files prend en charge les protocoles SMB (Server Message Block) et NFS (Network File System). Vous pouvez monter un partage Azure Files à l’aide de l’un ou l’autre de ces protocoles. Le partage de fichiers que vous définissez dans l’environnement doit être configuré avec le même protocole que celui utilisé par le partage de fichiers dans le compte de stockage.

Pour activer le stockage Azure Files dans votre conteneur, vous devez configurer votre environnement et votre application conteneur comme suit :

  • Créez une définition de stockage dans l’environnement Container Apps.
  • Si vous utilisez NFS, votre environnement doit être configuré avec un réseau virtuel personnalisé, et le compte de stockage doit être configuré pour autoriser l’accès depuis le réseau virtuel. Pour plus d’informations, consultez les partages de fichiers NFS dans Azure Files .
  • Si votre environnement est configuré avec un VNet personnalisé, vous devez autoriser les ports 445 et 2049 dans le groupe NSG (groupe de sécurité réseau) associé au sous-réseau.
  • Définissez un volume de type AzureFile (SMB) ou NfsAzureFile (NFS) dans une révision.
  • Définissez un montage de volume dans un ou plusieurs conteneurs dans la révision.
  • Le compte de stockage Azure Files utilisé doit être accessible à partir du réseau virtuel de votre application conteneur. Pour plus d’informations, consultez Accorder l’accès depuis un réseau virtuel.

Prérequis

Condition requise Les instructions
Compte Azure Si vous n’en avez pas, créez gratuitement un compte.
Compte de Stockage Azure Créez un compte de stockage.
Environnement Azure Container Apps Créez un environnement d’applications conteneur.

Paramétrage

Quand vous configurez une application conteneur afin de monter un volume Azure Files à l’aide d’Azure CLI, vous devez utiliser une définition YAML pour créer ou mettre à jour votre application conteneur.

Pour obtenir un didacticiel pas à pas sur le montage d’un partage de fichiers SMB, consultez Créer un montage de stockage Azure Files dans Azure Container Apps.

  1. Ajoutez une définition de stockage à votre environnement Container Apps.

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --storage-type AzureFile \
        --azure-file-account-name <STORAGE_ACCOUNT_NAME> \
        --azure-file-account-key <STORAGE_ACCOUNT_KEY> \
        --azure-file-share-name <STORAGE_SHARE_NAME> \
        --access-mode ReadWrite
    

    Remplacez <STORAGE_ACCOUNT_NAME> et <STORAGE_ACCOUNT_KEY> par le nom et la clé de votre compte de stockage. Remplacez <STORAGE_SHARE_NAME> par le nom du partage de fichiers dans le compte de stockage.

    Les valeurs valides pour --access-mode sont ReadWrite et ReadOnly.

  2. Pour mettre à jour une application conteneur existante pour monter un partage de fichiers, exportez la spécification de votre application vers un fichier YAML nommé app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. Apportez les modifications suivantes à la spécification de votre application conteneur.

    • Ajoutez un tableau volumes à la section template de votre définition d’application conteneur et définissez un volume. Si vous disposez déjà d’un tableau volumes, ajoutez un nouveau volume au tableau.
      • name correspond à un identificateur pour le volume.
      • Pour storageType, utilisez AzureFile pour SMB, ou NfsAzureFile pour NFS. Cette valeur doit correspondre au type de stockage que vous avez défini dans l’environnement.
      • Pour storageName, utilisez le nom du stockage que vous avez défini dans l’environnement.
      • mountOptions est une chaîne de caractères séparée par des virgules d’options de montage. Pour plus d’informations, consultez Utiliser les paramètres mountOptions dans Azure Files.
      • La liste secrets est une liste de secrets à monter dans le volume. Pour plus d’informations, consultez Monter des secrets dans un volume.
    • Pour chaque conteneur du modèle où vous souhaitez monter le stockage Azure Files, définissez un montage de volume dans le tableau volumeMounts de la définition de conteneur.
      • volumeName correspond au nom défini dans le tableau volumes.
      • mountPath correspond au chemin dans le conteneur où monter le volume.
      • subPath est le chemin d’accès dans le volume à monter. S’il n’est pas spécifié, la racine du volume est montée. Pour plus d’informations, consultez (#sub-path).
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - volumeName: azure-files-volume
            mountPath: /my-files
            subPath: my-sub-path
        volumes:
        - name: azure-files-volume
          storageType: AzureFile
          storageName: mystorage
    
  4. Mettez à jour votre application conteneur à l’aide du fichier YAML.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Consultez la spécification YAML pour obtenir un exemple complet.

Les extraits de modèle ARM suivants montrent comment ajouter un partage Azure Files à un environnement Container Apps afin de l’utiliser dans une application conteneur.

  1. Ajoutez une ressource enfant storages à l’environnement Container Apps.

    {
      "type": "Microsoft.App/managedEnvironments",
      "apiVersion": "2022-03-01",
      "name": "[parameters('environment_name')]",
      "location": "[parameters('location')]",
      "properties": {
        "daprAIInstrumentationKey": "[parameters('dapr_ai_instrumentation_key')]",
        "appLogsConfiguration": {
          "destination": "log-analytics",
          "logAnalyticsConfiguration": {
            "customerId": "[parameters('log_analytics_customer_id')]",
            "sharedKey": "[parameters('log_analytics_shared_key')]"
          }
        }
      },
      "resources": [
        {
          "type": "storages",
          "name": "myazurefiles",
          "apiVersion": "2022-03-01",
          "dependsOn": [
            "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]"
          ],
          "properties": {
            "azureFile": {
              "accountName": "[parameters('storage_account_name')]",
              "accountKey": "[parameters('storage_account_key')]",
              "shareName": "[parameters('storage_share_name')]",
              "accessMode": "ReadWrite"
            }
          }
        }
      ]
    }
    
  2. Mettez à jour la ressource d’application conteneur pour ajouter un volume et un montage de volume.

    {
      "apiVersion": "2023-05-01",
      "type": "Microsoft.App/containerApps",
      "name": "[parameters('containerappName')]",
      "location": "[parameters('location')]",
      "properties": {
    
        ...
    
        "template": {
          "revisionSuffix": "myrevision",
          "containers": [
            {
              "name": "main",
              "image": "[parameters('container_image')]",
              "resources": {
                "cpu": 0.5,
                "memory": "1Gi"
              },
              "volumeMounts": [
                {
                  "mountPath": "/myfiles",
                  "volumeName": "azure-files-volume",
                  "subPath": "my-sub-path"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • Ajoutez un tableau volumes à la section template de votre définition d’application conteneur et définissez un volume. Si vous disposez déjà d’un tableau volumes, ajoutez un nouveau volume au tableau.
      • name correspond à un identificateur pour le volume.
      • Pour storageType, utilisez AzureFile pour SMB, ou NfsAzureFile pour NFS. Cette valeur doit correspondre au type de stockage que vous avez défini dans l’environnement.
      • Pour storageName, utilisez le nom du stockage que vous avez défini dans l’environnement.
      • mountOptions est une chaîne de caractères séparée par des virgules d’options de montage. Pour plus d’informations, consultez Utiliser les paramètres mountOptions dans Azure Files.
      • La liste secrets est une liste de secrets à monter dans le volume. Pour plus d’informations, consultez Monter des secrets dans un volume.
    • Pour chaque conteneur du modèle où vous souhaitez monter le stockage Azure Files, définissez un montage de volume dans le tableau volumeMounts de la définition de conteneur.
      • volumeName correspond au nom défini dans le tableau volumes.
      • mountPath correspond au chemin dans le conteneur où monter le volume.
      • subPath (facultatif) est le chemin d’accès dans le volume à monter. S’il n’est pas spécifié, la racine du volume est montée. Pour plus d’informations, consultez (#sub-path).

Consultez la spécification de l’API de modèle ARM pour obtenir un exemple complet.

Pour configurer un montage de volume pour le stockage Azure Files dans le portail Azure, ajoutez un partage de fichiers à votre environnement Container Apps, puis ajoutez un montage de volume à votre application conteneur en créant une révision.

  1. Dans le Portail Azure, accédez à votre instance d’application conteneur.

  2. Dans le volet de navigation, sous Paramètres, sélectionnez Azure Files.

  3. Sélectionnez Ajouter.

  4. Sélectionnez SMB (Server Message Block) ou Network File System (NFS), selon le protocole utilisé par votre partage de fichiers.

  5. Dans le volet Contextuel Ajouter un partage de fichiers , entrez les informations suivantes :

    • Nom : nom du partage de fichiers.
    • Nom du compte de stockage : nom du compte de stockage qui contient le partage de fichiers.
    • Clé de compte de stockage : clé d’accès pour le compte de stockage.
    • Partage de fichiers : nom du partage de fichiers.
    • Mode d’accès : mode d’accès pour le partage de fichiers. Les valeurs valides sont Lecture/écriture et Lecture seule.
  6. Sélectionnez Ajouter pour quitter le volet contextuel.

  7. Sélectionnez Enregistrer pour valider les modifications.

  8. Accédez à votre application conteneur.

  9. Dans le volet de navigation, sous Application, sélectionnez Révisions et réplicas.

  10. Sélectionnez Créer une révision.

  11. Dans la page Créer et déployer une nouvelle révision , sélectionnez l’onglet Volumes .

  12. Sélectionnez Ajouter.

  13. Dans le volet Ajouter un volume, définissez les éléments suivants.

    • Type de volume: volume de fichiers Azure.
    • Nom : entrez un nom de volume.
    • Nom du partage de fichiers : sélectionnez le partage de fichiers que vous avez créé précédemment.
    • Options de montage : Si vous le souhaitez, entrez une chaîne séparée par des virgules d’options de montage. Pour plus d’informations, consultez Utiliser les paramètres mountOptions dans Azure Files.
  14. Sélectionnez Ajouter pour quitter le volet contextuel.

  15. Dans la page Créer et reployer une nouvelle révision , sélectionnez l’onglet Conteneur .

  16. Sélectionnez le conteneur dans lequel vous souhaitez monter le volume.

  17. Dans le volet Modifier un conteneur, sélectionnez l’onglet Montages de volume.

  18. Sous Nom du volume, sélectionnez le volume que vous avez créé précédemment.

  19. Dans Chemin de montage, saisissez le chemin d’accès absolu dans le conteneur pour monter le volume.

  20. Dans Sous-chemin (facultatif), entrez le chemin dans le volume à monter. S’il n’est pas spécifié, la racine du volume est montée. Pour plus d’informations, consultez (#sub-path).

  21. Sélectionnez Enregistrer pour enregistrer les modifications et quitter le volet contextuel.

  22. Sélectionnez Créer pour créer la nouvelle révision.

Sous-chemin

Lors du montage d’un partage de fichiers à partir d’Azure Files, en plus du chemin de montage, vous pouvez également spécifier un sous-chemin.

  • Chemin de montage : chemin d’accès dans le conteneur dans lequel vous souhaitez monter le volume.
  • Sous-chemin : chemin dans le volume que vous souhaitez monter.

Le sous-chemin est facultatif. S’il n’est pas spécifié, la racine du volume est montée.

Le sous-chemin est un chemin relatif à partir de la racine du volume. Le sous-chemin d’accès ne doit pas commencer par /. La spécification d’un sous-chemin d’accès qui commence par / peut empêcher le démarrage de votre application conteneur. Par exemple, my-volume-folder il s’agit d’un sous-chemin valide, où /my-volume-folder n’est pas le cas.

Le sous-chemin d’accès peut faire référence à un dossier ou à un fichier dans le volume.

  • Si le sous-chemin fait référence à un dossier, le chemin de montage doit faire référence à un dossier vide dans le conteneur.

  • Si le sous-chemin fait référence à un fichier, le chemin d’accès de montage doit faire référence à un fichier qui n’existe pas déjà dans le conteneur.

    Par exemple, supposons que le sous-chemin est my-volume-folder/my-volume-file.txt, et que le chemin de montage est /my-container-folder/my-container-file. Le dossier /my-container-folder doit déjà exister dans le conteneur, mais ne doit pas encore contenir le fichier my-container-file.txt.

Toutes les barres obliques de fin de sous-chemin sont ignorées.