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.

Where in CostGlassSettings → Cloud Accounts → Kubernetes
PlanThe Kubernetes Costs page needs the Growth plan or above
Who can do thisAnyone who can sign in can generate the instructions; you also need cluster-admin on the cluster
Time neededAbout 15 minutes
En bref
  • 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).

1
Prometheus collecte des métriques
Prometheus est une base de données de métriques qui s'exécute au sein du cluster. OpenCost lit les chiffres du processeur et de la mémoire du conteneur. Sans Prometheus, OpenCost ne peut pas démarrer correctement.
2
OpenCost les évalue
OpenCost works out the cost of every namespace, workload and pod, using your cloud's prices. Il rapporte également des estimations de carbone lorsque l’option carbone est activée.
3
L'exportateur CostGlass pousse le résultat
A CronJob named 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.
4
CostGlass le stocke et le montre
CostGlass conserve les répartitions de coûts et un historique quotidien, et les affiche sur le Coûts Kubernetes page.
Rien d'entrant et en lecture seule
L'exportateur effectue uniquement des appels HTTPS sortants. CostGlass n'a aucun chemin réseau vers votre cluster et aucun accès en écriture à celui-ci. The one extra permission the exporter asks for is read-only: 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 formeType de clusterCe que fait la commande d'installation
AWS (EKS)Amazon EKSAdds --set opencost.exporter.cloudProvider=aws.
Azur (AKS)Azure AKSAdds cloudProvider=azure.
Google Cloud (GKE)GoogleGKEAdds cloudProvider=gcp.
Oracle Cloud (OKE)Oracle OKEAucun 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 DOKSAdds cloudProvider=custom.
Linode (LKE)Linode LKEAdds cloudProvider=custom.
Métal nu / AutreCluster 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.
Remarque
The server also recognises Alibaba Cloud (ACK) and Civo if a provider of 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.

Avant de commencer
  • A Kubernetes cluster you can reach with kubectl, and permission to create namespaces, ClusterRoles and CronJobs (cluster-admin is the simple way).
  • helm version 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.
1
Ouvrir le formulaire
Go to Settings → Cloud Accounts and choose the Kubernetes tab. Any clusters already connected are listed under Connected Clusters.
2
Nommez le cluster
Under Connect a New Cluster, type a name in Cluster Identifier, for example 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.
3
Choisissez le cloud sous-jacent
In Underlying Cloud / Infrastructure pick AWS (EKS), Azure (AKS), Google Cloud (GKE), Oracle Cloud (OKE), DigitalOcean (DOKS), Linode (LKE) or Bare Metal / Other.
4
Générer les instructions
Click Generate Install Instructions. CostGlass crée (ou réutilise) un jeton d'ingestion pour ce nom de cluster et affiche les commandes. Votre jeton se trouve dans le manifeste généré, alors traitez-le comme un mot de passe.
5
Exécutez les commandes Helm
Copy the block under 1. Install Prometheus + OpenCost via Helm and run it in a terminal that points at the right cluster. Voir la section suivante pour savoir ce qu'elle contient.
6
Appliquer le manifeste de l'agent CostGlass
Copy Copy Complete Manifest, save it as costglass-agent.yaml, et courir kubectl apply -f costglass-agent.yaml.
7
Attendez le premier coup de pouce
La page est vérifiée toutes les 15 secondes. When the cluster reports in, a message says Cluster "your-name" is reporting cost data. You can also click I've Deployed OpenCost to finish without waiting; data appears once the exporter has pushed.
Ne partagez pas le manifeste
The manifest contains this cluster's ingest token. Toute personne disposant de ce système peut envoyer des données de coûts à votre organisation sous ce nom de cluster. Gardez-le hors des référentiels publics. En cas de fuite, déconnectez le cluster (cela révoque le jeton) et reconnectez-le.

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) :

Commandes Helm (exemple EKS)
Remarque
L'étape Prometheus désactive son volume persistant, donc Prometheus perd son historique si son pod redémarre. OpenCost mesure ensuite à partir d'un nouveau départ. Pour la production, utilisez votre propre configuration Prometheus si vous avez besoin d’un historique long et durable.

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:

ObjetNomBut
Secretcostglass-exporter-tokenDétient INGEST_TOKEN, the private token for this cluster.
Compte de servicecostglass-opencost-exporterL’identité sous laquelle l’exportateur s’exécute.
ClusterRole et ClusterRoleBindingcostglass-opencost-exporter-health-readerLecture seule: get et list sur pods, nodes et persistentvolumeclaims. Facultatif.
CronJobcostglass-opencost-exporterRuns 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, env et équipe. Idle cost is included and the kube-system, istio-system et monitoring namespaces 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-Token header.

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

1
Vérifiez les dosettes
Run 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).
2
Vérifiez le CronJob
Run 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.
3
Vérifiez CostGlass
Open Kubernetes Costs. The header badge changes to OpenCost Connected and your cluster appears in the Cluster drop-down. Un cluster est considéré comme « actif » s’il a été poussé au cours des 60 dernières minutes.
La fenêtre Connect OpenCost Agent sur la page Coûts Kubernetes : nom du cluster, boutons cloud, étape Helm et étape manifeste.

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&#x27;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.

Ne l'utilisez pas sur un vrai nom de cluster
Les exemples de données ne proviennent pas de votre cluster. Utilisez-le uniquement pour prévisualiser la page et préférez un nom de cluster jetable. Si vous l'avez exécuté par erreur, déconnectez le nom de ce cluster pour supprimer les exemples de lignes, puis connectez le cluster réel.

Supprimer un cluster

1
Déconnecter dans CostGlass
On Settings → Cloud Accounts → Kubernetes, find the cluster under Connected Clusters and click Disconnect, then confirm.
2
Supprimer l'agent du cluster
Run 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&#x27;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 voisCause probableCe qu'il faut faire
Aucune donnée sur la page Coûts Kubernetes après 30 minutesLe 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 CrashLoopBackOffPrometheus 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 manquantLe 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 poussantLe 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 opencostLe 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 RBACLe 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 carboneOpenCost 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 ClusterVotre 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 videsLe 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.

Questions fréquemment posées

CostGlass a-t-il besoin d'accéder à mon cluster ou à mon compte cloud pour cela ?
Non, uniquement la poussée sortante de l’exportateur. Aucun accès entrant, aucun kubeconfig et aucune information d'identification cloud n'est nécessaire pour les données de coût Kubernetes.
Pourquoi Prométhée est-il nécessaire ?
OpenCost lit les métriques de CPU et de mémoire de Prometheus. Sans cela, OpenCost ne peut pas démarrer. Si vous exécutez déjà Prometheus à l'adresse par défaut, ignorez l'étape 1.
Puis-je connecter plusieurs clusters ?
Oui. Repeat the steps with a different Cluster Identifier for each one. Chaque cluster possède son propre jeton. Votre forfait fixe une limite sur le nombre de connexions.
Puis-je modifier le nom du cluster ultérieurement ?
Le nom est lié au jeton. Pour utiliser un autre nom, déconnectez le cluster et reconnectez-le sous le nouveau nom.
Est-ce que cela change quelque chose dans mon cluster ?
Il ajoute des objets uniquement dans l'espace de noms opencost, plus un ClusterRole et un ClusterRoleBinding en lecture seule. Cela ne modifie pas vos charges de travail.
Le coût est-il le même que celui de ma facture cloud ?
Pas exactement. Voir Coûts Kubernetes pour savoir comment fonctionnent les prix catalogue, le rapprochement et la projection des taux d'exécution.

Guides associés