Revue Kubecost pour économiser de l'argent sur Kubernetes dans les nuages

Revue Kubecost pour économiser de l'argent sur Kubernetes dans les nuages

Actuellement, de plus en plus d'entreprises transfèrent leur infrastructure de serveurs matériels et de leurs propres machines virtuelles vers le cloud. Cette solution est simple à expliquer : il n'y a pas à se soucier du matériel, le cluster se configure facilement de nombreuses manières différentes... et surtout, les technologies existantes (comme Kubernetes) permettent d'adapter simplement la puissance de calcul en fonction de la charge. .

L'aspect financier est toujours important. L'outil présenté dans cet article est conçu pour aider à réduire les budgets lors de l'utilisation de l'infrastructure cloud avec Kubernetes.

introduction

Kubécost est une startup californienne de Google, créant une solution permettant de calculer les coûts d'infrastructure dans les services cloud (au sein d'un cluster Kubernetes + ressources partagées), de rechercher les goulots d'étranglement dans les paramètres du cluster et d'envoyer des notifications appropriées à Slack.

Nous avons des clients avec Kubernetes à la fois dans les cloud AWS et GCP familiers et, plus rarement pour la communauté Linux, Azure - en général, sur toutes les plateformes prises en charge par Kubecost. Pour certains d’entre eux, nous calculons nous-mêmes les coûts des services intra-clusters (en utilisant une méthode similaire à celle utilisée par Kubecost), et suivons également les coûts d’infrastructure et essayons de les optimiser. Il est donc logique que nous nous intéressions à la possibilité d’automatiser de telles tâches.

Le code source du module principal Kubecost est ouvert selon les termes de la licence Open Source (Apache License 2.0). Il peut être utilisé librement et les fonctionnalités disponibles devraient être suffisantes pour les petits projets. Cependant, les affaires restent les affaires : le reste du produit est fermé, il peut être utilisé par abonnements payants, ce qui implique également un soutien commercial. De plus, les auteurs proposent une licence gratuite pour les petits clusters (1 cluster avec 10 nœuds - lors de la rédaction de cet article, cette limite s'est étendue à 20 nœuds) ou une période d'essai avec toutes les capacités pendant 1 mois.

Comment ça marche

Ainsi, la partie principale de Kubecost est l'application modèle de coût, écrit en Go. Un graphique Helm qui décrit l'ensemble du système est appelé analyseur de coûts et à la base se trouve un assemblage à partir d'un modèle de coût avec Prometheus, Grafana et plusieurs tableaux de bord.

D'une manière générale, cost-model possède sa propre interface Web, qui affiche des graphiques et des statistiques détaillées sur les coûts sous forme de tableau, ainsi que, bien sûr, des conseils pour optimiser les coûts. Les tableaux de bord présentés dans Grafana constituent une étape antérieure dans le développement de Kubecost et contiennent en grande partie les mêmes données que le modèle de coût, en les complétant par les statistiques habituelles sur la consommation de CPU/mémoire/réseau/espace disque dans le cluster et ses Composants.

Comment fonctionne Kubecost ?

  • Le modèle de coûts reçoit les prix des services via l'API des fournisseurs de cloud.
  • De plus, en fonction du type de fer du nœud et de la région, le coût par nœud est calculé.
  • En fonction du coût d'exécution des nœuds, chaque pod feuille obtient un coût par heure d'utilisation du processeur, par gigaoctet de mémoire consommé et par heure par gigaoctet de données stockées - en fonction du nœud sur lequel il s'exécutait ou de la classe de stockage.
  • En fonction du coût d'exploitation des pods individuels, le paiement est calculé pour les espaces de noms, les services, les déploiements et les StatefulSets.
  • Les statistiques sont calculées à l'aide des métriques fournies par kube-state-metrics et node-exporter.

Il est important de considérer que Kubecost par défaut, ne compte que les ressources disponibles dans Kubernetes. Les bases de données externes, les serveurs GitLab, les stockages S3 et autres services qui ne sont pas dans le cluster (même s'ils sont situés dans le même cloud) ne lui sont pas visibles. Cependant, pour GCP et AWS, vous pouvez ajouter les clés de vos comptes de service et tout calculer ensemble.

Installation

Kubecost nécessite :

  • Kubernetes version 1.8 et supérieure ;
  • métriques d'état de Kube ;
  • Prométhée;
  • exportateur de nœuds.

Il se trouve que dans nos clusters, toutes ces conditions étaient remplies à l'avance, il s'est donc avéré qu'il suffisait simplement de spécifier le point de terminaison correct pour accéder à Prometheus. Cependant, le graphique Helm officiel de Kubecost contient tout ce dont vous avez besoin pour exécuter sur un cluster nu.

Il existe plusieurs manières d'installer Kubecost :

  1. Méthode d'installation standard décrite dans instructions sur le site Web du développeur. ajoutez le référentiel de l'analyseur de coûts à Helm, puis installez le graphique. Il ne reste plus qu'à transférer votre port et à ajuster les paramètres à l'état souhaité manuellement (via kubectl) et/ou à l'aide de l'interface Web du modèle de coût.

    Nous n'avons même pas essayé cette méthode, car nous n'utilisons pas de configurations tierces prêtes à l'emploi, mais cela ressemble à une bonne option « essayez-la par vous-même ». Si certains composants du système sont déjà installés ou si vous souhaitez un réglage plus précis, il est préférable d'envisager la deuxième voie.

  2. Utiliser essentiellement le même tableau, mais configurez-le et installez-le vous-même de toute manière pratique.

    Comme déjà mentionné, en plus du kubecost lui-même, ce graphique contient des graphiques Grafana et Prometheus, qui peuvent également être personnalisés à volonté.

    Disponible sur la carte values.yaml pour cost-analyzer vous permet de configurer :

    • une liste des composants de l'analyseur de coûts qui doivent être déployés ;
    • votre point de terminaison pour Prometheus (si vous en avez déjà un) ;
    • domaines et autres paramètres d'entrée pour le modèle de coûts et Grafana ;
    • annotations pour les pods ;
    • la nécessité d'utiliser un stockage permanent et sa taille.

    Une liste complète des options de configuration disponibles avec des descriptions est disponible dans documentation.

    Étant donné que Kubecost dans sa version de base ne peut pas restreindre l'accès, vous devrez immédiatement configurer l'authentification de base pour le panneau Web.

  3. Installer seulement le cœur du système - modèle de coût. Pour ce faire, vous devez avoir Prometheus installé dans le cluster et préciser la valeur correspondante de son adresse dans la variable prometheusEndpoint pour Helm. Après cela, postulez ensemble de configurations YAML dans la grappe.

    Encore une fois, vous devrez ajouter manuellement Ingress avec basic-auth. Enfin, vous devrez ajouter une section pour collecter les métriques du modèle de coût dans extraScrapeConfigs dans la configuration 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'avons-nous?

Avec une installation complète, nous avons à notre disposition le panel web kubecost et Grafana avec un ensemble de tableaux de bord.

Coût total, affiché sur l'écran principal, affiche en fait le coût estimé des ressources pour le mois. Ce prévisible prix reflétant le coût d'utilisation du cluster (par mois) au niveau actuel de consommation de ressources.

Cette métrique sert davantage à analyser les dépenses et à les optimiser. Ce n'est pas très pratique de regarder les coûts totaux du mois de juillet abstrait dans kubecost : il faudra aller à la facturation. Mais vous pouvez voir les coûts ventilés par espaces de noms, étiquettes, pods pour 1/2/7/30/90 jours, que la facturation ne vous montrera jamais.

Revue Kubecost pour économiser de l'argent sur Kubernetes dans les nuages

En parlant de Étiquettes. Vous devez immédiatement accéder aux paramètres et définir les noms des étiquettes qui seront utilisées comme catégories supplémentaires pour regrouper les coûts :

Revue Kubecost pour économiser de l'argent sur Kubernetes dans les nuages

Vous pouvez y accrocher n'importe quelle étiquette - pratique si vous disposez déjà de votre propre système d'étiquetage.

Vous pouvez également y modifier l'adresse du point de terminaison de l'API auquel le modèle de coût se connecte, ajuster le montant de la remise dans GCP et définir vos propres prix pour les ressources et la devise pour leur mesure (pour une raison quelconque, la fonctionnalité n'affecte pas le coût total).

Kubecost peut afficher diverses problèmes dans le cluster (et même alerter en cas de danger). Malheureusement, l'option n'est pas configurable, et par conséquent, si vous disposez d'environnements pour les développeurs et que vous les utilisez, vous verrez constamment quelque chose comme ceci :

Revue Kubecost pour économiser de l'argent sur Kubernetes dans les nuages

Un outil important - Économies de cluster. Il mesure l'activité des pods (consommation de ressources, y compris celles du réseau), et calcule également combien d'argent et sur quoi vous pouvez économiser.

Il peut sembler que les conseils d’optimisation soient assez évidents, mais l’expérience suggère qu’il y a encore quelque chose à examiner. En particulier, l'activité réseau des pods est surveillée (Kubecost suggère de prêter attention aux inactifs), la consommation de mémoire et de CPU demandée et réelle est comparée, ainsi que le CPU utilisé par les nœuds du cluster (suggère de regrouper plusieurs nœuds en un seul), le disque charge et quelques dizaines de paramètres supplémentaires.

Comme pour toute problématique d’optimisation, l’optimisation des ressources basée sur les données Kubecost nécessite : traiter avec soin. Par exemple, Cluster Savings suggère de supprimer des nœuds, affirmant que c'est sûr, mais ne prend pas en compte la présence de sélecteurs de nœuds et de teintes dans les pods déployés sur eux qui ne sont pas disponibles sur d'autres nœuds. Et en général, même les auteurs du produit dans leur article récent (d'ailleurs, cela peut être très utile pour ceux qui s'intéressent au sujet du projet) il est recommandé de ne pas se précipiter dans l'optimisation des coûts, mais d'aborder la question de manière réfléchie.

Les résultats de

Après avoir utilisé kubecost pendant un mois sur quelques projets, nous pouvons conclure qu'il s'agit d'un outil intéressant (et également facile à apprendre et à installer) pour analyser et optimiser les coûts des services des fournisseurs de cloud utilisés pour les clusters Kubernetes. Les calculs se sont révélés très précis : dans nos expériences, ils ont coïncidé avec ce que les prestataires avaient réellement demandé.

Il y a aussi quelques inconvénients : il y a des bugs non critiques, et à certains endroits la fonctionnalité ne couvre pas les besoins spécifiques à certains projets. Cependant, si vous avez besoin de comprendre rapidement où va l'argent et ce qui peut être « réduit » afin de réduire systématiquement la facture des services cloud de 5 à 30 % (c'est ce qui s'est passé dans notre cas), c'est une excellente option. .

PS

A lire aussi sur notre blog :

Source: habr.com

Ajouter un commentaire