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.

Type de stockage Description 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 à l’échelle du 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.

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 Instructions
Compte Azure Si vous n’en avez pas un, créez un compte gratuitement.
Environnement Azure Container Apps Créez un environnement d’applications conteneurs.

Configuration

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 afin d’utiliser le stockage à l’échelle du réplica, 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 nouvelle révision.

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

  5. Dans le volet contextuel 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 de volume : nom du volume éphémère.
    • Chemin de montage : chemin d’accès absolu dans le conteneur pour monter le volume.
  7. Sélectionnez Enregistrer pour enregistrer les changements 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 au sein d’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.

Remarque

La prise en charge du montage de partages NFS dans Azure Container Apps est en préversion.

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 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 à partir d'un réseau virtuel.

Prérequis

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

Configuration

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 accéder à un tutoriel 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 afin de 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.
    • 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.
    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
        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"
                }
              ]
            }
          ],
          "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.
    • 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.

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. Sélectionnez Azure Files dans le menu de gauche.

  3. Sélectionnez Ajouter.

  4. Dans le menu 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 contenant le partage de fichiers.
    • Clé de compte de stockage : clé d’accès du compte de stockage.
    • Partage de fichiers : nom du partage de fichiers.
    • Mode d’accès : mode d’accès du partage de fichiers. Les valeurs valides sont « Lecture/écriture » et « Lecture seule ».
  5. Sélectionnez Ajouter pour quitter le volet contextuel.

  6. Sélectionnez Enregistrer pour valider les changements.

  7. Accédez à votre application conteneur.

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

  9. Sélectionnez Créer une nouvelle révision.

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

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

  12. Sous la section Partages de fichiers, créez un volume avec les informations suivantes.

    • Nom du partage de fichiers : partage de fichiers que vous avez ajouté.
    • Chemin de montage : chemin d’accès absolu dans le conteneur pour monter le volume.
  13. Sélectionnez Enregistrer pour enregistrer les changements et quitter le volet contextuel.

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