Verbinden Sie einen Kubernetes-Cluster
Install OpenCost and the CostGlass exporter in your cluster so cost data is pushed to CostGlass every 15 minutes.
Verbinden Sie einen Kubernetes-Cluster
Installieren Sie den Open-Source-Agenten OpenCost in Ihrem Cluster und einen kleinen CostGlass-Exporter, der alle 15 Minuten Kostendaten an CostGlass sendet.
- CostGlass stellt nie eine Verbindung zu Ihrem Cluster her. Ein kleiner CronJob innerhalb des Clusters sendet Kostendaten über HTTPS an CostGlass. Eingehend wird nichts geöffnet.
- Es werden zwei Dinge installiert: OpenCost (mit Prometheus, das es benötigt) und der CostGlass-Exporter (ein Secret, ein ServiceAccount mit schreibgeschütztem Zugriff und ein CronJob).
- Die Installationsbefehle werden für Sie generiert, mit einem privaten Aufnahme-Token für diesen einen Cluster. Kopieren Sie sie, führen Sie sie aus und der Cluster erscheint von selbst.
- Die ersten Daten erscheinen normalerweise innerhalb von etwa 15 bis 30 Minuten, nachdem der CronJob ausgeführt wurde und Prometheus etwas Verlauf gesammelt hat.
- Durch das Trennen der Verbindung zu einem Cluster wird sein Token widerrufen und seine gespeicherten Live-Kostendaten gelöscht.
So funktioniert es
Kubernetes sendet Ihnen keine Rechnung. Ihre Cloud stellt Ihnen die Maschinen (Knoten) in Rechnung, auf denen der Cluster läuft, und Kubernetes teilt diese Maschinen dann zwischen vielen Anwendungen. Um zu sagen, was jedes Team oder jede Anwendung kostet, müssen Sie messen, wie viel CPU, Arbeitsspeicher und Massenspeicher jedes einzelne Team oder jede Anwendung verbraucht, und den Preis dafür festlegen. CostGlass macht dies mit OpenCost, ein Open-Source-Kostentool der CNCF (der Grundlage hinter Kubernetes).
costglass-opencost-exporter runs every 15 minutes. Es fragt OpenCost nach den Zahlen und optional die Kubernetes-API nach dem Pod-, Knoten- und Speicherzustand und sendet dann alles in einer HTTPS-Anfrage an CostGlass.get Und list on pods, nodes and persistent volume claims, used for the Health tab and to discover your nodes. Es ist optional.Dies ist unabhängig von Ihren Cloud-Kontoverbindungen (AWS, Azure und so weiter). Sie benötigen keine AWS- oder Azure-Verbindung, um Kubernetes-Kosten zu nutzen, aber wenn Sie eine haben, kann CostGlass seine Kubernetes-Zahlen mit den tatsächlichen Rechnungen der Cloud vergleichen (siehe Versöhnung).
Unterstützte Cluster
OpenCost selbst funktioniert auf jedem Kubernetes-Cluster. CostGlass ändert nur zwei Dinge pro Anbieter: eine OpenCost-Einstellung und die mit den Daten gespeicherte Anbieterbezeichnung.
| Auswahl in der Form | Clustertyp | Was der Installationsbefehl bewirkt |
|---|---|---|
| AWS (EKS) | Amazon EKS | Adds --set opencost.exporter.cloudProvider=aws. |
| Azure (AKS) | Azure AKS | Adds cloudProvider=azure. |
| Google Cloud (GKE) | Google GKE | Adds cloudProvider=gcp. |
| Oracle Cloud (OKE) | einen Bereich aus Oracle OKE | Kein cloudProvider-Flag. OpenCost detects Oracle itself and prices nodes from Oracle's public price list. Es sind keine Oracle-Anmeldeinformationen erforderlich. |
| DigitalOcean (DOKS) | DigitalOcean DOKS | Adds cloudProvider=custom. |
| Linode (LKE) | Linode LKE | Adds cloudProvider=custom. |
| Bare Metal / Sonstiges | Selbstverwaltet oder ein anderer Cluster (Formularoption „Cloud-Konten“) | Vom Server nicht speziell erkannt, daher werden sie als AWS-ähnliche Einstellungen behandelt. Siehe den Hinweis unten. |
an Alibaba oder civo is requested, but the connect forms do not offer them. Für einen Cluster, der nicht aufgeführt ist, verwenden Sie die nächstgelegene Option und überprüfen Sie die Zahlen: Knotenpreise für Anbieter ohne Preisquelle in CostGlass werden nicht hinzugefügt (siehe Kubernetes-Kosten). Die Auswahl „Bare Metal / Other“ wurde von uns nicht speziell getestet.Das In-App-Fenster „Connect OpenCost Agent“ auf der Kubernetes-Kostenseite bietet sechs Schaltflächen: EKS, AKS, GKE, OKE, LKE und 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 ist auf dem Computer installiert, von dem aus Sie die Befehle ausführen möchten.- 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.
- Ein Cluster, der Bilder abrufen kann: Der Exporter verwendet das öffentliche python:3.11-alpine-Image und installiert beim Start ein Python-Paket (Anfragen), sodass er Internetzugriff auf die Image-Registrierung und auf PyPI benötigt.
- Ein Plan, der Kubernetes-Kosten (Wachstum oder höher) enthält, um die Datenseite anzuzeigen. The connection form itself is available on every plan, within your plan's connection limit.
Verbinden Sie Schritt für Schritt einen Cluster
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. Die ersten beiden teilen sich genau den gleichen Bildschirm.
Einstellungen → Cloud-Konten → Kubernetes: oben verbundene Cluster und unten das Formular zum Verbinden eines neuen.production-eks oder gke-main. Unter diesem Namen erscheint der Cluster überall in CostGlass. Verwenden Sie einen kurzen, eindeutigen Namen. Es ist Teil des Tokens, eine spätere Änderung bedeutet also eine neue Verbindung.costglass-agent.yaml, und laufen kubectl apply -f costglass-agent.yaml.Was genau generiert wird
1. Die Helm-Befehle
The commands install Prometheus (skip that step if you already run Prometheus at prometheus-server.prometheus-system) and then OpenCost into a namespace called opencost. Für einen EKS-Cluster sehen sie so aus (die Cloud-Einstellung ändert sich je nach Ihrer Wahl):
opencost.carbonCost.enabled=true switches on OpenCost's own carbon estimates, which feed the Carbon tab.
2. Das Agentenmanifest (costglass-agent.yaml)
One file with four things in the opencost namespace:
| Objekt | Name | Zweck |
|---|---|---|
| Geheimnis | costglass-exporter-token | Hält INGEST_TOKEN, the private token for this cluster. |
| ServiceAccount | costglass-opencost-exporter | Die Identität, unter der der Exporter ausgeführt wird. |
| ClusterRole und ClusterRoleBinding | costglass-opencost-exporter-health-reader | Schreibgeschützt: get Und list am pods, nodes Und persistentvolumeclaims. Optional. |
| CronJob | costglass-opencost-exporter | Runs every 15 minutes (*/15 * * * *), one run at a time, using the python:3.11-alpine image with a small memory and CPU limit (64 to 256 MiB, 50 to 200 millicores). |
Der CronJob führt jedes Mal Folgendes aus:
- 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,envUndTeam. Idle cost is included and thekube-system,istio-systemUndmonitoringnamespaces are treated as shared. - Fragt OpenCost nach seiner CO2-Schätzung für die letzte Stunde. Wenn dies fehlschlägt (älteres OpenCost oder das Carbon-Flag wurde nicht gesetzt), protokolliert es eine Warnung und fährt fort.
- Fragt die Kubernetes-API mithilfe ihres eigenen ServiceAccounts nach Pod-Phasen, Neustartzahlen, Knotenbereitschaft und Speicheransprüchen. Von dort werden auch Ihre Knotengrößen, Ihre Region und Ihre Kubernetes-Version gelesen. Wenn das optionale RBAC nicht angewendet wurde, wird dies übersprungen.
- Sends it all to CostGlass with the token in the
X-CostGlass-K8s-Tokenheader.
Sie können Secret, RBAC und CronJob separat unter „Benötigen Sie individuelle Manifeste?“ anzeigen. Sehen Sie sich Secret, RBAC und CronJob separat an, wenn Ihr Änderungsprozess sie als separate Dateien benötigt.
Ist der RBAC-Teil optional?
Ja. Ohne sie kommen die Kostendaten trotzdem an. Was Sie verlieren: Die Registerkarte „Gesundheit“ bleibt leer und CostGlass kann Ihre tatsächliche Knotenanzahl, CPU, Arbeitsspeicher, Region und Kubernetes-Version nicht aus dem Cluster lesen, sodass diese Details möglicherweise fehlen. Wenn Ihr Sicherheitsteam den Cluster-weiten Lesezugriff ablehnt, entfernen Sie ClusterRole und ClusterRoleBinding vor der Anwendung aus der Datei. Da das All-in-One-Manifest sie enthält, wenden Sie die Teile in diesem Fall separat an.
Überprüfen Sie, ob es funktioniert
kubectl get pods -n opencost. The OpenCost pod should show 2/2 Running. Wenn es sich um eine Absturzschleife handelt, fehlt Prometheus wahrscheinlich (siehe Fehlerbehebung).kubectl get cronjob -n opencost, then after the next quarter-hour kubectl get jobs -n opencost Und kubectl logs job/<job-name> -n opencost. A good run ends with a line starting CostGlass Ingest Success.Wie lange dauert es, bis Daten angezeigt werden?
Der Exporter wird alle 15 Minuten ausgeführt, sodass der erste Push innerhalb von 15 Minuten nach Anwendung des Manifests eintrifft. Kostenzahlen sind ab diesem ersten Push verfügbar. Für einige Spalten, wie z. B. die tatsächliche CPU- und Speicherauslastung auf der Registerkarte „Größenanpassung“, muss Prometheus zunächst genügend Verlauf gesammelt haben, was länger dauern kann. Diagramme benötigen mehr als einen Tag Push, um einen Trend anzuzeigen.
Die Schaltfläche „Telemetrie simulieren“
The Kubernetes Costs page's connect window has a button called Simulate Telemetry Push under "Test Live Push Simulation". Es schreibt Probe Kostendaten für den Clusternamen in CostGlass, damit Sie sehen können, wie die Seite aussieht.
Entfernen Sie einen 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. Der bereits in Ihren Kostenverlauf geschriebene tägliche Kostenverlauf wird durch diese Aktion nicht entfernt. Beachten Sie, dass im Bestätigungstext steht, dass der Verlauf gespeichert wird: In der Praxis werden die Live-Zuteilungstabellen gelöscht.
Fehlerbehebung
| Was Sie sehen | Wahrscheinliche Ursache | Was zu tun |
|---|---|---|
| Keine Daten auf der Seite „Kubernetes-Kosten“ nach 30 Minuten | Der CronJob wurde nicht ausgeführt oder der Push ist fehlgeschlagen. | 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). |
| OpenCost-Pod in CrashLoopBackOff | Prometheus fehlt oder ist an einer anderen Adresse. | Installieren Sie Prometheus mit Schritt 1 oder verweisen Sie OpenCost auf Ihr eigenes Prometheus. Then check kubectl logs for the OpenCost pod. |
| Das Exportprotokoll besagt, dass INGEST_TOKEN fehlt | Das Geheimnis fehlt oder befindet sich im falschen Namespace. | Überprüfen Sie kubectl get secret costglass-exporter-token -n opencost. |
| HTTP 401 oder 403 beim Drücken von | Das Token wurde widerrufen (Sie haben die Verbindung zum Cluster getrennt) oder der Clustername wurde geändert. | Generieren Sie neue Anweisungen und wenden Sie das Manifest erneut an. |
| Pods stecken im OpenCost-Namespace im Status „Ausstehend“ fest | Der Cluster verfügt über keine freie Kapazität oder Prometheus wartet auf Speicher. | Run kubectl describe pod on the pending pod and read the Events. Fügen Sie Knotenkapazität hinzu oder passen Sie die Prometheus-Speichereinstellungen an. |
| Auf der Registerkarte „Gesundheit“ steht, dass RBAC benötigt wird | Die ClusterRole und die Bindung wurden nicht angewendet. | Wenden Sie den RBAC-Teil des Manifests an. Die Kosten bleiben davon in beiden Fällen unberührt. |
| Auf der Registerkarte „Kohlenstoff“ heißt es, dass Kohlenstoffschätzungen aktiviert sein müssen | OpenCost wurde ohne die Carbon-Flagge (oder eine ältere Version) installiert. | Re-run the Helm command, which includes opencost.carbonCost.enabled=true, then re-apply the manifest. |
| Der neue Cluster fehlt im Dropdown-Menü „Cluster“. | Ihr Browser zeigt möglicherweise eine frühere Liste an. | Laden Sie die Seite neu. Die Clusterliste wird bei jedem Besuch neu abgerufen und nicht im einstündigen Browser-Cache zwischengespeichert. Sie sollte daher erscheinen, sobald der erste Push eingetroffen ist. Wenn nicht, überprüfen Sie die Exporter-Protokolle. |
| Regions- oder Knotendetails sind leer | Der optionale RBAC wurde nicht angewendet, sodass Knotendetails nicht gelesen werden konnten. | Wenden Sie den RBAC an und warten Sie auf den nächsten Push. |