Kubecost-Rezension zum Geldsparen bei Kubernetes in den Clouds

Kubecost-Rezension zum Geldsparen bei Kubernetes in den Clouds

Derzeit verlagern immer mehr Unternehmen ihre Infrastruktur von Hardware-Servern und eigenen virtuellen Maschinen in die Cloud. Diese Lösung ist einfach zu erklären: Man muss sich keine Gedanken über die Hardware machen, der Cluster lässt sich auf viele verschiedene Arten einfach konfigurieren ... und vor allem ermöglichen bestehende Technologien (wie Kubernetes) eine einfache Skalierung der Rechenleistung je nach Last .

Der finanzielle Aspekt ist immer wichtig. Das in diesem Artikel besprochene Tool soll dazu beitragen, Budgets bei der Nutzung von Cloud-Infrastruktur mit Kubernetes zu reduzieren.

Einführung

Kubekosten ist ein kalifornisches Startup von Google, das eine Lösung zur Berechnung von Infrastrukturkosten in Cloud-Diensten (innerhalb eines Kubernetes-Clusters + gemeinsam genutzten Ressourcen) entwickelt, nach Engpässen in Cluster-Einstellungen sucht und entsprechende Benachrichtigungen an Slack sendet.

Wir haben Kunden mit Kubernetes sowohl in den bekannten AWS- und GCP-Clouds als auch, seltener für die Linux-Community, Azure – im Allgemeinen auf allen von Kubecost unterstützten Plattformen. Für einige von ihnen berechnen wir die Kosten für Intra-Cluster-Dienste selbst (mit einer ähnlichen Methode wie Kubecost), überwachen außerdem die Infrastrukturkosten und versuchen, diese 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 den Bedingungen der Open-Source-Lizenz (Apache-Lizenz 2.0) offen. Die Nutzung ist frei und die verfügbaren Funktionen sollten für kleine Projekte ausreichen. Geschäft ist jedoch Geschäft: Der Rest des Produkts ist geschlossen, es kann von genutzt werden kostenpflichtige Abonnements, die auch kommerzielle Unterstützung implizieren. 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 vollem Funktionsumfang für 1 Monat an.

Wie das alles funktioniert

Der Hauptteil von Kubecost ist also die Anwendung Kostenmodell, geschrieben in Go. Ein Helm-Chart, das das gesamte System beschreibt, wird aufgerufen Kostenanalysator und im Kern handelt es sich um eine Baugruppe aus einem Kostenmodell mit Prometheus, Grafana und mehreren Dashboards.

Generell verfügt cost-model über ein eigenes Webinterface, das neben grafischen Darstellungen und detaillierten Statistiken zu den Kosten in tabellarischer Form natürlich auch Tipps zur Kostenoptimierung gibt. Die in Grafana präsentierten Dashboards sind ein früheres Stadium in der Entwicklung von Kubecost und enthalten viele der gleichen Daten wie das Kostenmodell, ergänzt durch die üblichen Statistiken zum Verbrauch von CPU/Speicher/Netzwerk/Festplattenplatz im Cluster und seinen Komponenten.

Wie funktioniert Kubecost?

  • Cost-Model erhält Preise für Dienste über die API von Cloud-Anbietern.
  • Darüber hinaus werden je nach Eisentyp des Knotens und der Region die Kosten pro Knoten berechnet.
  • Basierend auf den Kosten für den Betrieb von Knoten entstehen für jeden Leaf-Pod Kosten pro Stunde CPU-Nutzung, pro Gigabyte verbrauchtem Speicher und pro Stunde pro Gigabyte gespeicherter Daten – abhängig von dem Knoten, auf dem er ausgeführt wurde, oder der Speicherklasse.
  • Basierend auf den Kosten für den Betrieb einzelner Pods wird die Bezahlung für Namespaces, Services, Deployments und StatefulSets berechnet.
  • Statistiken werden anhand von Metriken berechnet, die von kube-state-metrics und node-exporter bereitgestellt werden.

Es ist wichtig, Kubecost zu berücksichtigen Zählt standardmäßig nur die in Kubernetes verfügbaren Ressourcen. Externe Datenbanken, GitLab-Server, S3-Speicher und andere Dienste, die sich nicht im Cluster befinden (auch wenn sie sich in derselben Cloud befinden), sind für ihn nicht sichtbar. Für GCP und AWS können Sie jedoch die Schlüssel Ihrer Dienstkonten hinzufügen und alles zusammen berechnen.

Einstellung

Kubecost erfordert:

  • Kubernetes Version 1.8 und höher;
  • kube-state-metrics;
  • Prometheus;
  • Knoten-Exporteur.

Zufälligerweise waren in unseren Clustern alle diese Bedingungen im Voraus erfüllt, sodass es ausreichte, nur den richtigen Endpunkt für den Zugriff auf Prometheus anzugeben. Das offizielle Kubecost-Helm-Diagramm enthält jedoch alles, was Sie für die Ausführung auf einem Bare-Cluster benötigen.

Es gibt mehrere Möglichkeiten, Kubecost zu installieren:

  1. Standardinstallationsmethode beschrieben in Anleitung auf der Website des Entwicklers. Erforderlich Fügen Sie das Cost-Analyzer-Repository zu Helm hinzu und installieren Sie dann das Diagramm. Sie müssen nur noch Ihren Port weiterleiten und die Einstellungen manuell (über kubectl) und/oder über die Cost-Model-Weboberfläche auf den gewünschten Status anpassen.

    Wir haben diese Methode noch nicht einmal ausprobiert, da wir keine vorgefertigten Konfigurationen von Drittanbietern verwenden, aber es scheint eine gute Option zu sein, „es einfach selbst auszuprobieren“. Wenn Sie einige der Systemkomponenten bereits installiert haben oder eine weitere Feinabstimmung wünschen, ist es besser, den zweiten Weg in Betracht zu ziehen.

  2. Im Wesentlichen verwenden das gleiche Diagramm, aber konfigurieren und installieren Sie es selbst auf jede bequeme Weise.

    Wie bereits erwähnt, enthält dieses Diagramm neben dem Kubecost selbst Grafana- und Prometheus-Diagramme, die auch nach Belieben angepasst werden können.

    Verfügbar in der Tabelle values.yaml Für den Kostenanalysator können Sie Folgendes konfigurieren:

    • eine Liste der Kostenanalysekomponenten, die bereitgestellt werden müssen;
    • 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, permanenten Speicher zu verwenden, und dessen Größe.

    Eine vollständige Liste der verfügbaren Konfigurationsoptionen mit Beschreibungen finden Sie unter Dokumentation.

    Da kubecost in seiner Basisversion den Zugriff nicht einschränken kann, müssen Sie sofort Basic-Auth für das Webpanel konfigurieren.

  3. Installieren nur der Systemkern - Kostenmodell. Dazu müssen Sie Prometheus im Cluster installiert haben und den entsprechenden Wert seiner Adresse in der Variablen angeben prometheusEndpoint für Helm. Danach bewerben Sie sich Satz von YAML-Konfigurationen im Cluster.

    Auch hier müssen Sie Ingress manuell mit Basic-Auth hinzufügen. Schließlich müssen Sie einen Abschnitt zum Sammeln von Kostenmodellmetriken hinzufügen extraScrapeConfigs in der Prometheus-Konfiguration:

    - 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 Kubecost- und Grafana-Webpanel mit einer Reihe von Dashboards.

Gesamtkosten, die auf dem Hauptbildschirm angezeigt wird, zeigt tatsächlich die geschätzten Ressourcenkosten für den Monat an. Das vorhersagbar Preis, der die Kosten für die Nutzung des Clusters (pro Monat) beim aktuellen Ressourcenverbrauch widerspiegelt.

Diese Kennzahl dient eher dazu, Ausgaben zu analysieren und zu optimieren. Es ist nicht sehr praktisch, die Gesamtkosten für den abstrakten Juli in Kubecost anzuzeigen: Sie müssen dies tun Gehen Sie zur Abrechnung. Sie können jedoch die Kosten aufgeschlüsselt nach Namespaces, Labels und Pods für 1/2/7/30/90 Tage sehen, die in der Abrechnung jedoch nie angezeigt werden.

Kubecost-Rezension zum Geldsparen bei Kubernetes in den Clouds

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

Kubecost-Rezension zum Geldsparen bei Kubernetes in den Clouds

Sie können beliebige Etiketten daran aufhängen – praktisch, wenn Sie bereits über ein eigenes Beschriftungssystem verfügen.

Außerdem können Sie dort die Adresse des API-Endpunkts ändern, mit dem das Kostenmodell eine Verbindung herstellt, die Rabattgröße in GCP anpassen und Ihre eigenen Preise für Ressourcen und Währung für deren Messung festlegen (aus irgendeinem Grund hat die Funktion keinen Einfluss auf die Gesamtkosten).

Kubecost kann verschiedene anzeigen Probleme im Cluster (und bei Gefahr sogar alarmieren). Leider ist die Option nicht konfigurierbar. Wenn Sie daher Umgebungen für Entwickler haben und diese verwenden, werden Sie ständig etwas wie Folgendes sehen:

Kubecost-Rezension zum Geldsparen bei Kubernetes in den Clouds

Ein wichtiges Werkzeug - Cluster-Einsparungen. Es misst die Aktivität von Pods (Verbrauch von Ressourcen, einschließlich Netzwerkressourcen) und berechnet außerdem, wie viel Geld und was Sie sparen können.

Es mag den Anschein haben, dass Optimierungstipps ziemlich offensichtlich sind, aber die Erfahrung zeigt, dass es dennoch etwas zu beachten gibt. Insbesondere wird die Netzwerkaktivität von Pods überwacht (Kubecost empfiehlt, auf inaktive Pods zu achten), der angeforderte und tatsächliche Speicher- und CPU-Verbrauch verglichen sowie die von Cluster-Knoten (schlägt vor, mehrere Knoten zu einem zusammenzufassen) und Festplatte genutzte CPU Last und ein paar Dutzend weitere Parameter.

Wie bei jedem Optimierungsproblem erfordert die Optimierung von Ressourcen basierend auf Kubecost-Daten Folgendes: vorsichtig behandeln. Cluster Savings schlägt beispielsweise das Löschen von Knoten vor und behauptet, dies sei sicher, berücksichtigt jedoch nicht das Vorhandensein von Knotenselektoren und Taints in den darauf bereitgestellten Pods, die auf anderen Knoten nicht verfügbar sind. Und im Allgemeinen sogar die Autoren des Produkts in ihrem neuer Artikel (Übrigens kann es für diejenigen, die sich für das Thema des Projekts interessieren, sehr nützlich sein.) Es wird empfohlen, sich nicht kopfüber auf die Kostenoptimierung einzulassen, sondern das Thema mit Bedacht anzugehen.

Ergebnisse

Nachdem wir kubecost einen Monat lang in einigen Projekten verwendet haben, können wir zu dem Schluss kommen, dass es sich um ein interessantes (und außerdem leicht zu erlernendes und zu installierendes) Tool zur Analyse und Optimierung der Kosten für die Dienste von Cloud-Anbietern handelt, die für Kubernetes-Cluster verwendet werden. Die Berechnungen erweisen sich als sehr genau: In unseren Experimenten stimmten sie mit dem tatsächlichen Bedarf der Anbieter überein.

Es gibt auch einige Nachteile: Es gibt unkritische Fehler und an manchen Stellen deckt die Funktionalität nicht die spezifischen Anforderungen einiger Projekte ab. Wenn Sie jedoch schnell verstehen möchten, wohin das Geld fließt und was „gekürzt“ werden kann, um die Rechnung für Cloud-Dienste kontinuierlich um 5–30 % zu senken (was in unserem Fall der Fall war), ist dies eine großartige Option .

PS

Lesen Sie auch auf unserem Blog:

Source: habr.com

Kommentar hinzufügen