Uso de montajes de almacenamiento en Azure Container Apps

Una aplicación de contenedor tiene acceso a diferentes tipos de almacenamiento. Una sola aplicación puede aprovechar más de un tipo de almacenamiento si es necesario.

Tipo de almacenamiento Descripción Ejemplos de uso
Contenedor (sistema de archivos) Almacenamiento temporal limitado al contenedor local Escritura de una caché de aplicaciones local.
Almacenamiento temporal Almacenamiento temporal limitado a una réplica individual Uso compartido de archivos entre contenedores de una réplica. Por ejemplo, el contenedor de aplicaciones principal puede escribir archivos de registro procesados por un contenedor sidecar.
Archivos de Azure Almacenamiento permanente Escritura de archivos en un recurso compartido de archivos para que otros sistemas puedan acceder a los datos.

Nota:

Las características de montaje de volúmenes en Azure Container Apps están en versión preliminar.

Sistema de archivos de contenedor

Un contenedor puede escribir en su propio sistema de archivos.

El almacenamiento del sistema de archivos de contenedor tiene las siguientes características:

  • El almacenamiento es temporal y desaparece cuando el contenedor se cierra o se reinicia.
  • Los archivos escritos en este almacenamiento solo son visibles para los procesos que se ejecutan en el contenedor actual.
  • No hay garantías de capacidad. El almacenamiento disponible depende de la cantidad de espacio en disco disponible en el contenedor.

Almacenamiento temporal

Puede montar un volumen efímero equivalente a emptyDir en Kubernetes. El almacenamiento temporal se limita a una sola réplica.

El almacenamiento temporal tiene las siguientes características:

  • Los archivos se conservan durante la vigencia de la réplica.
    • Si se reinicia un contenedor en una réplica, los archivos del volumen permanecen.
  • Cualquier contenedor de la réplica puede montar el mismo volumen.
  • Un contenedor puede montar varios volúmenes temporales.
  • No hay garantías de capacidad. El almacenamiento disponible depende de la cantidad de espacio en disco disponible en la réplica.

Para configurar el almacenamiento temporal, primero defina un volumen EmptyDir en la revisión. A continuación, defina un montaje de volumen en uno o varios contenedores de la revisión.

Requisitos previos

Requisito Instrucciones
Cuenta de Azure Si no tiene ninguna cuenta, cree una gratuita.
Entorno de Azure Container Apps Creación de un entorno de Container Apps.

Configuración

Al usar un almacenamiento temporal, debe usar la CLI de Azure con una definición de YAML para crear o actualizar la aplicación de contenedor.

  1. Para actualizar una aplicación de contenedor existente para que use el almacenamiento temporal, exporte la especificación de la aplicación a un archivo YAML denominado app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. Realice los siguientes cambios en la especificación de la aplicación de contenedor.

    • Agregue una matriz volumes a la sección template de la definición de la aplicación de contenedor y defina un volumen.
      • name es un identificador del volumen.
      • Use EmptyDir como storageType.
    • Para cada contenedor de la plantilla en el que desee montar el almacenamiento temporal, agregue una matriz volumeMounts a la definición del contenedor y defina un montaje de volumen.
      • volumeName es el nombre definido en la matriz volumes.
      • mountPath es la ruta de acceso del contenedor en el que se va a montar el volumen.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
        activeRevisionsMode: Single
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        volumes:
        - name: myempty
          storageType: EmptyDir
    
  3. Actualice la aplicación de contenedor mediante el archivo YAML.

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

Para crear un volumen temporal y montarlo en un contenedor, realice los siguientes cambios en el recurso de aplicaciones de contenedor de una plantilla de ARM:

  • Agregue una matriz volumes a la sección template de la definición de la aplicación de contenedor y defina un volumen.
    • name es un identificador del volumen.
    • Use EmptyDir como storageType.
  • Para cada contenedor de la plantilla en el que desee montar el almacenamiento temporal, agregue una matriz volumeMounts a la definición del contenedor y defina un montaje de volumen.
    • volumeName es el nombre definido en la matriz volumes.
    • mountPath es la ruta de acceso del contenedor en el que se va a montar el volumen.

Ejemplo de fragmento de código de plantilla de 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"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 3
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        }
      ]
    }
  }
}

Consulte la especificación de API de la plantilla de ARM para obtener un ejemplo completo.

Azure Files

Puede montar un recurso compartido de archivos en Azure Files como un volumen dentro de un contenedor.

Para ver un tutorial paso a paso, vea Tutorial: cómo crear un montaje de almacenamiento Azure Files en Azure Container Apps.

El almacenamiento de Azure Files tiene las siguientes características:

  • Los archivos escritos en la ubicación de montaje se conservan en el recurso compartido de archivos.
  • Los archivos del recurso compartido están disponibles a través de la ubicación de montaje.
  • Varios contenedores pueden montar el mismo recurso compartido de archivos, incluidos aquellos que se encuentran en otra réplica, revisión o aplicación de contenedor.
  • Todos los contenedores que monten el recurso compartido de archivos pueden acceder a los archivos escritos por cualquier otro contenedor o método.
  • Se puede montar más de un volumen de Azure Files en un único contenedor.

Para habilitar el almacenamiento de Azure Files en el contenedor, debe configurarlo de las siguientes maneras:

  • Cree una definición de almacenamiento del tipo AzureFile en el entorno de Container Apps.
  • Defina un volumen de almacenamiento en una revisión.
  • Defina un montaje de volumen en uno o varios contenedores de la revisión.

Requisitos previos

Requisito Instrucciones
Cuenta de Azure Si no tiene ninguna cuenta, cree una gratuita.
Cuenta de Azure Storage Crear una cuenta de almacenamiento.
Entorno de Azure Container Apps Creación de un entorno de Container Apps.

Configuración

Si utiliza Azure Files, debe usar la CLI de Azure con una definición de YAML para crear o actualizar la aplicación de contenedor.

  1. Cree una definición de almacenamiento del tipo AzureFile en el entorno de Container Apps.

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

    Reemplace <STORAGE_ACCOUNT_NAME> y <STORAGE_ACCOUNT_KEY> por el nombre y la clave de su cuenta de almacenamiento. Reemplace <STORAGE_SHARE_NAME> por el nombre del recurso compartido de archivos de la cuenta de almacenamiento.

    Los valores válidos para --access-mode son ReadWrite y ReadOnly.

  2. Para actualizar una aplicación de contenedor existente para que monte un recurso compartido de archivos, exporte la especificación de la aplicación a un archivo YAML denominado app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. Realice los siguientes cambios en la especificación de la aplicación de contenedor.

    • Agregue una matriz volumes a la sección template de la definición de la aplicación de contenedor y defina un volumen.
      • name es un identificador del volumen.
      • Para storageType, utilice AzureFile.
      • Para storageName, use el nombre del almacenamiento que definió en el entorno.
    • Para cada contenedor de la plantilla en el que desee montar un almacenamiento de Azure Files, agregue una matriz volumeMounts a la definición del contenedor y defina un montaje de volumen.
      • volumeName es el nombre definido en la matriz volumes.
      • mountPath es la ruta de acceso del contenedor en el que se va a montar el volumen.
    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. Actualice la aplicación de contenedor mediante el archivo YAML.

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

Los siguientes fragmentos de código de la plantilla de ARM muestran cómo agregar un recurso compartido de archivos de Azure Files a un entorno de Container Apps y su utilización en una aplicación de contenedor.

  1. Agregue un recurso secundario storages al entorno de 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. Actualice el recurso de la aplicación de contenedor para que agregue un volumen y un montaje de volumen.

    {
      "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": "/myfiles",
                  "volumeName": "azure-files-volume"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • Agregue una matriz volumes a la sección template de la definición de la aplicación de contenedor y defina un volumen.
      • name es un identificador del volumen.
      • Para storageType, utilice AzureFile.
      • Para storageName, use el nombre del almacenamiento que definió en el entorno.
    • Para cada contenedor de la plantilla en el que desee montar un almacenamiento de Azure Files, agregue una matriz volumeMounts a la definición del contenedor y defina un montaje de volumen.
      • volumeName es el nombre definido en la matriz volumes.
      • mountPath es la ruta de acceso del contenedor en el que se va a montar el volumen.

Consulte la especificación de API de la plantilla de ARM para obtener un ejemplo completo.