Errores de grupos y nodos de Azure Batch

Precaución

En este artículo se hace referencia a CentOS, una distribución de Linux que está cerca de su estado Final de ciclo vida (EOL). Tenga en cuenta su uso y planeación en consecuencia. Para más información, consulte la Guía de fin de ciclo de vida de CentOS.

Algunas operaciones de creación y administración de grupos de Azure Batch se producen inmediatamente. La detección de errores para estas operaciones es sencilla, ya que los errores suelen devolverse inmediatamente desde la API, la línea de comandos o la interfaz de usuario. Sin embargo, algunas operaciones son asincrónicas y se ejecutan en segundo plano, lo cual tarda varios minutos en completarse. En este artículo, se describen las formas de detectar y evitar errores que se pueden producir en las operaciones en segundo plano para los grupos y nodos.

Asegúrese de establecer las aplicaciones para implementar la comprobación de errores exhaustiva, especialmente para las operaciones asincrónicas. La comprobación de errores exhaustiva puede ayudarle a identificar y diagnosticar problemas rápidamente.

Errores de grupo

Los errores de grupo pueden estar relacionados con el tiempo de espera o error de cambio de tamaño, error de escalado automático o error de eliminación del grupo.

Cambiar el tamaño del tiempo de espera o error

Cuando crea un nuevo grupo o cambia el tamaño de uno existente, especifica el número de nodos de destino. La operación de creación o de cambio de tamaño se completa inmediatamente, pero la asignación real de nuevos nodos o la eliminación de nodos existentes podrían tardar varios minutos. Puede especificar el tiempo de espera de cambio de tamaño en las API Pool - Add o Pool - Resize. Si Batch no puede asignar el número de nodos de destino durante el tiempo de espera de redimensionamiento, el grupo entra en un estado estable e informa de los errores de redimensionamiento.

La propiedad ResizeError muestra los errores que se han producido en la evaluación más reciente.

Las causas comunes de los errores de cambio de tamaño son:

  • Cambie el tiempo de espera si es demasiado corto. Por lo general, un tiempo de espera predeterminado de 15 minutos es lo suficientemente largo como para asignar o quitar nodos del grupo. Si va a asignar un gran número de nodos, como más de 1000 nodos desde una imagen de Azure Marketplace o más de 300 nodos desde una imagen de máquina virtual personalizada, puede establecer el tiempo de espera de cambio de tamaño en 30 minutos.

  • Cuota de núcleos insuficiente. Una cuenta de Batch está limitada en el número de núcleos que puede asignar en todos los grupos y deja de asignar nodos una vez que alcanza esa cuota. Puede aumentar la cuota de núcleos para que Batch pueda asignar más nodos. Para más información, consulte Límites y cuotas del servicio Batch.

  • Direcciones IP de subred insuficientes cuando un grupo está en una red virtual Una subred de red virtual debe tener suficientes direcciones IP que pueda asignar a cada nodo del grupo solicitado. En caso contrario, los nodos no se pueden crear. Para más información, consulte Creación de un grupo de Azure Batch en una red virtual.

  • Recursos insuficientes cuando un grupo está en una red virtual. Al crear un grupo en una red virtual, puede crear recursos como equilibradores de carga, direcciones IP públicas y grupos de seguridad de red (NSG) en la misma suscripción que la cuenta de Batch. Asegúrese de que las cuotas de suscripción sean suficientes para estos recursos.

  • Grupos de gran tamaño con imágenes de máquina virtual personalizadas. Los grupos grandes que usan imágenes de máquina virtual personalizadas pueden tardar más tiempo en asignarse y, por tanto, pueden producirse tiempos de expiración por el cambio de tamaño. Vea Creación de un grupo con Azure Compute Gallery para obtener recomendaciones sobre los límites y la configuración.

Errores de escalado automático

Puede establecer Azure Batch para escalar automáticamente el número de nodos de un grupo y definir los parámetros de la fórmula de escalado automático para el grupo. El servicio Batch, en este caso, usa la fórmula para evaluar periódicamente el número de nodos del grupo y establecer nuevos números de destino. Para más información, consulte Creación de una fórmula automática para escalar nodos de ejecución en un grupo de Batch.

Pueden producirse los siguientes problemas al usar el escalado automático:

  • Error de la evaluación de escalado automático.
  • La operación de cambio de tamaño resultante produce un error y agota el tiempo de expiración.
  • Un problema con la fórmula de escalado automático da lugar a valores incorrectos de destino de nodo. El cambio de tamaño puede funcionar o agotar el tiempo de espera.

Para obtener información sobre la última evaluación de escalado automático, use la propiedad autoScaleRun. Esta propiedad informa del tiempo de evaluación, los valores y el resultado, así como de los errores de rendimiento.

Un evento completo de cambio de tamaño de grupo captura información sobre todas las evaluaciones.

Errores en la eliminación de grupos

Para eliminar un grupo que contiene nodos, Batch elimina primero los nodos, lo que puede tardar varios minutos en completarse. Después de eso, Batch recién elimina el objeto de grupo en sí.

Batch establece el poolState en deleting durante el proceso de eliminación. La aplicación que realiza la llamada puede detectar si la eliminación del grupo está tardando demasiado tiempo mediante las propiedades state y stateTransitionTime.

Si la eliminación del grupo está tardando más de lo esperado, Batch vuelve a intentarlo periódicamente hasta que el grupo se pueda eliminar correctamente. En algunos casos, el retraso se debe a una interrupción del servicio de Azure u otros problemas temporales. Otros factores que impiden la eliminación correcta del grupo pueden requerir que tome medidas para corregir el problema. Estos factores pueden incluir los siguientes problemas:

  • Los bloqueos de recursos se pueden colocar en recursos creados por Batch o en recursos de red que Batch usa.

  • Los recursos que ha creado pueden depender de un recurso creado por Batch. Por ejemplo, si crea un grupo en una red virtual, Batch crea un NSG, una dirección IP pública y un equilibrador de carga. Si usa estos recursos fuera del grupo, no puede eliminar el grupo.

  • Puede que se anule el registro del proveedor de recursos Microsoft.Batch de la suscripción que contiene el grupo.

  • Para las cuentas de Batch del modo de suscripción de usuario, Microsoft Azure Batch puede ya no tener el rol de Colaborador o Propietario en la suscripción que contiene el grupo. Para más información, consulte Permitir que Batch acceda a la suscripción.

Errores de nodos

Aun cuando Batch asigne correctamente los nodos en un grupo, distintos problemas pueden provocar que algunos nodos sean incorrectos y no puedan ejecutar tareas. Estos nodos siguen incurriendo en cargos, por lo que es importante detectar los problemas para evitar pagar por nodos que no pueda usar. Conocer los errores comunes de los nodos y el jobState es útil para solucionar problemas.

Errores de la tarea de inicio

Puede especificar un startTask opcional para un grupo. Al igual que con cualquier tarea, la tarea de inicio usa una línea de comandos y puede descargar archivos de recursos desde el almacenamiento. La tarea de inicio se ejecuta para cada nodo cuando se inicia el nodo. La propiedad waitForSuccess especifica si Batch espera hasta que la tarea de inicio se complete correctamente antes de programar las tareas para un nodo. Si configura el nodo para que espere a la finalización correcta de la tarea de inicio, pero se produce un error en esta tarea, no podrá usar el nodo y aún así este generará cargos.

Puede detectar los errores de la tarea de inicio mediante las propiedades taskExecutionResult y taskFailureInformation de la propiedad de nodo startTaskInformation de nivel superior.

Una tarea de inicio con errores también hace que Batch establezca el valor de computeNodeState en starttaskfailed, si waitForSuccess estaba establecido en true.

Al igual que con cualquier tarea, puede haber varias causas para que se produzcan errores en la tarea de inicio. Para solucionar problemas, compruebe los archivos stdout, stderr y cualquier otro archivo de registro específico de la tarea.

Las tareas de inicio deben ser reentrantes, ya que la tarea de inicio puede ejecutarse varias veces en el mismo nodo, por ejemplo, cuando se restablece o se reinicia la imagen inicial de un nodo. En raras ocasiones, cuando una tarea de inicio se ejecuta después de que un evento provoca un reinicio del nodo, un sistema operativo (SO) o disco efímero restablece su imagen inicial mientras que el otro no lo hace. Puesto que Batch inicia tareas y todas las tareas de Batch se ejecutan desde el disco efímero, esta situación no suele ser un problema. Sin embargo, en los casos en los que la tarea de inicio instala una aplicación en el disco del sistema operativo y mantiene otros datos en el disco efímero, puede haber problemas de sincronización. Proteja la aplicación como corresponda si usa ambos discos.

Error al descargar el paquete de aplicación

Puede especificar uno o varios paquetes de aplicación para un grupo. Batch descarga los archivos de paquetes especificados en cada nodo y descomprime los archivos después de que el nodo se inicia, pero antes de que programe las tareas. Es habitual usar un comando de tarea de inicio junto con paquetes de aplicación para, por ejemplo, copiar archivos en otra ubicación o ejecutar el programa de instalación.

Si un paquete de aplicación no se puede descargar ni descomprimir, la propiedad computeNodeError notifica el error y establece el estado del nodo en unusable.

Error de descarga del contenedor

Puede especificar una o varias referencias de contenedor en un grupo. Batch descarga los contenedores especificados en cada nodo. Si el contenedor no se puede descargar, la propiedad computeNodeError notifica el error y establece el estado del nodo en unusable.

Actualizaciones del SO de nodo

En los grupos de Windows, enableAutomaticUpdates se establece en true de manera predeterminada. Aunque se recomienda permitir las actualizaciones automáticas, las actualizaciones pueden interrumpir el progreso de las tareas, especialmente, si las tareas son de ejecución prolongada. Puede establecer este valor en false si necesita asegurarse de que una actualización del sistema operativo no se produzca de forma inesperada.

Nodo en estado unusable

Batch puede establecer el computeNodeState en unusable por diversos motivos. No puede programar tareas en un nodo unusable, pero el nodo sigue generando cargos.

Si Batch puede determinar la causa, la propiedad computeNodeError la notifica. Si un nodo está en un estado unusable, pero no tiene computeNodeError, significa que Batch no puede comunicarse con la máquina virtual. En este caso, Batch siempre intenta recuperar la VM. Sin embargo, Batch no intenta recuperar automáticamente máquinas virtuales que hayan tenido errores al instalar los paquetes de aplicaciones o contenedores, aunque su estado sea unusable.

Otras razones que explican la categorización de nodos unusable son:

  • Una imagen de máquina virtual personalizada no es válida. Por ejemplo, la imagen no está preparada correctamente.
  • Se mueve una máquina virtual debido a un error de infraestructura o una actualización de bajo nivel. Batch recupera el nodo.
  • Se ha implementado una imagen de máquina virtual en hardware no compatible. Por ejemplo, se implementa una imagen de HPC de CentOS en una VM Standard_D1_v2.
  • Las VM están en una red virtual de Azure, y se ha bloqueado el tráfico a los puertos claves.
  • Las máquinas virtuales están en una red virtual, pero el tráfico saliente hacia Azure Storage está bloqueado.
  • Las máquinas virtuales están en una red virtual con una configuración de DNS personalizada y el servidor DNS no puede resolver el almacenamiento de Azure.

Archivos de registro del agente de nodo

El proceso del agente Batch que se ejecuta en cada nodo del grupo proporciona archivos de registro que pueden ser útiles si necesita comunicarse con el soporte técnico sobre un problema en el nodo de grupo. Puede cargar archivos de registro para un nodo a través de Azure Portal, Batch Explorer o la API Compute Node - Upload Batch Service Logs. Después de cargar y guardar los archivos de registro, puede eliminar el nodo o el grupo para ahorrar el costo de ejecutar los nodos.

Disco del nodo lleno

Batch usa la unidad temporal en una máquina virtual del grupo de nodos para almacenar archivos como los siguientes archivos de trabajo, archivos de tareas y archivos compartidos:

  • Archivos de paquete de aplicación
  • Archivos de recursos de tareas
  • Archivos específicos de la aplicación descargados en una de las carpetas de Batch
  • Archivos stdout y stderr para cada ejecución de aplicación de tareas
  • Archivos de salida específicos de la aplicación

Archivos como paquetes de aplicaciones o archivos de recursos de tareas de inicio solo se escriben una vez cuando Batch crea el nodo del grupo. Incluso cuando solo se escriben una vez, si estos archivos son demasiado grandes, podrían llenar la unidad temporal.

Otros archivos, como stdout y stderr, se escriben para cada tarea que un nodo ejecuta. Si un gran número de tareas se ejecutan en el mismo nodo o los archivos de tareas son demasiado grandes, podrían llenar la unidad temporal.

El nodo también necesita una pequeña cantidad de espacio en el disco del sistema operativo para crear usuarios después de que se inicie.

El tamaño de la unidad temporal depende del tamaño de la máquina virtual. Una consideración que se debe tener en cuenta al seleccionar un tamaño de máquina virtual es asegurarse de que la unidad temporal tenga espacio suficiente para la carga de trabajo planeada.

Al agregar un grupo en Azure Portal, puede mostrar la lista completa de tamaños de máquina virtual, incluida una columna Tamaño de disco de recursos. Los artículos que describen los tamaños de máquina virtual tienen tablas con una columna Almacenamiento temporal. Para más información, consulte Tamaños de máquina virtual optimizada para proceso. Para obtener una tabla de tamaño de ejemplo, consulte serie Fsv2.

Puede especificar un tiempo de retención para los archivos escritos por cada tarea. El tiempo de retención determina cuánto tiempo se conservan los archivos de tareas antes de limpiarlos automáticamente. Puede reducir el tiempo de retención para reducir los requisitos de almacenamiento.

Si el disco temporal o del sistema operativo se queda sin espacio, o está a punto de quedarse sin espacio, el nodo se mueve a unusablecomputeNoteState y el error del nodo indica que el disco está lleno.

Si no está seguro de qué ocupa espacio en el nodo, intente conectarse remotamente con el nodo e investigar manualmente. También puede usar la API File - List From Compute Node para examinar archivos, por ejemplo, salidas de tareas en carpetas administradas por Batch. Esta API solo enumera los archivos de los directorios administrados por Batch. Si las tareas han creado archivos en otra parte, esta API no las muestra.

Después de asegurarse de haber recuperado los datos que necesite del nodo o cargarlos en un almacén duradero, puede eliminar los datos según sea necesario para liberar espacio.

Puede eliminar los trabajos o tareas completados antiguos cuyos datos de tarea sigan estando en los nodos. Busque en la colección recentTasks en taskInformation en el nodo o use la API File - List From Compute Node. Al eliminar un trabajo, se eliminan todas las tareas del trabajo. Al eliminar las tareas del trabajo, se desencadena la eliminación de datos en los directorios de tareas de los nodos y se libera espacio. Una vez que haya liberado suficiente espacio, reinicie el nodo. El nodo debe salir del estado unusable y volver a mostrar el estado idle.

Para recuperar un nodo inutilizable en grupos de VirtualMachineConfiguration, puede quitar el nodo del grupo mediante la API Pool - Remove Nodes. Después, puede repoblar el grupo para reemplazar el nodo incorrecto por uno nuevo. En el caso de los grupos de CloudServiceConfiguration, puede restablecer la imagen inicial del nodo mediante la API Compute Node - Reimage para limpiar todo el disco. Actualmente, no es posible restablecer la imagen inicial con los grupos de VirtualMachineConfiguration.

Pasos siguientes