Compartir a través de


Implementación de aplicaciones en nodos de proceso con paquetes de aplicaciones de Batch

Los paquetes de aplicación pueden simplificar el código de la solución de Azure Batch y facilitar la administración de las aplicaciones que ejecutan las tareas. Con los paquetes de aplicación, puede cargar y administrar varias versiones de las aplicaciones que se ejecutan las tareas, incluidos sus archivos auxiliares. A continuación, puede implementar automáticamente una o varias de estas aplicaciones en los nodos de proceso del grupo.

Las API para crear y administrar paquetes de aplicación forman parte de la biblioteca .NET de administración de Batch . Las API para instalar paquetes de aplicación en un nodo de proceso forman parte de la biblioteca de .NET de Batch . Las características comparables están en las API de Batch disponibles para otros lenguajes de programación.

En este artículo se explica cómo cargar y administrar paquetes de aplicación en Azure Portal. También se muestra cómo instalarlos en los nodos de proceso de un grupo con la biblioteca de Batch .NET .

Requisitos del paquete de aplicación

Para usar paquetes de aplicación, debe vincular una cuenta de Azure Storage a la cuenta de Batch.

Hay restricciones en el número de aplicaciones y paquetes de aplicación dentro de una cuenta de Batch y en el tamaño máximo del paquete de aplicación. Para más información, consulte Límites y cuotas del servicio Batch.

Nota:

Los grupos de Batch creados antes del 5 de julio de 2017 no admiten paquetes de aplicación (a menos que se crearan después del 10 de marzo de 2016 mediante la configuración de Cloud Services). La característica de paquetes de aplicaciones que se describe aquí reemplaza la característica Aplicaciones de Batch disponible en versiones anteriores del servicio.

Descripción de aplicaciones y paquetes de aplicaciones

En Azure Batch, una aplicación hace referencia a un conjunto de archivos binarios con versiones que se pueden descargar automáticamente en los nodos de proceso del grupo. Una aplicación contiene uno o varios paquetes de aplicación, que representan diferentes versiones de la aplicación.

Cada paquete de aplicación es un archivo .zip que contiene los archivos binarios de la aplicación y los archivos auxiliares. Solo se admite el formato .zip.

Diagrama que muestra una vista general de aplicaciones y paquetes de aplicación.

Los paquetes de aplicación se pueden especificar en el nivel de grupo o de tarea.

  • Los paquetes de aplicación de grupo se implementan en todos los nodos del grupo. Las aplicaciones se implementan cuando un nodo se une a un grupo y cuando se reinicia o se vuelve a crear una imagen.

    Los paquetes de aplicación de grupo son adecuados cuando todos los nodos de un grupo ejecutan las tareas de un trabajo. Puede especificar uno o varios paquetes de aplicación que se van a implementar al crear un grupo. También puede agregar o actualizar los paquetes de un grupo existente. Para instalar un nuevo paquete en un grupo existente, debe reiniciar sus nodos.

  • Los paquetes de aplicación de tareas solo se implementan en un nodo de proceso programado para ejecutar una tarea, justo antes de ejecutar la línea de comandos de la tarea. Si el paquete de aplicación y la versión especificados ya están en el nodo, no se vuelve a implementar y se usa el paquete existente.

    Los paquetes de aplicación de tareas son útiles en entornos de grupo compartido, donde se ejecutan distintos trabajos en un grupo y el grupo no se elimina cuando se completa un trabajo. Si el trabajo tiene menos tareas que los nodos del grupo, los paquetes de aplicaciones de tareas pueden minimizar la transferencia de datos, ya que la aplicación solo se implementa en los nodos que ejecutan tareas.

    Otros escenarios que pueden beneficiarse de los paquetes de aplicación de tareas son trabajos que ejecutan una aplicación grande, pero solo para algunas tareas. Por ejemplo, las aplicaciones de tareas pueden ser útiles para una fase de preprocesamiento de peso pesado o una tarea de combinación.

Con los paquetes de aplicación, la tarea de inicio del grupo no tiene que especificar una larga lista de archivos de recursos individuales que se van a instalar en los nodos. No es necesario administrar manualmente varias versiones de los archivos de aplicación en Azure Storage ni en los nodos. Y no es necesario preocuparse por generar direcciones URL de SAS para proporcionar acceso a los archivos de la cuenta de Azure Storage. Batch funciona en segundo plano con Azure Storage para almacenar paquetes de aplicación e implementarlos en nodos de proceso.

Nota:

El tamaño total de una tarea de inicio debe ser menor o igual que 32 768 caracteres, incluidos los archivos de recursos y las variables de entorno. Si la tarea de inicio supera este límite, el uso de paquetes de aplicación es otra opción. También puede crear un archivo .zip que contenga los archivos de recursos, cargar el archivo como un blob en Azure Storage y, a continuación, descomprimirlo desde la línea de comandos de la tarea de inicio.

Carga y administración de aplicaciones

Puede usar Azure Portal o las API de administración de Batch para administrar los paquetes de aplicación en la cuenta de Batch. En las secciones siguientes se explica cómo vincular una cuenta de almacenamiento, aprenderá a agregar y administrar aplicaciones y paquetes de aplicación en Azure Portal.

Nota:

Aunque puede definir valores de aplicación en el recurso Microsoft.Batch/batchAccounts de una plantilla de ARM, actualmente no es posible usar una plantilla de ARM para cargar paquetes de aplicación que se usarán en la cuenta de Batch. Debe cargarlos en la cuenta de almacenamiento vinculada, tal como se describe en Agregar una nueva aplicación.

Para usar paquetes de aplicación, debe vincular una cuenta de Azure Storage a la cuenta de Batch. El servicio Batch utiliza la cuenta de almacenamiento asociada para almacenar los paquetes de aplicación. Lo ideal es crear una cuenta de almacenamiento específicamente para su uso con la cuenta de Batch.

Si aún no ha configurado una cuenta de almacenamiento, Azure Portal muestra una advertencia la primera vez que selecciona Aplicaciones en el menú de navegación izquierdo de la cuenta de Batch. Para tener que vincular una cuenta de almacenamiento a la cuenta de Batch:

  1. Seleccione la ventana Advertencia que indica "No hay ninguna cuenta de almacenamiento configurada para esta cuenta por lotes".
  2. A continuación, elija Cuenta de almacenamiento establecida... en la página siguiente.
  3. Elija el vínculo Seleccionar una cuenta de almacenamiento en la sección Información de la cuenta de almacenamiento .
  4. Seleccione la cuenta de almacenamiento que desea usar con esta cuenta por lotes en la lista en el panel Elegir cuenta de almacenamiento .
  5. A continuación, seleccione Guardar en la esquina superior izquierda de la página.

Después de vincular las dos cuentas, Batch puede implementar automáticamente los paquetes almacenados en la cuenta de almacenamiento vinculada en los nodos de proceso.

Importante

No puede usar paquetes de aplicación con cuentas de Azure Storage configuradas con reglas de firewall o con espacio de nombres jerárquico establecido en Habilitado.

El servicio Batch usa Azure Storage para almacenar los paquetes de aplicación como blobs en bloques. Se le cobra como normal por los datos de blobs en bloques y el tamaño de cada paquete no puede superar el tamaño máximo de blob en bloques. Para más información, consulte Objetivos de escalabilidad y rendimiento de Blob Storage. Para minimizar los costos, asegúrese de tener en cuenta el tamaño y el número de los paquetes de aplicación y quite periódicamente los paquetes en desuso.

Adición de una nueva aplicación

Para crear una nueva aplicación, agregue un paquete de aplicación y especifique un identificador de aplicación único.

En la cuenta de Batch, seleccione Aplicaciones en el menú de navegación izquierdo y, a continuación, seleccione Agregar.

Captura de pantalla del proceso de creación de nueva aplicación en Azure Portal.

Escriba la siguiente información:

  • Id. de aplicación: el identificador de la nueva aplicación.
  • Versión": la versión del paquete de aplicación que va a cargar.
  • Paquete de aplicación: el archivo .zip que contiene los archivos binarios de la aplicación y los archivos auxiliares necesarios para ejecutar la aplicación.

El identificador de aplicación y la versión que especifique deben cumplir estos requisitos:

  • En los nodos de Windows, el identificador puede contener cualquier combinación de caracteres alfanuméricos, guiones y caracteres de subrayado. En los nodos de Linux, solo se permiten caracteres alfanuméricos y caracteres de subrayado.
  • No puede contener más de 64 caracteres.
  • Debe ser único dentro de la cuenta de Batch.
  • Los identificadores conservan las mayúsculas y minúsculas, aunque no las distinguen.

Cuando esté listo, seleccione Enviar. Una vez cargado el archivo .zip en la cuenta de Azure Storage, el portal muestra una notificación. En función del tamaño del archivo que está cargando y la velocidad de la conexión de red, este proceso puede tardar algún tiempo.

Visualización de aplicaciones actuales

Para ver las aplicaciones de la cuenta de Batch, seleccione Aplicaciones en el menú de navegación izquierdo.

Captura de pantalla del elemento de menú Aplicaciones en Azure Portal.

Al seleccionar esta opción de menú, se abre la ventana Aplicaciones . En esta ventana se muestra el identificador de cada aplicación de la cuenta y las siguientes propiedades:

  • Paquetes: el número de versiones asociadas a esta aplicación.
  • Versión predeterminada: si procede, la versión de la aplicación instalada si no se especifica ninguna versión al implementar la aplicación.
  • Permitir actualizaciones: especifica si se permiten actualizaciones y eliminaciones de paquetes.

Para ver la estructura de archivos del paquete de aplicación en un nodo de proceso, vaya a la cuenta de Batch en Azure Portal. Seleccione Grupos. A continuación, seleccione el grupo que contiene el nodo de proceso. Seleccione el nodo de proceso en el que está instalado el paquete de aplicación y abra la carpeta de aplicaciones .

Visualización de los detalles de la aplicación

Para ver los detalles de una aplicación, selecciónelo en la ventana Aplicaciones . Para configurar la aplicación, seleccione Configuración en el menú de navegación izquierdo.

  • Permitir actualizaciones: indica si los paquetes de aplicación se pueden actualizar o eliminar. El valor predeterminado es . Si se establece en No, los paquetes de aplicación existentes no se pueden actualizar ni eliminar, pero todavía se pueden agregar nuevas versiones del paquete de aplicación.
  • Versión predeterminada: el paquete de aplicación predeterminado que se va a usar cuando se implementa la aplicación si no se especifica ninguna versión.
  • Nombre para mostrar: un nombre descriptivo que la solución de Batch puede usar cuando muestra información sobre la aplicación. Por ejemplo, este nombre se puede usar en la interfaz de usuario de un servicio que proporcione a los clientes a través de Batch.

Adición de un nuevo paquete de aplicación

Para agregar una versión del paquete de aplicación para una aplicación existente, seleccione la aplicación en la página Aplicaciones de la cuenta de Batch. A continuación, seleccione Agregar.

Como hizo con la nueva aplicación, especifique la versión del nuevo paquete, cargue el archivo .zip en el campo Paquete de aplicación y, a continuación, seleccione Enviar.

Actualizar o eliminar un paquete de aplicación

Para actualizar o eliminar un paquete de aplicación existente, seleccione la aplicación en la página Aplicaciones de la cuenta de Batch. Seleccione los puntos suspensivos de la fila del paquete de aplicación que desea modificar. A continuación, seleccione la acción que desea realizar.

Captura de pantalla que muestra las opciones de actualización y eliminación de paquetes de aplicación en Azure Portal.

Si selecciona Actualizar, puede cargar un nuevo archivo .zip. Este archivo reemplaza el archivo .zip anterior que cargó para esa versión.

Si selecciona Eliminar, se le pedirá que confirme la eliminación de esa versión. Después de seleccionar Aceptar, Batch elimina el archivo .zip de la cuenta de Azure Storage. Si elimina la versión predeterminada de una aplicación, se quita la configuración de versión predeterminada para esa aplicación.

Instalación de aplicaciones en nodos de proceso

Ha aprendido a administrar paquetes de aplicación en Azure Portal. Ahora puede aprender a implementarlos en nodos de proceso y ejecutarlos con tareas de Batch.

Instalación de paquetes de aplicaciones de grupo

Para instalar un paquete de aplicación en todos los nodos de proceso de un grupo, especifique una o varias referencias de paquete de aplicación para el grupo. Los paquetes de aplicación que especifique para un grupo se instalan en cada nodo de proceso que une el grupo y en cualquier nodo que se reinicie o vuelva a crear una imagen.

En Batch .NET, especifique una o varias instancias de CloudPool.ApplicationPackageReferences al crear un nuevo grupo o cuando use un grupo existente. La clase ApplicationPackageReference especifica un identificador de aplicación y una versión que se van a instalar en los nodos de proceso de un grupo.

// Create the unbound CloudPool
CloudPool myCloudPool =
    batchClient.PoolOperations.CreatePool(
        poolId: "myPool",
        targetDedicatedComputeNodes: 1,
        virtualMachineSize: "standard_d1_v2",
        VirtualMachineConfiguration: new VirtualMachineConfiguration(
            imageReference: new ImageReference(
                                publisher: "MicrosoftWindowsServer",
                                offer: "WindowsServer",
                                sku: "2019-datacenter-core",
                                version: "latest"),
            nodeAgentSkuId: "batch.node.windows amd64");

// Specify the application and version to install on the compute nodes
myCloudPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "litware",
        Version = "1.1001.2b" }
};

// Commit the pool so that it's created in the Batch service. As the nodes join
// the pool, the specified application package is installed on each.
await myCloudPool.CommitAsync();

Importante

Si se produce un error en la implementación de un paquete de aplicación, el servicio Batch marca el nodo inutilizable y no se programa ninguna tarea para su ejecución en ese nodo. Si esto sucede, reinicie el nodo para volver a iniciar la implementación del paquete. Reiniciar el nodo también habilita la programación de tareas de nuevo en el nodo.

Instalación de paquetes de aplicación de tareas

De forma similar a un grupo, se especifican referencias de paquete de aplicación para una tarea. Cuando se programa una tarea para ejecutarse en un nodo, el paquete se descarga y extrae justo antes de que se ejecute la línea de comandos de la tarea. Si un paquete y una versión especificados ya están instalados en el nodo, el paquete no se descarga y se usa el paquete existente.

Para instalar un paquete de aplicación de tarea, configure la propiedad CloudTask.ApplicationPackageReferences de la tarea:

CloudTask task =
    new CloudTask(
        "litwaretask001",
        "cmd /c %AZ_BATCH_APP_PACKAGE_LITWARE%\\litware.exe -args -here");

task.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference
    {
        ApplicationId = "litware",
        Version = "1.1001.2b"
    }
};

Ejecución de las aplicaciones instaladas

Los paquetes que especifique para un grupo o tarea se descargan y extraen en un directorio con nombre dentro AZ_BATCH_ROOT_DIR del del nodo. Batch también crea una variable de entorno que contiene la ruta de acceso al directorio con nombre. Las líneas de comandos de tareas usan esta variable de entorno al hacer referencia a la aplicación en el nodo.

En los nodos de Windows, la variable tiene el formato siguiente:

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

En los nodos de Linux, el formato es ligeramente diferente. Los puntos (.), los guiones (-) y los signos de número (#) se aplanan a los caracteres de subrayado en la variable de entorno. Además, se conserva el caso del identificador de aplicación. Por ejemplo:

Linux:
AZ_BATCH_APP_PACKAGE_applicationid_version

APPLICATIONID y version son valores que corresponden a la versión de aplicación y paquete que ha especificado para la implementación. Por ejemplo, si especifica que la versión 2.7 del blender de aplicaciones debe instalarse en los nodos de Windows, las líneas de comandos de tarea usarían esta variable de entorno para acceder a sus archivos:

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

En los nodos de Linux, especifique la variable de entorno en este formato. Aplane los puntos (.), guiones (-) y signos de número (#) en caracteres de subrayado y conserve el caso del identificador de aplicación:

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

Al cargar un paquete de aplicación, puede especificar una versión predeterminada para implementar en los nodos de proceso. Si ha especificado una versión predeterminada para una aplicación, puede omitir el sufijo de versión al hacer referencia a la aplicación. Puede especificar la versión predeterminada de la aplicación en Azure Portal, en la ventana Aplicaciones , como se muestra en Cargar y administrar aplicaciones.

Por ejemplo, si establece "2.7" como versión predeterminada para el combinador de aplicaciones y las tareas hacen referencia a la siguiente variable de entorno, los nodos de Windows usan la versión 2.7:

AZ_BATCH_APP_PACKAGE_BLENDER

El siguiente fragmento de código muestra una línea de comandos de tarea de ejemplo que inicia la versión predeterminada de la aplicación blender :

string taskId = "blendertask01";
string commandLine =
    @"cmd /c %AZ_BATCH_APP_PACKAGE_BLENDER%\blender.exe -args -here";
CloudTask blenderTask = new CloudTask(taskId, commandLine);

Sugerencia

Para obtener más información sobre la configuración del entorno del nodo de proceso, consulte Configuración del entorno para tareas.

Actualización de los paquetes de aplicación de un grupo

Si ya se ha configurado un grupo existente con un paquete de aplicación, puede especificar un nuevo paquete para el grupo. Esto significa lo siguiente:

  • El servicio Batch instala el paquete recién especificado en todos los nodos nuevos que se unen al grupo y en cualquier nodo existente que se reinicie o vuelva a crear una imagen.
  • Los nodos de proceso que ya están en el grupo al actualizar las referencias del paquete no instalan automáticamente el nuevo paquete de aplicación. Estos nodos de proceso se deben reiniciar o volver a crear una imagen para recibir el nuevo paquete.
  • Cuando se implementa un nuevo paquete, las variables de entorno creadas reflejan las referencias del nuevo paquete de aplicación.

En este ejemplo, el grupo existente tiene la versión 2.7 de la aplicación blender configurada como una de sus instancias de CloudPool.ApplicationPackageReferences. Para actualizar los nodos del grupo con la versión 2.76b, especifique una nueva ApplicationPackageReference con la nueva versión y confirme el cambio.

string newVersion = "2.76b";
CloudPool boundPool = await batchClient.PoolOperations.GetPoolAsync("myPool");
boundPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "blender",
        Version = newVersion }
};
await boundPool.CommitAsync();

Ahora que se ha configurado la nueva versión, el servicio Batch instala la versión 2.76b en cualquier nodo nuevo que se una al grupo. Para instalar 2.76b en los nodos que ya están en el grupo, reinicie o vuelva a crear su imagen. Los nodos reiniciados conservan los archivos de las implementaciones de paquetes anteriores.

Enumeración de las aplicaciones en una cuenta de Batch

Puede enumerar las aplicaciones y sus paquetes en una cuenta de Batch mediante el método ApplicationOperations.ListApplicationSummaries .

// List the applications and their application packages in the Batch account.
List<ApplicationSummary> applications = await batchClient.ApplicationOperations.ListApplicationSummaries().ToListAsync();
foreach (ApplicationSummary app in applications)
{
    Console.WriteLine("ID: {0} | Display Name: {1}", app.Id, app.DisplayName);

    foreach (string version in app.Versions)
    {
        Console.WriteLine("  {0}", version);
    }
}

Pasos siguientes