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.

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
Kurz und bündig
  • 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).

1
Prometheus sammelt Metriken
Prometheus ist eine Metrikdatenbank, die innerhalb des Clusters ausgeführt wird. OpenCost liest daraus die CPU- und Speicherzahlen des Containers. Ohne Prometheus kann OpenCost nicht richtig starten.
2
OpenCost bepreist sie
OpenCost works out the cost of every namespace, workload and pod, using your cloud's prices. Es werden auch CO2-Schätzungen gemeldet, wenn die CO2-Option aktiviert ist.
3
Der CostGlass-Exporter verschiebt das Ergebnis
A CronJob named 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.
4
CostGlass speichert und zeigt es
CostGlass speichert die Kostenzuordnungen und einen täglichen Verlauf und zeigt sie auf dem an Kubernetes-Kosten Seite.
Nichts eingehend und schreibgeschützt
Der Exporter führt nur ausgehende HTTPS-Aufrufe durch. CostGlass hat keinen Netzwerkpfad zu Ihrem Cluster und keinen Schreibzugriff darauf. The one extra permission the exporter asks for is read-only: 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 FormClustertypWas der Installationsbefehl bewirkt
AWS (EKS)Amazon EKSAdds --set opencost.exporter.cloudProvider=aws.
Azure (AKS)Azure AKSAdds cloudProvider=azure.
Google Cloud (GKE)Google GKEAdds cloudProvider=gcp.
Oracle Cloud (OKE)einen Bereich aus Oracle OKEKein cloudProvider-Flag. OpenCost detects Oracle itself and prices nodes from Oracle's public price list. Es sind keine Oracle-Anmeldeinformationen erforderlich.
DigitalOcean (DOKS)DigitalOcean DOKSAdds cloudProvider=custom.
Linode (LKE)Linode LKEAdds cloudProvider=custom.
Bare Metal / SonstigesSelbstverwaltet oder ein anderer Cluster (Formularoption „Cloud-Konten“)Vom Server nicht speziell erkannt, daher werden sie als AWS-ähnliche Einstellungen behandelt. Siehe den Hinweis unten.
Hinweis
The server also recognises Alibaba Cloud (ACK) and Civo if a provider of 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.

Bevor Sie beginnen
  • 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 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.
1
Öffnen Sie das Formular
Go to Settings → Cloud Accounts and choose the Kubernetes tab. Any clusters already connected are listed under Connected Clusters.
2
Benennen Sie den Cluster
Under Connect a New Cluster, type a name in Cluster Identifier, for example 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.
3
gespeichert Wählen Sie die zugrunde liegende Cloud
In Underlying Cloud / Infrastructure pick AWS (EKS), Azure (AKS), Google Cloud (GKE), Oracle Cloud (OKE), DigitalOcean (DOKS), Linode (LKE) or Bare Metal / Other.
4
Generieren Sie die Anweisungen
Click Generate Install Instructions. CostGlass erstellt (oder verwendet) ein Aufnahme-Token für diesen Clusternamen und zeigt die Befehle an. Ihr Token befindet sich im generierten Manifest. Behandeln Sie es daher wie ein Passwort.
5
Führen Sie die Helm-Befehle
Copy the block under 1. Install Prometheus + OpenCost via Helm and run it in a terminal that points at the right cluster. Was darin enthalten ist, erfahren Sie im nächsten Abschnitt.
6
sagt Wenden Sie das CostGlass-Agent-Manifest
Copy Copy Complete Manifest, save it as costglass-agent.yaml, und laufen kubectl apply -f costglass-agent.yaml.
7
Warten Sie auf den ersten Anstoß
Die Seite wird alle 15 Sekunden überprüft. 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.
Geben Sie das Manifest nicht weiter
The manifest contains this cluster's ingest token. Jeder, der darüber verfügt, kann unter diesem Clusternamen Kostendaten an Ihre Organisation senden. Halten Sie es von öffentlichen Repositorys fern. Wenn es ein Leck gibt, trennen Sie den Cluster (dadurch wird das Token widerrufen) und verbinden Sie ihn erneut.

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

Helm-Befehle (EKS-Beispiel)
Hinweis
Der Prometheus-Schritt schaltet sein persistentes Volume aus, sodass Prometheus seinen Verlauf verliert, wenn sein Pod neu gestartet wird. OpenCost misst dann von vorne. Verwenden Sie für die Produktion Ihr eigenes Prometheus-Setup, wenn Sie eine lange, dauerhafte Historie benötigen.

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:

ObjektNameZweck
Geheimniscostglass-exporter-tokenHält INGEST_TOKEN, the private token for this cluster.
ServiceAccountcostglass-opencost-exporterDie Identität, unter der der Exporter ausgeführt wird.
ClusterRole und ClusterRoleBindingcostglass-opencost-exporter-health-readerSchreibgeschützt: get Und list am pods, nodes Und persistentvolumeclaims. Optional.
CronJobcostglass-opencost-exporterRuns 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, env Und Team. Idle cost is included and the kube-system, istio-system Und monitoring namespaces 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-Token header.

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

1
Überprüfen Sie die Pods
Run 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).
2
Überprüfen Sie den CronJob
Run 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.
3
Überprüfen Sie CostGlass
Open Kubernetes Costs. The header badge changes to OpenCost Connected and your cluster appears in the Cluster drop-down. Ein Cluster gilt als „aktiv“, wenn er innerhalb der letzten 60 Minuten gepusht hat.
Das Connect OpenCost Agent-Fenster auf der Seite „Kubernetes-Kosten“: Clustername, Cloud-Schaltflächen, der Helm-Schritt und der Manifest-Schritt.

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

Verwenden Sie es nicht für einen echten Clusternamen
Die Beispieldaten stammen nicht aus Ihrem Cluster. Verwenden Sie es nur, um eine Vorschau der Seite anzuzeigen, und bevorzugen Sie einen Wegwerf-Clusternamen. Wenn Sie es versehentlich ausgeführt haben, trennen Sie den Clusternamen, um die Beispielzeilen zu entfernen, und verbinden Sie dann den echten Cluster.

Entfernen Sie einen Cluster

1
Trennen Sie die Verbindung in CostGlass
On Settings → Cloud Accounts → Kubernetes, find the cluster under Connected Clusters and click Disconnect, then confirm.
2
Entfernen Sie den Agenten aus dem 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. 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 sehenWahrscheinliche UrsacheWas zu tun
Keine Daten auf der Seite „Kubernetes-Kosten“ nach 30 MinutenDer 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 CrashLoopBackOffPrometheus 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 fehltDas 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 vonDas 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“ festDer 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 wirdDie 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üssenOpenCost 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 leerDer optionale RBAC wurde nicht angewendet, sodass Knotendetails nicht gelesen werden konnten.Wenden Sie den RBAC an und warten Sie auf den nächsten Push.

Häufig gestellte Fragen

Benötigt CostGlass hierfür Zugriff auf mein Cluster- oder Cloud-Konto?
Nein. Nur der ausgehende Push vom Exporteur. Für Kubernetes-Kostendaten sind kein eingehender Zugriff, keine kubeconfig und keine Cloud-Anmeldeinformationen erforderlich.
Warum wird Prometheus benötigt?
steigt OpenCost liest CPU- und Speichermetriken von Prometheus. Ohne sie kann OpenCost nicht starten. Wenn Sie Prometheus bereits unter der Standardadresse ausführen, überspringen Sie Schritt 1.
Kann ich viele Cluster verbinden?
Ja. Repeat the steps with a different Cluster Identifier for each one. Jeder Cluster hat seinen eigenen Token. In Ihrem Plan ist die Anzahl der Verbindungen begrenzt.
Kann ich den Clusternamen später ändern?
Der Name ist an den Token gebunden. Um einen anderen Namen zu verwenden, trennen Sie den Cluster und verbinden Sie ihn unter dem neuen Namen erneut.
Ändert es etwas in meinem Cluster?
Es fügt nur Objekte im Opencost-Namespace hinzu, plus eine schreibgeschützte ClusterRole und ClusterRoleBinding. Ihre Arbeitslast wird dadurch nicht verändert.
Sind die Kosten die gleichen wie meine Cloud-Rechnung?
Nicht ganz. Siehe Kubernetes-Kosten erfahren Sie, wie Listenpreise, Abstimmung und Run-Rate-Prognose funktionieren.

Verwandte Anleitungen