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 Persistencia Ejemplo de uso
Almacenamiento con ámbito de contenedor Almacenamiento efímero disponible para un contenedor en ejecución Los datos están disponibles hasta que se apaga el contenedor Escritura de una caché de aplicaciones local.
Almacenamiento con ámbito de réplica Almacenamiento efímero para compartir archivos entre contenedores de la misma réplica Los datos están disponibles hasta que se apaga la réplica El contenedor de aplicaciones principal que escribe archivos de registro procesados por un contenedor sidecar.
Archivos de Azure Almacenamiento permanente Los datos se conservan en Azure Files Escritura de archivos en un recurso compartido de archivos para que otros sistemas puedan acceder a los datos.

Almacenamiento efímero

Una aplicación de contenedor puede leer y escribir datos temporales en el almacenamiento efímero. El almacenamiento efímero tiene como ámbito un contenedor o una réplica. La cantidad total de almacenamiento con ámbito de contenedor y de réplica disponible para cada réplica depende de la cantidad total de CPU virtuales asignadas a la réplica.

vCPU Almacenamiento efímero total
0,25 o menos 1 GiB
0,5 o menos 2 GiB
1 o menos 4 GiB
Más de 1 8 GiB

Almacenamiento con ámbito 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.

Almacenamiento con ámbito de réplica

Puede montar un volumen temporal efímero equivalente a EmptyDir (directorio vacío) en Kubernetes. Este almacenamiento tiene como ámbito una sola réplica. Use un volumen de EmptyDir para compartir datos entre contenedores de la misma réplica.

El almacenamiento con ámbito de réplica 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 inicialización o aplicaciones de la réplica puede montar el mismo volumen.
  • Un contenedor puede montar varios volúmenes EmptyDir.

Para configurar el almacenamiento con ámbito de réplica, defina primero 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 Instructions
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 configurar un almacenamiento con ámbito de réplica mediante la CLI de Azure, debe usar una definición de YAML para crear o actualizar la aplicación de contenedor.

  1. Para actualizar una aplicación de contenedor existente de modo que use el almacenamiento con ámbito de réplica, 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. Si ya tiene una matriz de volumes, agregue un nuevo volumen a la matriz.
      • name es un identificador del volumen.
      • Use EmptyDir como storageType.
    • Para cada contenedor de la plantilla en el que desee montar el volumen, defina un montaje de volumen en la matriz volumeMounts de la definición del contenedor.
      • 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_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. Actualice la aplicación de contenedor mediante el archivo YAML.

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

Consulte la especificación de YAML para ver un ejemplo completo.

Para crear un volumen con ámbito de réplica 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. Si ya tiene una matriz de volumes, agregue un nuevo volumen a la matriz.
    • name es un identificador del volumen.
    • Use EmptyDir como storageType.
  • Para cada contenedor de la plantilla en el que desee montar el volumen, defina un montaje de volumen en la matriz volumeMounts de la definición del contenedor.
    • 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"
            }
          ]
        },
        {
          "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"
        }
      ]
    }
  }
}

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

Para crear un volumen con ámbito de réplica y montarlo en un contenedor, implemente una nueva revisión de la aplicación de contenedor mediante Azure Portal.

  1. Vaya a la aplicación de contenedor en Azure Portal.

  2. Seleccione Administración de revisiones en el menú izquierdo.

  3. Seleccione Crear nueva revisión.

  4. Seleccione el contenedor en el que desea montar el volumen.

  5. En el panel de contexto Editar un contenedor, seleccione la pestaña Montajes de volúmenes.

  6. En la sección Almacenamiento efímero, cree un nuevo volumen con la siguiente información.

    • Nombre del volumen: nombre del volumen efímero.
    • Ruta de acceso de montaje: ruta de acceso absoluta del contenedor para montar el volumen.
  7. Seleccione Guardar para guardar los cambios y salir del panel de contexto.

  8. Seleccione Crear para crear la nueva revisión.

Volumen de Azure Files

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

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.

Azure Files admite los protocolos SMB y NFS. Puede montar un recurso compartido de archivos de Azure Files mediante cualquiera de los protocolos. El recurso compartido de archivos que defina en el entorno debe configurarse con el mismo protocolo usado por el recurso compartido de archivos en la cuenta de almacenamiento.

Nota:

La compatibilidad con el montaje de recursos compartidos de archivos NFS en Azure Container Apps está en versión preliminar.

Para habilitar el almacenamiento de Azure Files en el contenedor, debe configurar el entorno y la aplicación de contenedor de la siguiente manera:

  • Cree una definición de almacenamiento en el entorno de Container Apps.
  • Si usa NFS, el entorno debe configurarse con una red virtual personalizada, mientras que la cuenta de almacenamiento debe configurarse para permitir el acceso desde la red virtual. Para obtener más información, consulte Recursos compartidos de archivos NFS en Azure Files.
  • Si el entorno está configurado con una red virtual personalizada, debe permitir los puertos 445 y 2049 en el grupo de seguridad de red (NSG) asociado a la subred.
  • Defina un volumen de tipo AzureFile (SMB) o NfsAzureFile (NFS) en una revisión.
  • Defina un montaje de volumen en uno o varios contenedores de la revisión.
  • La cuenta de almacenamiento de Azure Files usada debe ser accesible desde la red virtual de la aplicación de contenedor. Para más información, consulte Concesión de acceso desde una red virtual.

Requisitos previos

Requisito Instructions
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

Al configurar una aplicación contenedora para montar un volumen de Azure Files mediante la CLI de Azure, debe usar una definición de YAML para crear o actualizar la aplicación de contenedor.

Para ver un tutorial paso a paso sobre cómo montar un recurso compartido de archivos SMB, consulte Cómo crear un montaje de volumen Azure Files en Azure Container Apps.

  1. Agregue una definición de almacenamiento en el entorno de 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
    

    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. Si ya tiene una matriz de volumes, agregue un nuevo volumen a la matriz.
      • name es un identificador del volumen.
      • Para storageType, use AzureFile para SMB o NfsAzureFile para NFS. Este valor debe coincidir con el tipo de almacenamiento que definió en el entorno.
      • Para storageName, use el nombre del almacenamiento que definió en el entorno.
    • Para cada contenedor de la plantilla en el que desee montar el almacenamiento de Azure Files, defina un montaje de volumen en la matriz volumeMounts de la definición del contenedor.
      • 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 app.yaml
    

Consulte la especificación de YAML para ver un ejemplo completo.

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": "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"
            }
          ]
        }
      }
    }
    
    • Agregue una matriz volumes a la sección template de la definición de la aplicación de contenedor y defina un volumen. Si ya tiene una matriz de volumes, agregue un nuevo volumen a la matriz.
      • name es un identificador del volumen.
      • Para storageType, use AzureFile para SMB o NfsAzureFile para NFS. Este valor debe coincidir con el tipo de almacenamiento que definió en el entorno.
      • Para storageName, use el nombre del almacenamiento que definió en el entorno.
    • Para cada contenedor de la plantilla en el que desee montar el almacenamiento de Azure Files, defina un montaje de volumen en la matriz volumeMounts de la definición del contenedor.
      • 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.

Para configurar un montaje de volumen para el almacenamiento de Azure Files en Azure Portal, agregue un recurso compartido de archivos al entorno de Container Apps y, luego, agregue un montaje de volumen a la aplicación de contenedor mediante la creación de una nueva revisión.

  1. En Azure Portal, vaya al entorno de Container App.

  2. En el menú izquierdo, seleccione Azure Files.

  3. Seleccione Agregar.

  4. En el menú de contexto Agregar recurso compartido de archivos, escriba la siguiente información:

    • Nombre: nombre del recurso compartido de archivos.
    • Nombre de la cuenta de almacenamiento: nombre de la cuenta de almacenamiento que contiene el recurso compartido de archivos.
    • Clave de la cuenta de almacenamiento: clave de acceso de la cuenta de almacenamiento.
    • Recurso compartido de archivos: nombre del recurso compartido de archivos.
    • Modo de acceso: modo de acceso del recurso compartido de archivos. Los valores válidos son "Lectura y escritura" y "Solo lectura".
  5. Seleccione Agregar para salir del panel de contexto.

  6. Haga clic en Guardar para confirmar los cambios.

  7. Vaya a la aplicación de contenedor.

  8. Seleccione Administración de revisiones en el menú izquierdo.

  9. Seleccione Crear nueva revisión.

  10. Seleccione el contenedor en el que desea montar el volumen.

  11. En el panel de contexto Editar un contenedor, seleccione la pestaña Montajes de volúmenes.

  12. En la sección Recursos compartidos de archivos, cree un nuevo volumen con la siguiente información.

    • Nombre del recurso compartido de archivos: el recurso compartido de archivos que agregó.
    • Ruta de acceso de montaje: ruta de acceso absoluta del contenedor para montar el volumen.
  13. Seleccione Guardar para guardar los cambios y salir del panel de contexto.

  14. Seleccione Crear para crear la nueva revisión.