Connecter un cluster Kubernetes
Install OpenCost and the CostGlass exporter in your cluster so cost data is pushed to CostGlass every 15 minutes.
Connecter un cluster Kubernetes
Installez l'agent open source OpenCost dans votre cluster et un petit exportateur CostGlass qui envoie des données de coût à CostGlass toutes les 15 minutes.
- CostGlass ne se connecte jamais à votre cluster. Un petit CronJob à l'intérieur du cluster envoie les données de coût à CostGlass via HTTPS. Rien n'est ouvert en entrée.
- Deux éléments sont installés : OpenCost (avec Prometheus, dont il a besoin) et l'exportateur CostGlass (un Secret, un ServiceAccount avec accès en lecture seule et un CronJob).
- Les commandes d'installation sont générées pour vous, avec un jeton d'ingestion privé pour ce cluster. Copiez-les, exécutez-les et le cluster apparaît tout seul.
- Les premières données apparaissent généralement dans un délai d'environ 15 à 30 minutes, une fois que le CronJob est exécuté et que Prometheus a collecté un historique.
- La déconnexion d'un cluster révoque son jeton et supprime ses données de coût en direct stockées.
Comment ça marche
Kubernetes ne vous envoie pas de facture. Votre cloud vous facture les machines (nœuds) sur lesquelles le cluster s'exécute, et Kubernetes partage ensuite ces machines entre de nombreuses applications. Pour déterminer le coût de chaque équipe ou application, vous devez mesurer la quantité de CPU, de mémoire et de stockage utilisée par chacune d'entre elles et en fixer le prix. CostGlass fait cela avec Coût ouvert, un outil de coûts open source de la CNCF (la fondation derrière Kubernetes).
costglass-opencost-exporter runs every 15 minutes. Il demande les chiffres à OpenCost et demande éventuellement à l'API Kubernetes l'état du pod, du nœud et du stockage, puis envoie le tout à CostGlass dans une seule requête HTTPS.get et list on pods, nodes and persistent volume claims, used for the Health tab and to discover your nodes. C'est facultatif.Ceci est distinct de vos connexions à votre compte cloud (AWS, Azure et ainsi de suite). Vous n'avez pas besoin d'une connexion AWS ou Azure pour utiliser les coûts Kubernetes, mais si vous en avez une, CostGlass peut comparer ses chiffres Kubernetes avec ce que le cloud a réellement facturé (voir réconciliation).
Clusters pris en charge
OpenCost lui-même fonctionne sur n'importe quel cluster Kubernetes. CostGlass ne modifie que deux choses par fournisseur : un paramètre OpenCost et l'étiquette du fournisseur stockée avec les données.
| Choix sous la forme | Type de cluster | Ce que fait la commande d'installation |
|---|---|---|
| AWS (EKS) | Amazon EKS | Adds --set opencost.exporter.cloudProvider=aws. |
| Azur (AKS) | Azure AKS | Adds cloudProvider=azure. |
| Google Cloud (GKE) | GoogleGKE | Adds cloudProvider=gcp. |
| Oracle Cloud (OKE) | Oracle OKE | Aucun indicateur cloudProvider. OpenCost detects Oracle itself and prices nodes from Oracle's public price list. Aucune information d'identification Oracle n'est impliquée. |
| Océan numérique (DOKS) | DigitalOcean DOKS | Adds cloudProvider=custom. |
| Linode (LKE) | Linode LKE | Adds cloudProvider=custom. |
| Métal nu / Autre | Cluster autogéré ou tout autre cluster (option du formulaire Comptes Cloud) | Non spécialement reconnu par le serveur, il est donc traité comme des paramètres de style AWS. Voir la note ci-dessous. |
alibaba ou civo is requested, but the connect forms do not offer them. Pour un cluster qui n'est pas répertorié, utilisez l'option la plus proche et vérifiez les chiffres : les prix des nœuds pour les fournisseurs sans source de prix dans CostGlass ne sont pas ajoutés (voir Coûts Kubernetes). Le choix "Bare Metal / Autre" n'a pas été spécialement testé par nos soins.La fenêtre intégrée à l'application « Connecter OpenCost Agent » sur la page Coûts Kubernetes propose six boutons : EKS, AKS, GKE, OKE, LKE et DOKS.
- A Kubernetes cluster you can reach with
kubectl, and permission to create namespaces, ClusterRoles and CronJobs (cluster-admin is the simple way). helmversion 3 installée sur l'ordinateur à partir duquel vous exécuterez les commandes.- Outbound HTTPS from the cluster to the CostGlass API (api.costglass.com for the UK region, your own region's API address otherwise). No inbound rules are needed.
- Un cluster capable d'extraire des images : l'exportateur utilise l'image publique python:3.11-alpine et installe un package Python (requêtes) au démarrage, il a donc besoin d'un accès Internet au registre d'images et à PyPI.
- Un plan qui inclut les coûts Kubernetes (croissance ou supérieur) pour voir la page de données. The connection form itself is available on every plan, within your plan's connection limit.
Connectez un cluster, étape par étape
There are three places that open the same form: Settings → Cloud Accounts (the Kubernetes tab), the onboarding page (Kubernetes, labelledOpenCost Agent), and the Connect OpenCost Agent button on the Kubernetes Costs page. Les deux premiers partagent exactement le même écran.
Paramètres → Comptes Cloud → Kubernetes : clusters connectés en haut, et le formulaire pour en connecter un nouveau en bas.production-eks ou gke-main. Ce nom correspond à la façon dont le cluster apparaît partout dans CostGlass. Utilisez un nom court et unique ; il fait partie du jeton, donc le changer ultérieurement signifie une nouvelle connexion.costglass-agent.yaml, et courir kubectl apply -f costglass-agent.yaml.Ce qui est généré, exactement
1. Les commandes Helm
The commands install Prometheus (skip that step if you already run Prometheus at serveur-prométhée.système-prométhée) and then OpenCost into a namespace called coût ouvert. Pour un cluster EKS, ils ressemblent à ceci (le paramètre cloud change selon votre choix) :
opencost.carbonCost.enabled=true switches on OpenCost's own carbon estimates, which feed the Carbon tab.
2. Le manifeste de l'agent (costglass-agent.yaml)
One file with four things in the coût ouvert namespace:
| Objet | Nom | But |
|---|---|---|
| Secret | costglass-exporter-token | Détient INGEST_TOKEN, the private token for this cluster. |
| Compte de service | costglass-opencost-exporter | L’identité sous laquelle l’exportateur s’exécute. |
| ClusterRole et ClusterRoleBinding | costglass-opencost-exporter-health-reader | Lecture seule: get et list sur pods, nodes et persistentvolumeclaims. Facultatif. |
| CronJob | costglass-opencost-exporter | Runs every 15 minutes (*/15 * * * *), one run at a time, using the python:3.11-alpin image with a small memory and CPU limit (64 to 256 MiB, 50 to 200 millicores). |
Le CronJob effectue à chaque fois ce qui suit :
- Asks OpenCost (inside the cluster) for allocations over the last hour in 15-minute steps, grouped by namespace, controller, pod and workload kind, plus the labels
app,envetéquipe. Idle cost is included and thekube-system,istio-systemetmonitoringnamespaces are treated as shared. - Demande à OpenCost son estimation carbone pour la dernière heure. Si cela échoue (ancienne version d'OpenCost ou si le drapeau carbone n'a pas été défini), il enregistre un avertissement et continue.
- Demande à l'API Kubernetes, à l'aide de son propre ServiceAccount, les phases des pods, le nombre de redémarrages, l'état de préparation des nœuds et les demandes de stockage. Il lit également la taille de vos nœuds, votre région et la version de Kubernetes à partir de là. Si le RBAC facultatif n’a pas été appliqué, il l’ignore.
- Sends it all to CostGlass with the token in the
X-CostGlass-K8s-Tokenheader.
Vous pouvez afficher le Secret, le RBAC et le CronJob séparément sous Besoin de manifestes individuels ? Affichez le secret, le RBAC et le CronJob séparément si votre processus de modification en a besoin sous forme de fichiers distincts.
La partie RBAC est-elle facultative ?
Oui. Sans cela, les données sur les coûts arrivent quand même. Ce que vous perdez : l'onglet Santé reste vide et CostGlass ne peut pas lire votre nombre réel de nœuds, votre processeur, votre mémoire, votre région et la version de Kubernetes à partir du cluster, ces détails peuvent donc manquer. Si votre équipe de sécurité refuse l'accès en lecture à l'échelle du cluster, supprimez ClusterRole et ClusterRoleBinding du fichier avant d'appliquer. Étant donné que le manifeste tout-en-un les inclut, appliquez les éléments séparément dans ce cas.
Vérifiez que cela fonctionne
kubectl get pods -n opencost. The OpenCost pod should show 2/2 Running. S'il s'agit d'un crash-loop, Prometheus est probablement manquant (voir Dépannage).kubectl get cronjob -n opencost, then after the next quarter-hour kubectl get jobs -n opencost et kubectl logs job/<job-name> -n opencost. A good run ends with a line starting CostGlass Ingest Success.Combien de temps faut-il pour que les données apparaissent ?
L'exportateur s'exécute toutes les 15 minutes, donc la première poussée arrive dans les 15 minutes suivant l'application du manifeste. Les chiffres des coûts sont disponibles dès cette première poussée. Certaines colonnes, telles que l'utilisation réelle du processeur et de la mémoire dans l'onglet Rightsizing, nécessitent que Prometheus ait d'abord collecté suffisamment d'historique, ce qui peut prendre plus de temps. Les graphiques ont besoin de plus d’une journée de poussées pour afficher une tendance.
Le bouton-poussoir Simuler la télémétrie
The Kubernetes Costs page's connect window has a button called Simulate Telemetry Push under "Test Live Push Simulation". Il écrit échantillon données de coût pour le nom du cluster dans CostGlass afin que vous puissiez voir à quoi ressemble la page.
Supprimer un cluster
kubectl delete -f costglass-agent.yaml, and if you no longer need OpenCost, helm uninstall opencost -n opencost (and Prometheus if you installed it only for this).Disconnecting revokes the ingest token straight away (further pushes are refused), and deletes the cluster's stored allocations, its cluster record, its inventory entry and any matching connection record. L'historique des coûts quotidiens déjà écrit dans votre historique des coûts n'est pas supprimé par cette action. Notez que le texte de confirmation indique que l'historique est conservé : en pratique les tables d'allocation en direct sont supprimées.
Résolution des problèmes
| Ce que tu vois | Cause probable | Ce qu'il faut faire |
|---|---|---|
| Aucune donnée sur la page Coûts Kubernetes après 30 minutes | Le CronJob ne s'est pas exécuté ou le push a échoué. | Run kubectl get jobs -n opencost and read the latest job's logs. Look for Failed to fetch OpenCost telemetry (OpenCost not reachable) or CostGlass Ingest HTTP error (token or network problem). |
| Pod OpenCost dans CrashLoopBackOff | Prometheus est absent ou à une adresse différente. | Installez Prometheus à l'étape 1 ou pointez OpenCost vers votre propre Prometheus. Then check kubectl logs for the OpenCost pod. |
| Le journal de l'exportateur indique que INGEST_TOKEN est manquant | Le secret est manquant ou se trouve dans le mauvais espace de noms. | Vérifier kubectl get secret costglass-exporter-token -n opencost. |
| HTTP 401 ou 403 en poussant | Le jeton a été révoqué (vous avez déconnecté le cluster) ou le nom du cluster a changé. | Générez de nouvelles instructions et réappliquez le manifeste. |
| Pods bloqués en attente dans l'espace de noms opencost | Le cluster n'a pas de capacité libre ou Prometheus attend du stockage. | Run kubectl describe pod on the pending pod and read the Events. Ajoutez de la capacité de nœud ou ajustez les paramètres de stockage Prometheus. |
| L'onglet Santé indique qu'il a besoin du RBAC | Le ClusterRole et la liaison n'ont pas été appliqués. | Appliquez la partie RBAC du manifeste. Les coûts ne sont pas affectés dans les deux cas. |
| L'onglet Carbone indique qu'il faut activer les estimations de carbone | OpenCost a été installé sans le drapeau carbone (ou une ancienne version). | Re-run the Helm command, which includes opencost.carbonCost.enabled=true, then re-apply the manifest. |
| Le nouveau cluster est manquant dans la liste déroulante Cluster | Votre navigateur affiche peut-être une liste antérieure. | Rechargez la page. La liste des clusters est récupérée à chaque visite et n'est pas mise en cache par le cache du navigateur d'une heure, elle devrait donc apparaître une fois le premier push arrivé. Sinon, vérifiez les journaux de l'exportateur. |
| Les détails de la région ou du nœud sont vides | Le RBAC facultatif n’a pas été appliqué, les détails du nœud n’ont donc pas pu être lus. | Appliquez le RBAC et attendez la prochaine poussée. |