Publicado en: May 7, 2021

Hoy lanzamos la compatibilidad de Amazon EMR en Amazon EKS con las plantillas de pods para facilitar la ejecución de trabajos de Spark en clústeres compartidos de EKS. Un pod es un grupo de uno o varios contenedores, con recursos de almacenamiento y red compartidos, y una especificación sobre cómo ejecutar los contenedores. Las plantillas de pods son especificaciones que determinan cómo se ejecuta cada pod. Los clientes con frecuencia consolidan varias aplicaciones en un clúster de EKS compartido para mejorar la utilización y ahorrar costos. Sin embargo, es posible que cada aplicación tenga requisitos diferentes. Por ejemplo, es posible que desee ejecutar cargas de trabajo de rendimiento intensivo, como trabajos de entrenamiento de modelos de ML, en instancias basadas en SSD para obtener un mayor rendimiento, o cargas de trabajo ad-hoc en instancias de spot para reducir los costos. También puede programar un contenedor de registro separado para reenviar los registros a la aplicación de monitoreo existente. Con este lanzamiento, puede utilizar las plantillas de pods con EMR en EKS para configurar cómo ejecutar trabajos de Spark en clústeres compartidos de EKS.

Para reducir los costos, los clientes pueden programar los pods de controladores de Spark para que se ejecuten en instancias a petición de EC2 y programar los pods de ejecutores de Spark para que se ejecuten en instancias de spot de EC2. Los clientes de Kubernetes suelen utilizar manchas, tolerancias y marcas para garantizar que los pods se programen en los nodos de trabajo correctos. Una mancha es una propiedad de un nodo de trabajo que le permite restringir los pods que se pueden ejecutar en este. Por el contrario, una tolerancia permite programar un pod sobre una mancha que coincida. La marca se utiliza con nodeSelectors para dirigir el pod al trabajador. Ahora, las plantillas de pods se pueden utilizar para aplicar tolerancias al pod del controlador de Spark para que se ejecute en una instancia a petición de EC2, y una tolerancia separada para el pod del ejecutor de Spark para limitar la ejecución a las instancias de spot de EC2.

Para reenviar los registros a la aplicación de registro centralizada, los clientes pueden implementar un contenedor paralelo con el trabajo de Spark. Un contenedor paralelo se implementa en el mismo pod que el contenedor de la aplicación, pero proporciona una funcionalidad adicional. En este caso, reenvía los registros de trabajo. EMR en EKS proporciona un reenvío de registros integrado a Amazon CloudWatch y Amazon S3. Sin embargo, si un cliente desea reenviar los registros a una aplicación propia de generación de informes de registros, deberá implementar un reenviador de registros como un daemonset. Los daemonsets se ejecutan directamente en los nodos de trabajo de kubernetes. Ahora, las plantillas de pods se pueden utilizar para implementar el reenvío de registros como un contenedor paralelo por trabajo o por pod.

Para aumentar la utilización de los recursos, los clientes pueden admitir varios equipos que ejecuten las cargas de trabajo en el mismo clúster de EKS. Con frecuencia, cada equipo tendrá un grupo de nodos EC2 designado para ejecutar sus cargas de trabajo. Anteriormente, las cargas de trabajo solo se podían dirigir al grupo de nodos correcto mediante etiquetas y afinidad. Los clientes pueden aplicar manchas al grupo de nodos de un equipo y utilizar ahora las plantillas de pods para aplicar una tolerancia correspondiente a la carga de trabajo. Esto garantiza que sólo el equipo designado pueda programar trabajos en su grupo de nodos.

Para implementar el grupo de nodos basado en el equipo, comience por crear un grupo de nodos que incluya una marca y una mancha que represente al equipo. Una mancha es una propiedad de un nodo de trabajo que le permite restringir los pods que se pueden ejecutar en este. Por el contrario, una tolerancia permite programar un pod sobre una mancha que coincida. La marca, mediante afinidad, dirige la aplicación al grupo de nodos designado por el equipo y una tolerancia le permite programar sobre la mancha. Cree una plantilla de pod que incluya la tolerancia y afinidad correspondientes y almacénela en un bucket de S3 al que pueda acceder el trabajo. Se pueden crear plantillas de pods para el controlador de Spark y los pods ejecutores para proporcionar diferentes opciones de implementación y se especifica la ubicación de las plantillas durante el envío del trabajo.

Para obtener más información sobre la funcionalidad y los casos de uso de las plantillas de pods, visite nuestra documentación. Para obtener más información sobre Amazon EMR en EKS, visite nuestra documentación sobre Amazon EMR en EKS o vea nuestra charla técnica en profundidad sobre Amazon EMR en EKS.