
Actualmente, cada vez más empresas están trasladando su infraestructura de servidores de hierro y sus propias máquinas virtuales a las nubes. Dicha solución es fácil de explicar: no es necesario cuidar el hardware, el clúster se configura fácilmente de muchas maneras diferentes ... y lo más importante, las tecnologías disponibles (como Kubernetes) hacen que sea más fácil escalar la potencia de cómputo dependiendo de la carga.
El aspecto financiero siempre es importante. La herramienta, que se discutirá en este artículo, está diseñada para ayudar a reducir los presupuestos cuando se utiliza la infraestructura de la nube con Kubernetes.
Introduccion
Kubecost es una startup con sede en California de inmigrantes de Google, que crea una solución para calcular los costos de infraestructura en servicios en la nube (dentro del clúster Kubernetes + recursos compartidos), encontrar cuellos de botella en la configuración del clúster y enviar notificaciones apropiadas a Slack.
Tenemos clientes con Kubernetes tanto en las nubes familiares de AWS como de GCP, así como en la comunidad más rara de Azure Linux, en general, en todas las plataformas compatibles con Kubecost. Para algunos de ellos, consideramos los costos de los servicios dentro del clúster por nuestra cuenta (utilizando una técnica similar a la utilizada por Kubecost), así como también monitoreamos los costos de infraestructura e intentamos optimizarlos. Por lo tanto, es lógico que estuviéramos interesados en la capacidad de automatizar tales tareas.
El código fuente del módulo principal de Kubecost está abierto bajo la licencia Open Source-License (Apache License 2.0). Se puede usar libremente, y las funciones disponibles deberían ser suficientes para proyectos pequeños. Sin embargo, los negocios son negocios: el resto del producto está cerrado, se puede usar para
suscripciones pagas , lo que también implica soporte comercial. Además, los autores ofrecen una licencia gratuita para grupos pequeños (1 grupo con
10 nodos ; durante la redacción de este artículo, este límite se ha expandido a 20 nodos) o un período de prueba con capacidades completas durante 1 mes.
Como funciona
Entonces, la mayor parte de Kubecost es una aplicación de
modelo de costos escrita en Go. El gráfico de timón, que describe todo el sistema, se llama
analizador de costos y es esencialmente un ensamblaje de modelo de costos con Prometheus, Grafana y varios paneles.
En términos generales, el modelo de costos tiene su propia interfaz web, que muestra gráficos y estadísticas detalladas sobre los costos en forma de tabla, así como, por supuesto, consejos para optimizar los costos. Los paneles presentados en Grafana son una etapa anterior en el desarrollo de Kubecost y contienen casi los mismos datos que el modelo de costos, completándolos con las estadísticas habituales sobre el consumo de CPU / memoria / red / espacio en disco en el clúster y sus componentes.
¿Cómo funciona Kubecost?
- El modelo de costos a través de la API de proveedores en la nube recibe precios de servicio.
- Además, dependiendo del tipo de hierro del nodo y la región, se considera el costo de los nodos.
- Según el costo de los nodos, cada pod final recibe el costo por hora de usar el procesador, gastando un gigabyte de memoria y el costo de una hora de almacenamiento de un gigabyte de datos, dependiendo del nodo en el que trabajó o la clase de almacenamiento.
- Según el costo del trabajo de los pods individuales, se considera el pago por espacios de nombres, servicios, implementaciones, StatefulSets.
- Para calcular las estadísticas, se utilizan las métricas proporcionadas por kube-state-metrics y node-exporter.
Es importante tener en cuenta que Kubecost
solo considera los recursos disponibles en Kubernetes de forma predeterminada . Las bases de datos externas, los servidores GitLab, los repositorios S3 y otros servicios que no están en el clúster (aunque se encuentran en la misma nube) no son visibles para él. Aunque para GCP y AWS, puede agregar las claves de sus cuentas de servicio y calcular todo junto.
Instalación
Para que Kubecost funcione, necesita:
- Kubernetes versión 1.8 y superior;
- kube-state-metrics;
- Prometeo
- exportador de nodos.
Dio la casualidad de que en nuestros grupos todas estas condiciones se cumplieron de antemano, por lo que resultó ser suficiente solo para especificar el punto final correcto para el acceso a Prometheus. Sin embargo, el diagrama de Helm oficial de kubecost contiene todo lo que necesita para comenzar en un cluster desnudo.
Hay varias formas de instalar Kubecost:
- El método de instalación estándar descrito en las instrucciones en el sitio web del desarrollador. Debe agregar el repositorio de analizador de costos a Helm y luego instalar el gráfico . Solo queda reenviar el puerto y finalizar la configuración al estado deseado manualmente (a través de kubectl) y / o usando la interfaz web de modelo de costo.
Ni siquiera probamos este método, ya que no utilizamos configuraciones preparadas de terceros, sin embargo, parece una buena opción "solo inténtalo tú mismo". Si ya tiene algunos de los componentes del sistema instalados o desea un ajuste más preciso, es mejor considerar la segunda forma.
- Utilice esencialmente el mismo gráfico , pero configúrelo e instálelo independientemente de cualquier manera conveniente.
Como ya se mencionó, además del propio kubecost, este cuadro contiene los cuadros de Grafana y Prometeo, que también se pueden personalizar a su gusto.
El gráfico values.yaml
para el analizador de costos disponible en el gráfico le permite configurar:
- lista de componentes del analizador de costos que se implementarán;
- su punto final para Prometeo (si ya tiene uno);
- Dominios y otras configuraciones de ingreso para el modelo de costos y Grafana;
- anotaciones para vainas;
- La necesidad de almacenamiento permanente y su tamaño.
Una lista completa de las opciones de configuración disponibles con una descripción se encuentra en la documentación .
Como kubecost en la versión básica no puede restringir el acceso, deberá configurar inmediatamente la autenticación básica para el panel web.
- Instale solo el núcleo del sistema - modelo de costo. Para hacer esto, debe tener Prometheus instalado en el clúster y especificar el valor correspondiente de su dirección en la variable
prometheusEndpoint
para Helm. Después de eso, aplique el conjunto de configuraciones YAML en el clúster.
Nuevamente, debe agregar manualmente Ingress con basic-auth. Y finalmente, debe agregar una sección para recopilar métricas del modelo de extraScrapeConfigs
en extraScrapeConfigs
en la configuración de Prometheus:
- job_name: kubecost honor_labels: true scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: http dns_sd_configs: - names: - < kubecost> type: 'A' port: 9003
¿Qué obtenemos?
Con una instalación completa, tenemos a nuestra disposición el panel web kubecost y Grafana con un conjunto de paneles.
El costo total que se muestra en la pantalla principal muestra el costo estimado de los recursos para el mes. Este es el precio
previsto que muestra el costo de usar el clúster (por mes) en el nivel actual de consumo de recursos.
Esta métrica es más para el análisis de costos y la optimización. No es muy conveniente ver los costos totales para el resumen de julio en kubecost: deberá
facturar esto. Pero puede ver los costos desglosados por espacios de nombres, etiquetas, pods durante 1/2/7/30/90 días, que la facturación nunca le mostrará.

Hablando de
etiquetas . Debe ingresar inmediatamente a la configuración y establecer los nombres de las etiquetas que se utilizarán como categorías adicionales para agrupar los costos:

Puede colgar cualquier etiqueta en ellos; es conveniente si ya tiene su propio sistema de etiquetado.
Allí también puede cambiar la dirección de API de punto final a la que se conecta el modelo de costo, configurar el tamaño de descuento en GCP y establecer sus propios precios de recursos y moneda para medirlos (por alguna razón, la función no afecta el costo total).
Kubecost puede mostrar varios
problemas en el grupo (e incluso alertar en caso de peligro). Desafortunadamente, la opción no es configurable y, por lo tanto, si tiene entornos de desarrollador y se utilizan, puede observar constantemente algo como esto:

Una herramienta importante es el
Cluster Savings . Mide la actividad de las cápsulas (consumo de recursos, incluida la red) y también considera cuánto dinero y qué se puede ahorrar.
Puede parecer que los consejos de optimización son bastante obvios, pero la experiencia sugiere que todavía hay algo que ver. En particular, se supervisa la actividad de red de los pods (Kubecost ofrece prestar atención a los inactivos), se compara la memoria solicitada y real y el consumo de CPU, así como la CPU utilizada por los nodos del clúster (ofrece colapsar varios nodos en uno), carga de disco y un par de docenas parámetros
Como con cualquier problema de optimización, la optimización de recursos basada en los datos de Kubecost debe
tratarse con precaución . Por ejemplo, Cluster Savings sugiere eliminar nodos, alegando que es seguro, pero no tiene en cuenta la presencia de selectores de nodos y la contaminación en los módulos desplegados en ellos que no están presentes en otros nodos. De todos modos, incluso los autores del producto en su
artículo reciente (por cierto, puede ser muy útil para aquellos que estén interesados en el tema del proyecto) recomiendan no precipitarse de lleno en la optimización de costos, sino abordar el tema cuidadosamente.
Resumen
Después de usar kubecost durante un mes en un par de proyectos, podemos concluir que esta es una herramienta interesante (e incluso fácil de aprender e instalar) para analizar y optimizar los costos de los proveedores de nube utilizados para los clústeres de Kubernetes. Los cálculos son muy precisos: en nuestros experimentos, coincidieron con lo que los proveedores realmente requerían.
No sin inconvenientes: hay errores no críticos, la funcionalidad en algunos lugares no cubre los requisitos específicos de algunos proyectos. Sin embargo, si necesita comprender rápidamente a dónde va el dinero y qué puede "cortar" para reducir constantemente la factura de los servicios en la nube en un 5-30% (esto sucedió en nuestro caso), esta es una gran opción.
PS
Lea también en nuestro blog: