Logotipo de Zephyrnet

Monitoreo de costos para Amazon EMR en Amazon EKS | Servicios web de Amazon

Fecha:

EMR de Amazon es la solución de big data en la nube líder en la industria, que proporciona una colección de marcos de código abierto como Spark, Hive, Hudi y Presto, totalmente administrados y con facturación por segundo. Amazon EMR en Amazon EKS es una opción de implementación que le permite implementar Amazon EMR en el mismo Servicio Amazon Elastic Kubernetes (Amazon EKS) que es multiinquilino y lo utilizan otras aplicaciones, lo que mejora la utilización de los recursos, reduce los costos y simplifica la administración de la infraestructura. EMR en EKS le proporciona rendimiento hasta 5.37 veces superior al de OSS Spark v3.3.1 con un ahorro de costes del 76.8 %. También proporciona una amplia variedad de métodos de envío de trabajos, como una API de AWS llamada StartJobRun, o de forma declarativa con un Controlador de Kubernetes a través de AWS Controllers for Kubernetes for Amazon EMR en EKS.

Esta consolidación viene con una compensación de una mayor dificultad para medir los costos detallados para la devolución o el cobro por equipo o aplicación. De acuerdo a un Encuesta CNCF y Fundación FinOps, el 68 % de los usuarios de Kubernetes confían en estimaciones mensuales o no controlan los costos de Kubernetes en absoluto. Y para los encuestados que informan sobre el monitoreo activo de costos de Kubernetes, Explorador de costos de AWS y Kubecost se clasificaron como las herramientas más populares que se utilizan.

Actualmente, puede distribuir los costos por arrendatario utilizando una multiempresa rígida con clústeres de EKS independientes en cuentas de AWS dedicadas o una multiempresa flexible con grupos de nodos independientes en un clúster de EKS compartido. Para reducir costos y mejorar la utilización de recursos, puede usar la segregación basada en espacios de nombres, donde los nodos se comparten entre diferentes espacios de nombres. Sin embargo, calcular y atribuir costos a los equipos por carga de trabajo o espacios de nombres teniendo en cuenta la optimización informática (como los planes de ahorro o el costo de instancias puntuales) y el costo de los servicios de AWS como EMR en EKS es una tarea desafiante y no trivial.

En esta publicación, presentamos una solución de devolución de costos para EMR en EKS que combina las capacidades nativas de AWS de Informes de uso y costo de AWS (AWS CUR) junto con la visibilidad detallada de los costos de Kubernetes y los conocimientos mediante Kubecost en Amazon EKS.

Resumen de la solución

Un trabajo en EMR en EKS incurre en costos principalmente en dos dimensiones: recursos de cómputo y un cargo adicional marginal por el uso de EMR en EKS. Para rastrear el costo asociado con cada una de las dimensiones, usamos datos de tres fuentes:

  • CUR de AWS – Usamos esto para obtener el aumento de costo de EMR en EKS por trabajo y para que Kubecost reconcilie el costo de cómputo con cualquier plan de ahorro o instancia reservada utilizada. La infraestructura de apoyo para CUR se implementa como se define en Configuración de Athena con plantillas de AWS CloudFormation.
  • Costo de Kube – Usamos esto para obtener el costo de cómputo incurrido por los pods de ejecutor y controlador.

El proceso de asignación de costos incluye los siguientes componentes:

  • Kubecost proporciona el costo de cómputo. Sin embargo, para hacer un análisis en profundidad, definimos un Kubernetes por hora CronJob en él que inicia un pod para recuperar datos de Kubecost y los almacena en Servicio de almacenamiento simple de Amazon (Amazon S3).
  • Los archivos CUR se almacenan en un depósito S3.
  • Utilizamos Atenea amazónica para crear una vista y proporcionar una vista consolidada del costo total para ejecutar un trabajo EMR en EKS.
  • Finalmente, puede conectar sus herramientas preferidas de inteligencia de negocios utilizando el JDBC or ODBC conexiones con Atenea. En esta publicación, usamos Amazon QuickSight integración nativa para fines de visualización.

El siguiente diagrama muestra la arquitectura general y cómo los diferentes componentes interactúan entre sí.

arquitectura-de-seguimiento-de-costos-emr-eks

Proporcionamos un script de shell para implementar nuestra solución de seguimiento. El script de shell configura la infraestructura utilizando un Formación en la nube de AWS plantilla, la Interfaz de línea de comandos de AWS (AWS CLI) y eksctl y kubectl comandos Este script ejecuta las siguientes acciones:

  1. Inicie la implementación de CloudFormation.
  2. Cree y configure un informe de uso y costo de AWS.
  3. Configure e implemente Kubecost respaldado por Servicio administrado de Amazon para Prometheus.
  4. Implemente un CronJob de Kubernetes.

Requisitos previos

Necesita los siguientes requisitos previos:

Esta publicación asume que ya tiene un clúster de EKS y ejecuta EMR en trabajos de EKS. Si no tiene un clúster de EKS listo para probar la solución, le sugerimos comenzar con un estándar EMR en el plano de EKS que configura un clúster para enviar EMR en trabajos de EKS.

Configurar la solución

Para ejecutar el script de shell, complete los siguientes pasos:

  1. Clona lo siguiente GitHub repositorio.
  2. Ir a la carpeta cost-tracking con el siguiente comando:

cd cost-tracking

  1. Ejecute el script con el siguiente comando:

sh deploy-emr-eks-cost-tracking.sh REGION KUBECOST-VERSION EKS-CLUSTER-NAME ACCOUNT-ID

Después de ejecutar el script, estará listo para usar Kubecost y los datos de CUR para comprender el costo asociado con su EMR en trabajos de EKS.

Costo de seguimiento

En esta sección, le mostramos cómo analizar el costo de cómputo que se recupera de Kubecost, cómo consultar EMR en los datos de mejora de EKS y cómo combinarlos para tener una sola vista consolidada del costo.

Calcular el costo

Kubecost ofrece varias formas de realizar un seguimiento del costo por objeto de Kubernetes. Por ejemplo, puede realizar un seguimiento del costo por módulo, controlador, trabajo, etiqueta o implementación. También le permite comprender el costo de los recursos inactivos, como Nube informática elástica de Amazon (Amazon EC2) instancias que los pods no utilizan por completo. En esta publicación, asumimos que no se aprovisionan nodos si no se está ejecutando ningún trabajo de EMR en EKS, y usamos el Escalador automático de clústeres de Karpenter para aprovisionar nodos cuando se envían trabajos. Karpenter también realiza empaques en contenedores, lo que optimiza la utilización de recursos de EC2 y, a su vez, reduce el costo de los recursos inactivos.

Para rastrear el costo de cómputo asociado con EMR en pods de EKS, consultamos el API de asignación de Kubecost pasando pod y labels en el parámetro agregado. usamos el emr-containers.amazonaws.com/job.id y emr-containers.amazonaws.com/virtual-cluster-id etiquetas que siempre están presentes en los pods de ejecutor y controlador. Las etiquetas se usan para filtrar los datos de Kubecost para obtener solo el costo asociado con EMR en los pods de EKS. Puede revisar varios niveles de granularidad a nivel de pod, trabajo y clúster virtual para comprender el costo de un controlador frente a un ejecutor, o del uso de instancias de spot en trabajos. También puede usar el costo del clúster virtual para comprender el costo general de un EMR en EMR cuando se usa en un espacio de nombres que usan otras aplicaciones además de EMR en EKS.

También proporcionamos la instance_id, el tamaño de la instancia y el tipo de capacidad (bajo demanda o al contado) que se utilizó para ejecutar el pod. Esto se recupera consultando el API de recursos de Kubecost. Estos datos pueden ser útiles para comprender cómo ejecuta sus trabajos y qué capacidad usa con más frecuencia.

Los datos sobre el costo de ejecutar los pods, así como los activos, se recuperan con un CronJob de Kubernetes que envía la solicitud a la API de Kubecost, une las dos fuentes de datos (datos de asignación y activos) en el instance_id, limpia los datos y los almacena en Amazon S3 en formato CSV.

Los datos de costos de cómputo tienen varios campos que son de interés, incluidos cpucost, ramcost (coste de la memoria), pvcost (costo del almacenamiento de Amazon EBS), la eficiencia del uso de CPU y RAM, así como el costo total, que representa el costo agregado de todos los recursos utilizados, ya sea a nivel de pod, trabajo o clúster virtual.

Para ver estos datos, complete los siguientes pasos:

  1. En la consola de Athena, vaya al editor de consultas.
  2. Elige athenacurcfn_c_u_r para la base de datos y cost_data para la mesa.
  3. Ejecute la siguiente consulta:
SELECT job_id,
vc_id,
sum(totalcost) as cost
FROM "athenacurcfn_c_u_r"."compute_cost"
GROUP BY job_id, vc_id

La siguiente captura de pantalla muestra los resultados de la consulta.

Para consultar los datos sobre la información a nivel de pod, puede ejecutar la siguiente instrucción SQL:

SELECT
split_part(name, '/', 1) as pod_name,
job_id,
vc_id,
totalcost,
instance_id, "properties.labels.node_kubernetes_io_instance_type",
capacity_type
FROM "athenacurcfn_c_u_r"."compute_cost";

EMR en el aumento de EKS

El costo asociado con EMR en EKS uplift está disponible a través de AWS CUT y se almacena en un depósito S3. El script que ejecutó en el paso de configuración creó una tabla de Athena asociada a los datos en el depósito S3. Los siguientes pasos lo guían a través de cómo puede consultar los datos:

  1. En la consola de Athena, vaya al editor de consultas.
  2. Elige athenacurcfn_c_u_r para la base de datos y cur_data para la mesa.
  3. Ejecute la siguiente consulta:
SELECT
split_part(line_item_resource_id, '/', 5) as job_id,
split_part(line_item_resource_id, '/', 3) as vc_id,
sum(line_item_blended_cost) as cost
FROM athenacurcfn_c_u_r.automated
WHERE product_product_family='EMR Containers'
GROUP BY line_item_resource_id

Esta consulta le proporciona el costo por trabajo. La siguiente captura de pantalla muestra los resultados.

Tendrá que esperar hasta 24 horas para que los datos de CUR estén disponibles. Como tal, solo debe ejecutar la consulta anterior después de que los datos CUR estén disponibles y haya ejecutado el EMR en trabajos de EKS.

Costo total

Para ver el costo total y realizar un análisis sobre él, cree una vista en Athena de la siguiente manera:

CREATE VIEW emr_eks_cost AS
SELECT
split_part(line_item_resource_id, '/', 5) as job_id,
split_part(line_item_resource_id, '/', 3) as vc_id,
sum(line_item_blended_cost) as cost, 'emr-uplift' as category
FROM athenacurcfn_c_u_r.cur_data
WHERE product_product_family='EMR Containers'
GROUP BY line_item_resource_id
UNION
SELECT
job_id,
vc_id,
sum(totalCost) as cost, 'compute' as category
FROM "athenacurcfn_c_u_r"."compute_cost"
group by job_id, vc_id

Ahora que se creó la vista, puede consultar y analizar el costo de ejecutar su EMR en trabajos de EKS:

SELECT sum(cost) as total_cost, job_id, vc_id
FROM "athenacurcfn_c_u_r"."emr_eks_cost"
GROUP BY job_id, vc_id;

La siguiente captura de pantalla muestra un resultado de ejemplo de la consulta en la vista creada.

Por último, puede usar QuickSight para obtener una vista gráfica de alto nivel de su EMR en el gasto de EKS. La siguiente captura de pantalla muestra un tablero de ejemplo.

panel-quicksight-de-costos-de-cómputo-de-emr-eks

Ahora puede adaptar esta solución a sus necesidades específicas y crear su análisis personalizado.

Limpiar

A lo largo de esta publicación, implementó y configuró los componentes de infraestructura necesarios para realizar un seguimiento del costo de su EMR en las cargas de trabajo de EKS. Para evitar incurrir en cargos adicionales por esta solución, elimine todos los recursos que creó:

  1. Vaciar los cubos S3 cost-data-REGION-ACCOUNT_ID y aws-athena-query-results-cur-REGION-ACCOUNT_ID.
  2. Eliminar el grupo de trabajo de Athena kubecost-cur-workgroup.
  3. Vaciar y eliminar el repositorio de ECR emreks-compute-cost-exporter.
  4. Ejecute el script destruir-emr-eks-cost-tracking.sh, que eliminará la implementación de AWS CloudFormation, desinstalará Kubecost, eliminará CronJob y eliminará los informes de uso y costo.

Conclusión

En esta publicación, mostramos cómo puede usar las capacidades de Kubecost junto con los informes de uso y costo para monitorear de cerca los costos de Amazon EMR en EKS por clúster virtual o por trabajo. Esta solución le permite lograr costos más granulares para las devoluciones de cargo utilizando Athena, Amazon Managed Service for Prometheus y QuickSight.

La solución presentó los pasos para configurar los informes de costos y uso y Kubecost, y configurar un CronJob por hora para obtener el costo de ejecutar pods girados por EMR en EKS. Puede modificar la solución presentada para que se ejecute a intervalos más largos o para recopilar datos en diferentes clústeres de EKS. También puede modificar el script Python ejecutado por CronJob para limpiar aún más los datos o reducir la cantidad de datos almacenados eliminando los campos que no necesita. Puede usar los conocimientos proporcionados para impulsar los esfuerzos de optimización de costos a lo largo del tiempo, detectar cualquier aumento de costos y medir el impacto de nuevas implementaciones o eventos particulares en el uso de recursos y el rendimiento de costos. Para obtener más información sobre la integración de EMR en EKS en su implementación existente de Amazon EKS, consulte Consideraciones de diseño para Amazon EMR en EKS en un entorno de Amazon EKS de múltiples inquilinos


Acerca de los autores

Lotfi Mouhib es un arquitecto de soluciones sénior que trabaja para el equipo del sector público con Amazon Web Services. Ayuda a los clientes del sector público de EMEA a realizar sus ideas, crear nuevos servicios e innovar para los ciudadanos. En su tiempo libre, a Lotfi le gusta andar en bicicleta y correr.

Hamza Mimí Arquitecto principal de soluciones en el equipo del sector público francés en Amazon Web Services (AWS). Con una larga experiencia en la industria de las telecomunicaciones. Actualmente trabaja como asesor de clientes en temas que van desde la transformación digital hasta la orientación arquitectónica.

punto_img

Información más reciente

punto_img