
Derzeit verlagern immer mehr Unternehmen ihre Infrastruktur von Eisenservern und ihren eigenen virtuellen Maschinen in die Cloud. Eine solche Lösung ist leicht zu erklären: Die Hardware muss nicht gepflegt werden, der Cluster kann auf viele verschiedene Arten konfiguriert werden ... und vor allem machen es die verfügbaren Technologien (wie Kubernetes) einfach, die Rechenleistung abhängig von der Last zu skalieren.
Der finanzielle Aspekt ist immer wichtig. Das Tool, das in diesem Artikel behandelt wird, soll dazu beitragen, das Budget bei Verwendung der Cloud-Infrastruktur mit Kubernetes zu reduzieren.
Einführung
Kubecost ist ein in Kalifornien ansässiges Startup von Google, das eine Lösung zur Berechnung der Infrastrukturkosten in Cloud-Diensten (innerhalb des Kubernetes-Clusters + gemeinsam genutzte Ressourcen), zur Ermittlung von Engpässen in den Clustereinstellungen und zum Senden entsprechender Benachrichtigungen an Slack erstellt.
Wir haben Kunden mit Kubernetes sowohl in den bekannten AWS- und GCP-Clouds als auch in der selteneren Azure Linux-Community - im Allgemeinen auf allen von Kubecost unterstützten Plattformen. Bei einigen von ihnen berücksichtigen wir die Kosten für Intra-Cluster-Dienste selbst (unter Verwendung einer ähnlichen Technik wie bei Kubecost), überwachen die Infrastrukturkosten und versuchen, sie zu optimieren. Daher ist es logisch, dass wir an der Möglichkeit interessiert waren, solche Aufgaben zu automatisieren.
Der Quellcode des Kubecost-Hauptmoduls ist unter der Open Source-Lizenz (Apache License 2.0) geöffnet. Es kann frei verwendet werden und die verfügbaren Funktionen sollten für kleine Projekte ausreichen. Geschäft ist Geschäft: Der Rest des Produkts ist geschlossen, es kann für
bezahlte Abonnements verwendet werden , was auch kommerziellen Support impliziert. Darüber hinaus bieten die Autoren eine kostenlose Lizenz für kleine Cluster (1 Cluster mit
10 Knoten - während des Schreibens dieses Artikels wurde diese Grenze auf 20 Knoten erweitert) oder eine Testphase mit vollen Funktionen für 1 Monat an.
Wie es funktioniert
Der Großteil von Kubecost ist also eine in Go geschriebene Kostenmodellanwendung. Das Steuerdiagramm, das das gesamte System beschreibt, wird als
Kostenanalysator bezeichnet und ist im Wesentlichen eine Kostenmodellbaugruppe mit Prometheus, Grafana und mehreren Dashboards.
Im Allgemeinen verfügt das Kostenmodell über eine eigene Weboberfläche, auf der Diagramme und detaillierte Kostenstatistiken in tabellarischer Form sowie natürlich Tipps zur Kostenoptimierung angezeigt werden. Die in Grafana vorgestellten Dashboards sind ein früheres Stadium in der Entwicklung von Kubecost und enthalten weitgehend dieselben Daten wie das Kostenmodell. Sie werden durch die üblichen Statistiken zum CPU- / Speicher- / Netzwerk- / Speicherplatzverbrauch im Cluster und seinen Komponenten ergänzt.
Wie funktioniert Kubecost?
- Das Kostenmodell über die Cloud-Provider-API erhält Servicepreise.
- Ferner werden abhängig vom Eisentyp des Knotens und der Region die Kosten der Knoten berücksichtigt.
- Basierend auf den Kosten für die Arbeit der Knoten erhält jeder endgültige Pod die Kosten pro Stunde für die Verwendung des Prozessors, die ein Gigabyte Speicher und die Kosten für eine Stunde für die Speicherung eines Gigabytes Daten ausgeben - abhängig von dem Knoten, auf dem er gearbeitet hat, oder der Speicherklasse.
- Basierend auf den Arbeitskosten einzelner Pods wird die Zahlung für Namespaces, Services, Deployments und StatefulSets berücksichtigt.
- Zur Berechnung der Statistik werden die von kube-state -metrics und node-exporter bereitgestellten Metriken verwendet.
Es ist wichtig zu beachten, dass Kubecost standardmäßig
nur die in Kubernetes verfügbaren Ressourcen berücksichtigt . Externe Datenbanken, GitLab-Server, S3-Speicher und andere Dienste, die sich nicht im Cluster befinden (wenn auch in derselben Cloud), sind für diesen nicht sichtbar. Obwohl Sie für GCP und AWS die Schlüssel Ihrer Dienstkonten hinzufügen und alles zusammen berechnen können.
Installation
Damit Kubecost funktioniert, benötigen Sie:
- Kubernetes Version 1.8 und höher;
- Kube-State-Metriken;
- Prometheus;
- Knotenexporteur.
Es kam vor, dass in unseren Clustern alle diese Bedingungen im Voraus erfüllt waren, sodass es sich als ausreichend herausstellte, nur den richtigen Endpunkt für den Zugriff auf Prometheus anzugeben. Trotzdem enthält die offizielle Kubekost-Helmkarte alles, was Sie brauchen, um auf einem nackten Cluster zu starten.
Es gibt verschiedene Möglichkeiten, Kubecost zu installieren:
- Die Standardinstallationsmethode, die in den Anweisungen auf der Entwickler-Website beschrieben ist. Sie müssen das Kostenanalysator-Repository zu Helm hinzufügen und dann das Diagramm installieren . Es bleibt nur, den Port weiterzuleiten und die Einstellungen manuell (über kubectl) und / oder über die Webschnittstelle des Kostenmodells in den gewünschten Zustand zu versetzen.
Wir haben diese Methode nicht einmal ausprobiert, da wir keine vorgefertigten Konfigurationen von Drittanbietern verwenden. Es scheint jedoch eine gute Option zu sein, "versuchen Sie es einfach selbst". Wenn Sie bereits einige Komponenten des Systems installiert haben oder eine genauere Optimierung wünschen, ist es besser, den zweiten Weg in Betracht zu ziehen.
- Verwenden Sie im Wesentlichen dasselbe Diagramm , konfigurieren und installieren Sie es jedoch unabhängig voneinander auf bequeme Weise.
Wie bereits erwähnt, enthält dieses Diagramm neben Kubecost selbst die Diagramme Grafana und Prometheus, die auch nach Ihren Wünschen angepasst werden können.
Mit dem values.yaml
Diagramm verfügbaren Diagramm values.yaml
für den Kostenanalysator können Sie values.yaml
konfigurieren:
- Liste der zu implementierenden Kostenanalysatorkomponenten;
- Ihr Endpunkt für Prometheus (falls Sie bereits einen haben);
- Domänen und andere Eingangseinstellungen für Kostenmodell und Grafana;
- Anmerkungen für Pods;
- die Notwendigkeit einer dauerhaften Lagerung und deren Größe.
Eine vollständige Liste der verfügbaren Konfigurationsoptionen mit einer Beschreibung finden Sie in der Dokumentation .
Da kubecost in der Basisversion den Zugriff nicht einschränken kann, müssen Sie die Basisauthentifizierung für das Webpanel sofort konfigurieren.
- Installieren Sie nur den Kern des Systems - Kostenmodell. Dazu muss Prometheus im Cluster installiert sein und den entsprechenden Wert seiner Adresse in der Variablen
prometheusEndpoint
für Helm angeben. Wenden Sie danach die YAML-Konfigurationen im Cluster an.
Auch hier müssen Sie Ingress mit basic-auth manuell hinzufügen. Und schließlich müssen Sie einen Abschnitt hinzufügen, um Kostenmodellmetriken in extraScrapeConfigs
in der Prometheus-Konfiguration zu erfassen:
- 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
Was bekommen wir?
Bei einer vollständigen Installation verfügen wir über das Webpanel Kubecost und Grafana mit einer Reihe von Dashboards.
Die auf dem Hauptbildschirm angezeigten
Gesamtkosten zeigen tatsächlich die geschätzten Kosten der Ressourcen für den Monat. Dies ist der
prognostizierte Preis, der die Kosten für die Nutzung des Clusters (pro Monat) auf dem aktuellen Niveau des Ressourcenverbrauchs anzeigt.
Diese Metrik dient eher der Kostenanalyse und -optimierung. Es ist nicht sehr bequem, die Gesamtkosten für den abstrakten Juli in Kubecost zu sehen: Sie müssen
dafür zur Abrechnung gehen . Sie können jedoch die Kosten nach Namespaces, Labels und Pods für 1/2/7/30/90 Tage aufschlüsseln, die Ihnen die Abrechnung niemals zeigen wird.

Apropos
Etiketten . Sie sollten sofort in die Einstellungen gehen und die Namen der Beschriftungen festlegen, die als zusätzliche Kategorien für die Gruppierung von Kosten verwendet werden:

Sie können beliebige Etiketten daran aufhängen. Dies ist praktisch, wenn Sie bereits über ein eigenes Etikettiersystem verfügen.
Dort können Sie auch die Endpunkt-API-Adresse ändern, mit der das Kostenmodell eine Verbindung herstellt, die Rabattgröße in GCP konfigurieren und Ihre eigenen Preise für Ressourcen und Währungen festlegen, um diese zu messen (aus irgendeinem Grund wirkt sich die Funktion nicht auf die Gesamtkosten aus).
Kubecost kann verschiedene
Probleme im Cluster anzeigen (und bei Gefahr sogar alarmieren). Leider ist die Option nicht konfigurierbar. Wenn Sie über Entwicklerumgebungen verfügen und diese verwendet werden, können Sie Folgendes ständig beobachten:

Ein wichtiges Werkzeug ist das
Einsparen von Clustern . Es misst die Aktivität von Pods (Verbrauch von Ressourcen, einschließlich Netzwerk) und berücksichtigt auch, wie viel Geld und was gespart werden kann.
Es mag scheinen, dass Optimierungstipps ziemlich offensichtlich sind, aber die Erfahrung zeigt, dass es noch etwas zu sehen gibt. Insbesondere wird die Netzwerkaktivität von Pods überwacht (Kubecost bietet an, auf inaktive zu achten), der angeforderte und der tatsächliche Speicher- und CPU-Verbrauch sowie die von den Clusterknoten verwendete CPU (Angebote, mehrere Knoten zu einem zusammenzufassen), die Festplattenlast und ein paar Dutzend verglichen Parameter.
Wie bei jedem Optimierungsproblem muss die Ressourcenoptimierung basierend auf Kubecost-Daten
mit Vorsicht behandelt werden . Zum Beispiel schlägt Cluster Savings vor, Knoten zu löschen und zu behaupten, dass dies sicher ist, berücksichtigt jedoch nicht das Vorhandensein von Knotenselektoren und die Beeinträchtigung von Pods, die auf ihnen bereitgestellt werden und auf anderen Knoten nicht vorhanden sind. Wie auch immer, selbst die Autoren des Produkts in ihrem
jüngsten Artikel (übrigens kann es für diejenigen, die sich für das Thema des Projekts interessieren, sehr nützlich sein) empfehlen, sich nicht direkt auf die Kostenoptimierung einzulassen, sondern das Problem nachdenklich anzugehen.
Zusammenfassung
Nachdem wir kubecost einen Monat lang für einige Projekte verwendet haben, können wir daraus schließen, dass dies ein interessantes (und sogar leicht zu erlernendes und zu installierendes) Tool zur Analyse und Optimierung der Kosten von Cloud-Anbietern ist, die für Kubernetes-Cluster verwendet werden. Die Berechnungen sind sehr genau: In unseren Experimenten stimmten sie mit den tatsächlichen Anforderungen der Anbieter überein.
Nicht ohne Nachteile: Es gibt unkritische Fehler, die Funktionalität an einigen Stellen deckt nicht die spezifischen Anforderungen einiger Projekte ab. Wenn Sie jedoch schnell verstehen müssen, wohin das Geld fließt und was Sie „kürzen“ können, um die Rechnung für Cloud-Dienste stetig um 5 bis 30% zu senken (dies ist in unserem Fall der Fall), ist dies eine großartige Option.
PS
Lesen Sie auch in unserem Blog: