
Actuellement, de plus en plus d'entreprises déplacent leur infrastructure des serveurs de fer et de leurs propres machines virtuelles vers les nuages. Une telle solution est facile à expliquer: il n'est pas nécessaire de prendre soin du matériel, le cluster est facilement configuré de nombreuses manières différentes ... et surtout, les technologies disponibles (comme Kubernetes) facilitent la mise à l'échelle de la puissance de calcul en fonction de la charge.
L'aspect financier est toujours important. L'outil, qui sera abordé dans cet article, est conçu pour aider à réduire les budgets lors de l'utilisation de l'infrastructure cloud avec Kubernetes.
Présentation
Kubecost est une startup californienne issue d'immigrants de Google, créant une solution pour calculer les coûts d'infrastructure dans les services cloud (à l'intérieur du cluster Kubernetes + ressources partagées), trouver des goulots d'étranglement dans les paramètres du cluster et envoyer les notifications appropriées à Slack.
Nous avons des clients avec Kubernetes à la fois dans les clouds AWS et GCP familiers, ainsi que les plus rares pour la communauté Azure Linux - en général, sur toutes les plateformes prises en charge par Kubecost. Pour certains d'entre eux, nous considérons les coûts des services intra-cluster par nous-mêmes (en utilisant une technique similaire à celle utilisée par Kubecost), ainsi que le suivi des coûts d'infrastructure et essayons de les optimiser. Par conséquent, il était logique que nous nous intéressions à la capacité d'automatiser de telles tâches.
Le code source du module Kubecost principal est ouvert sous la licence Open Source (Apache License 2.0). Il peut être utilisé librement et les fonctions disponibles devraient être suffisantes pour les petits projets. Cependant, les affaires sont les affaires: le reste du produit est fermé, il peut être utilisé pour
des abonnements payants , ce qui implique également un support commercial. De plus, les auteurs proposent une licence gratuite pour les petits clusters (1 cluster à
10 nœuds - au cours de la rédaction de cet article, cette limite est passée à 20 nœuds) ou une période d'essai avec des capacités complètes pendant 1 mois.
Comment ça marche
Ainsi, l'essentiel de Kubecost est une application de
modèle de coût écrite en Go. Le graphique de barre, qui décrit l'ensemble du système, est appelé
analyseur de coût et est essentiellement un assemblage de modèle de coût avec Prometheus, Grafana et plusieurs tableaux de bord.
D'une manière générale, le modèle de coût a 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 sur l'optimisation des coûts. Les tableaux de bord présentés dans Grafana sont une étape antérieure du développement de Kubecost et contiennent à peu près les mêmes données que le modèle de coût, en les complétant avec les statistiques habituelles sur la consommation d'espace processeur / mémoire / réseau / disque dans le cluster et ses composants.
Comment fonctionne Kubecost?
- Le modèle de coût via l'API des fournisseurs de cloud reçoit les prix des services.
- En outre, en fonction du type de fer du nœud et de la région, le coût des nœuds est pris en compte.
- En fonction du coût du travail des nœuds, chaque pod final reçoit le coût par heure d'utilisation du processeur, la dépense d'un gigaoctet de mémoire et le coût d'une heure de stockage d'un gigaoctet de données - selon le nœud sur lequel il a fonctionné ou la classe de stockage.
- En fonction du coût du travail des pods individuels, le paiement est pris en compte pour les espaces de noms, les services, les déploiements et les StatefulSets.
- Pour calculer les statistiques, les métriques fournies par kube-state-metrics et node-exporter sont utilisées.
Il est important de noter que Kubecost
ne considère que les ressources disponibles dans Kubernetes par défaut . Les bases de données externes, les serveurs GitLab, les référentiels S3 et les autres services qui ne sont pas dans le cluster (bien que situés dans le même cloud) ne lui sont pas visibles. Bien que pour GCP et AWS, vous pouvez ajouter les clés de vos comptes de service et tout calculer ensemble.
L'installation
Pour que Kubecost fonctionne, vous avez besoin de:
- Kubernetes version 1.8 et supérieure;
- kube-state-metrics;
- Prométhée;
- nœud-exportateur.
Il s'est avéré que dans nos clusters, toutes ces conditions étaient remplies à l'avance, il s'est donc avéré suffisant de spécifier le point de terminaison correct pour l'accès à Prométhée. Cependant, le Helm-chart officiel de kubecost contient tout ce dont vous avez besoin pour démarrer sur un cluster nu.
Il existe plusieurs façons d'installer Kubecost:
- Méthode d'installation standard décrite dans les instructions sur le site Web du développeur. Vous devez ajouter le référentiel d'analyseur de coûts à Helm, puis installer le graphique . Il ne reste plus qu'à transférer le port et terminer les paramètres à l'état souhaité manuellement (via kubectl) et / ou en utilisant 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 prêtes à l'emploi tierces, mais cela ressemble à une bonne option "essayez par vous-même". Si vous avez déjà certains des composants du système installés ou si vous souhaitez un réglage plus fin, il est préférable d'envisager la deuxième façon.
- Utilisez essentiellement le même graphique , mais configurez-le et installez-le indépendamment de la manière qui vous convient.
Comme déjà mentionné, en plus de kubecost lui-même, ce graphique contient les graphiques Grafana et Prometheus, qui peuvent également être personnalisés à votre guise.
Le graphique values.yaml
pour l'analyseur de coût disponible sur le graphique vous permet de configurer:
- liste des composants de l'analyseur de coûts à déployer;
- votre point de terminaison pour Prométhée (si vous en avez déjà un);
- Domaines et autres paramètres d'entrée pour le modèle de coût et Grafana;
- annotations pour pods;
- la nécessité d'un stockage permanent et leur taille.
Une liste complète des options de configuration disponibles avec une description se trouve dans la documentation .
Étant donné que kubecost dans la version de base n'est pas en mesure de restreindre l'accès, vous devrez immédiatement configurer basic-auth pour le panneau Web.
- Installez uniquement le cœur du système - modèle de coût. Pour ce faire, vous devez avoir installé Prometheus dans le cluster et spécifier la valeur correspondante de son adresse dans la variable
prometheusEndpoint
pour Helm. Après cela, appliquez l' ensemble des configurations YAML dans le cluster.
Encore une fois, vous devez ajouter manuellement Ingress avec basic-auth. Et enfin, vous devez ajouter une section pour collecter les métriques de 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'obtenons-nous?
Avec une installation complète, nous avons à notre disposition le panneau web kubecost et Grafana avec un ensemble de tableaux de bord.
Le coût total affiché sur l'écran principal montre en fait le coût estimé des ressources pour le mois. Il s'agit du prix
prévu qui affiche le coût d'utilisation du cluster (par mois) au niveau actuel de consommation de ressources.
Cette mesure est davantage destinée à l'analyse et à l'optimisation des coûts. Ce n'est pas très pratique de regarder les coûts totaux pour le résumé de juillet dans kubecost: vous devrez
aller à la facturation pour cela. Mais vous pouvez voir les coûts ventilés par espaces de noms, étiquettes, pods pour 1/2/7/30/90 jours, ce que la facturation ne vous montrera jamais.

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

Vous pouvez y accrocher toutes les étiquettes - c'est pratique si vous avez déjà votre propre système d'étiquetage.
Vous pouvez également modifier l'adresse API du point de terminaison à laquelle le modèle de coût se connecte, configurer la taille de la remise dans GCP et définir vos propres prix pour les ressources et la devise pour les mesurer (pour une raison quelconque, la fonctionnalité n'affecte pas le coût total).
Kubecost peut montrer divers
problèmes dans le cluster (et même alerter en cas de danger). Malheureusement, l'option n'est pas configurable, et donc - si vous avez des environnements de développement et qu'ils sont utilisés, vous pouvez constamment observer quelque chose comme ceci:

Un outil important est l'
épargne en grappes . Il mesure l'activité des pods (consommation de ressources, y compris le réseau), et considère également combien d'argent et combien peut être économisé.
Il peut sembler que les conseils d'optimisation sont assez évidents, mais l'expérience suggère qu'il y a encore quelque chose à regarder. En particulier, l'activité réseau des pods est surveillée (Kubecost propose de prêter attention aux inactifs), la mémoire demandée et réelle et la consommation CPU sont comparées, ainsi que le CPU utilisé par les nœuds du cluster (offre de regrouper plusieurs nœuds en un), la charge du disque et quelques dizaines paramètres.
Comme pour tout problème d'optimisation, l'optimisation des ressources basée sur les données Kubecost doit être
traitée avec prudence . Par exemple, Cluster Savings suggère de supprimer des nœuds, affirmant qu'il est sûr, mais il ne prend pas en compte la présence de sélecteurs de nœuds et ne tache pas les pods déployés sur ceux-ci qui ne sont pas présents sur d'autres nœuds. Quoi qu'il en soit, même les auteurs du produit dans leur
récent article (en passant, cela peut être très utile pour ceux qui sont intéressés par le sujet du projet) recommandent de ne pas se précipiter tête baissée dans l'optimisation des coûts, mais d'aborder le problème de manière réfléchie.
Résumé
Après avoir utilisé kubecost pendant un mois sur quelques projets, nous pouvons conclure qu'il s'agit d'un outil intéressant (et même facile à apprendre et à installer) pour analyser et optimiser les coûts des fournisseurs de cloud utilisés pour les clusters Kubernetes. Les calculs sont très précis: dans nos expériences, ils coïncidaient avec les besoins réels des prestataires.
Non sans inconvénients: il existe des bogues non critiques, la fonctionnalité par endroits ne couvre pas les exigences spécifiques à certains projets. Cependant, si vous avez besoin de comprendre rapidement où va l'argent et ce que vous pouvez «couper» pour réduire régulièrement la facture des services cloud de 5 à 30% (cela s'est produit dans notre cas), c'est une excellente option.
PS
Lisez aussi dans notre blog: