AWS Controllers for Kubernetes (ACK) se anunció en agosto de 2020 y ahora admite 14 controladores de servicios de AWS como disponibilidad general con 12 adicionales en versión preliminar. La visión detrás de esta iniciativa era simple: permitir que los usuarios de Kubernetes utilicen la API de Kubernetes para administrar el ciclo de vida de los recursos de AWS, como Servicio de almacenamiento simple de Amazon (Amazon S3) baldes o Servicio de base de datos relacional de Amazon (Amazon RDS) Instancias de bases de datos. Por ejemplo, puede definir un depósito de S3 como un recurso personalizado, crear este depósito como parte de la implementación de su aplicación y eliminarlo cuando se retire su aplicación.
Amazon EMR en EKS es una opción de implementación para EMR que permite a las organizaciones ejecutar Apache Spark en Servicio Amazon Elastic Kubernetes (Amazon EKS) clústeres. Con EMR en EKS, los trabajos de Spark se ejecutan con el tiempo de ejecución de Amazon EMR para Apache Spark. Esto aumenta la rendimiento de sus trabajos de Spark para que se ejecuten más rápido y cuesten menos que Apache Spark de código abierto. Además, puede ejecutar aplicaciones Apache Spark basadas en Amazon EMR con otros tipos de aplicaciones en el mismo clúster de EKS para mejorar la utilización de los recursos y simplificar la administración de la infraestructura.
Hoy nos complace anunciar el controlador ACK para Amazon EMR en EKS generalmente está disponible. Los clientes nos han dicho que les gusta la forma declarativa de administrar aplicaciones Apache Spark en clústeres de EKS. Con el controlador ACK para EMR en EKS, ahora puede definir y ejecutar EMR de Amazon trabajos directamente usando la API de Kubernetes. Esto le permite administrar EMR en recursos de EKS directamente mediante herramientas nativas de Kubernetes, como kubectl
.
La patrón de controlador ha sido ampliamente adoptado por la comunidad de Kubernetes para administrar el ciclo de vida de los recursos. De hecho, Kubernetes tiene controladores integrados para recursos integrados como Empleo or Despliegue. Estos controladores aseguran continuamente que el estado observado de un recurso coincida con el estado deseado del recurso almacenado en Kubernetes. Por ejemplo, si define una implementación que tiene NGINX usando tres réplicas, el controlador de implementación observa e intenta mantener continuamente tres réplicas de pods de NGINX. Usando el mismo patrón, el controlador ACK para EMR en EKS instala dos definiciones de recursos personalizados (CRD): VirtualCluster
y JobRun
. Cuando crea clústeres virtuales de EMR, el controlador realiza un seguimiento de estos como recursos personalizados de Kubernetes y llama a la API del servicio de EMR en EKS (también conocida como emr-containers
) para crear y administrar estos recursos. Si desea obtener una comprensión más profunda de cómo funciona ACK con las API de servicio de AWS y aprender cómo ACK genera recursos de Kubernetes como CRD, consulte del blog.
Si necesita un sencillo tutorial de introducción, consulte Ejecute trabajos de Spark con ACK EMR en el controlador EKS. Por lo general, los clientes que ejecutan trabajos de Apache Spark en clústeres de EKS usan abstracción de mayor nivel, como Argo Workflows, Apache Airflow o Funciones de paso de AWSy utilizan la orquestación basada en flujos de trabajo para ejecutar sus trabajos de extracción, transformación y carga (ETL). Esto le brinda una experiencia consistente al ejecutar trabajos mientras define canalizaciones de trabajos mediante gráficos acíclicos dirigidos (DAG). Los DAG le permiten organizar los pasos de su trabajo con dependencias y relaciones para decir cómo deben ejecutarse. Flujos de trabajo de Argo es un motor de flujo de trabajo nativo de contenedor para orquestar trabajos paralelos en Kubernetes.
En esta publicación, le mostramos cómo usar Argo Workflows con el controlador ACK para EMR en EKS para ejecutar trabajos de Apache Spark en clústeres de EKS.
Resumen de la solución
En el siguiente diagrama, mostramos los flujos de trabajo de Argo que envían una solicitud a la API de Kubernetes mediante su mecanismo de orquestación.
Estamos usando Argo para mostrar las posibilidades con la orquestación de flujo de trabajo en esta publicación, pero también puede enviar trabajos directamente usando kubectl (la herramienta de línea de comandos de Kubernetes). Cuando Argo Workflows envía estas solicitudes a la API de Kubernetes, el controlador ACK para EMR en EKS reconcilia VirtualCluster
recursos personalizados invocando el EMR en las API de EKS.
Realicemos un ejercicio de creación de recursos personalizados mediante el controlador ACK para EMR en EKS y Argo Workflows.
Requisitos previos
Su entorno necesita las siguientes herramientas instaladas:
Instale el controlador ACK para EMR en EKS
Puede crear un clúster de EKS o reutilizar uno existente. Nos remitimos a las instrucciones de Ejecute trabajos de Spark con ACK EMR en el controlador EKS configurar nuestro entorno. Complete los siguientes pasos:
- Instalar el clúster de EKS.
- Crear asignación de identidad de IAM.
- Instalar emrcontainers-controller.
- Configure IRSA para el EMR en el controlador EKS.
- Cree un rol de ejecución de trabajos de EMR y configure IRSA.
En esta etapa, debe tener un clúster de EKS con los permisos adecuados de control de acceso basado en roles (RBAC) para que Amazon EMR pueda ejecutar sus trabajos. También debe tener instalado el controlador ACK para EMR en EKS y la función de ejecución del trabajo EMR con Funciones de IAM para la cuenta de servicio (IRSA) para que tengan los permisos correctos para llamar a las API de EMR.
Tenga en cuenta que nos estamos saltando el paso para crear un clúster virtual de EMR porque queremos crear un recurso personalizado usando Argo Workflows. Si creó este recurso con el tutorial de introducción, puede eliminar el clúster virtual o crear una nueva asignación de identidad de IAM con un espacio de nombres diferente.
Validemos la anotación para el EMR en la cuenta de servicio del controlador EKS antes de continuar:
El siguiente código muestra los resultados esperados:
Compruebe los registros del controlador:
El siguiente código es el resultado esperado:
Ahora estamos listos para instalar Argo Workflows y usar la orquestación de flujos de trabajo para crear EMR en clústeres virtuales de EKS y enviar trabajos.
Instalar flujos de trabajo de Argo
Los siguientes pasos están destinados a una instalación rápida con una prueba de concepto en mente. Esto no está diseñado para una instalación de producción. Recomendamos revisar la documentación de Argo, EN LINEA directrices, y Otras Consideraciones para una instalación de producción.
Instalamos el argo
CLI primero. Hemos proporcionado instrucciones para instalar el argo
CLI utilizando brew
, que es compatible con el sistema operativo Mac. Si usa Linux u otro sistema operativo, consulte Empieza para los pasos de instalación.
Vamos a crear un espacio de nombres e instalar Argo Workflows en su clúster EMR en EKS:
Puede acceder a la interfaz de usuario de Argo localmente reenviando el puerto argo-server
despliegue:
Puede acceder a la interfaz de usuario web en https://localhost:2746. Recibirá un aviso de que "Su conexión no es privada" porque Argo está utilizando un certificado autofirmado. Está bien elegir Avanzado y luego Continuar con el host local.
Tenga en cuenta que recibe un error de acceso denegado porque aún no hemos configurado los permisos. Configuremos RBAC para que Argo Workflows tenga permisos para comunicarse con la API de Kubernetes. Damos permisos de administrador para argo serviceaccount
existentes argo
y emr-ns
espacios de nombres.
Abra otra ventana de terminal y ejecute estos comandos:
Ahora tiene un token de portador que debemos ingresar para la autenticación del cliente.
Ahora puede navegar a la Procesos pestaña y cambie el espacio de nombres a emr-ns
para ver los flujos de trabajo en este espacio de nombres.
Configuremos los permisos de RBAC y creemos un flujo de trabajo que cree un EMR en el clúster virtual de EKS:
Vamos a crear estos roles y un enlace de roles:
Recapitulemos lo que hemos hecho hasta ahora. Creamos un clúster de EMR en EKS, instalamos el controlador ACK para EMR en EKS mediante Helm, instalamos Argo CLI, instalamos Argo Workflows, obtuvimos acceso a la interfaz de usuario de Argo y configuramos los permisos de RBAC para Argo. Se requieren permisos RBAC para que la cuenta de servicio predeterminada en el espacio de nombres Argo pueda usar VirtualCluster
y JobRun
recursos personalizados a través de emrcontainers.services.k8s.aws
API.
Es hora de crear el clúster virtual de EMR. Las variables de entorno que se utilizan en el siguiente código proceden de la guía de introducción, pero puede cambiarlas para adaptarlas a su entorno:
Utilice el siguiente comando para crear un flujo de trabajo de Argo para la creación de un clúster virtual:
El siguiente código es el resultado esperado de Argo CLI:
Verifique el estado de virtualcluster
:
El siguiente código es el resultado esperado del comando anterior:
Si tiene problemas, puede verificar los registros de Argo usando el siguiente comando o a través de la consola:
También puede verificar los registros del controlador como se menciona en el guía para resolver problemas.
Debido a que tenemos un clúster virtual de EMR listo para aceptar trabajos, podemos comenzar a trabajar en los requisitos previos para el envío de trabajos.
Cree un depósito S3 y Registros de Amazon CloudWatch grupo que se necesitan para el trabajo (consulte el siguiente código). Si ya creó estos recursos desde el tutorial de iniciación, puedes omitir este paso.
Usamos la Conjunto de datos de bicicletas Citi de Nueva York, que tiene datos demográficos del pasajero e información de datos de viaje. Ejecute el siguiente comando para copiar el conjunto de datos en su depósito S3:
Copie el código de la aplicación Spark de muestra en su depósito S3:
Ahora es el momento de ejecutar un trabajo de muestra de Spark. Ejecute lo siguiente para generar una plantilla de envío de flujo de trabajo de Argo:
Ejecutemos este trabajo:
El siguiente código es el resultado esperado:
Puede abrir otra terminal y ejecutar el siguiente comando para verificar también el estado del trabajo:
También puede consultar la interfaz de usuario y ver los registros de Argo, como se muestra en la siguiente captura de pantalla.
Limpiar
Siga las Instrucciones del tutorial de introducción para limpiar el controlador ACK para EMR en EKS y sus recursos. Para eliminar recursos de Argo, utilice el siguiente código:
Conclusión
En esta publicación, analizamos cómo administrar sus trabajos de Spark en clústeres de EKS mediante el controlador ACK para EMR en EKS. Puede definir trabajos de Spark de manera declarativa y administrar estos recursos mediante recursos personalizados de Kubernetes. También revisamos cómo usar Argo Workflows para orquestar estos trabajos y obtener una experiencia de envío de trabajos uniforme. Puedes aprovecharte de los ricos Características de Argo Workflows, como el uso de DAG para definir flujos de trabajo de varios pasos y especificar dependencias dentro de los pasos del trabajo, usar la interfaz de usuario para visualizar y administrar los trabajos y definir reintentos y tiempos de espera en el nivel de flujo de trabajo o tarea.
Puede comenzar hoy instalando el Controlador ACK para EMR en EKS y comience a administrar sus recursos de Amazon EMR utilizando métodos nativos de Kubernetes.
Sobre los autores
pedro dalbhanjan es un arquitecto de soluciones para AWS con sede en Herndon, VA. Peter es un apasionado de evangelizar y resolver problemas comerciales complejos mediante una combinación de servicios de AWS y soluciones de código abierto. En AWS, Peter ayuda con el diseño y la arquitectura de una variedad de cargas de trabajo de los clientes.
amina hilaly es un ingeniero de desarrollo de software en Amazon Web Services que trabaja en proyectos relacionados con Kubernetes y código abierto durante aproximadamente dos años. Amine es un fanático de Go, código abierto y Kubernetes.
- Coinsmart. El mejor intercambio de Bitcoin y criptografía de Europa.Haga clic aquí
- Platoblockchain. Inteligencia del Metaverso Web3. Conocimiento amplificado. Accede Aquí.
- Fuente: https://aws.amazon.com/blogs/big-data/introducing-ack-controller-for-amazon-emr-on-eks/