Wir stellen vor: Consul Template

Heute veröffentlichen wir Consul Template, eine eigenständige Anwendung, die vollgepackt ist mit erstaunlichen neuen Funktionen.

Consul Template fragt eine Consul-Instanz ab und aktualisiert eine beliebige Anzahl von angegebenen Vorlagen im Dateisystem. Als zusätzlichen Bonus kann Consul Template beliebige Befehle ausführen, wenn ein Template-Update abgeschlossen ist.

„Demo

„Use Cases

Consul Template kann Service-Einträge, Schlüssel und Schlüsselwerte in Consul abfragen. Die leistungsstarke Abstraktions- und Vorlagenabfragesprache macht Consul Template perfekt für die Erstellung dynamischer Konfigurationen wie:

„Apache/Nginx Proxy Balancer

Es ist nicht ungewöhnlich, dass mehrere Anwendungsserver hinter einer einzigen, öffentlich zugänglichen Proxy-Instanz stehen. Diese Konfiguration sieht in der Regel so aus:

<proxy balancer:="" frontend="">BalanceMember 1.2.3.4:80 BalanceMember 5.6.7.8:80</proxy>

Aber das Hinzufügen und Entfernen eines Knotens aus dem Load Balancer ist oft ein mühsamer, zeitraubender und langwieriger Prozess. Schlimmer noch, wenn ein Frontend-Knoten „ungesund“ wird, muss ein Operator ihn manuell aus dem Load Balancer entfernen. Consul Template macht diesen gesamten Prozess trivial:

<Proxy balancer://frontend>{{range service "app.frontend"}} BalanceMember {{.Address}}{{end}}</Proxy>

Hier ist ein ähnliches Beispiel für eine Nginx-Konfiguration:

upstream frontend { {{range service "app.frontend"}} server {{.Address}};{{end}}}

Wenn Knoten zu Consul hinzugefügt und entfernt werden, werden sie automatisch zur Load Balancer-Konfiguration hinzugefügt und entfernt. Da die service-Methode von Consul Template nur gesunde Knoten abfragt, werden auch ungesunde Knoten aus dem Load Balancer entfernt, sobald sie als ausgefallen gemeldet werden. Dadurch werden sowohl Ausfallzeiten als auch Bedienereingriffe minimiert, so dass Sie sich auf das Wesentliche konzentrieren können!

„HAProxy Backends

HAProxy ist eine sehr verbreitete, hochleistungsfähige Lastausgleichssoftware. Eine typische HAProxy-Konfigurationsdatei sieht folgendermaßen aus:

backend frontendbalance roundrobinserver web1 web1.yourdomain.com:80 checkserver web2 web2.yourdomain.com:80 check

Allerdings ist das Hinzufügen und Entfernen von HAProxy-Knoten, genau wie beim Apache/Nginx Proxy Balancer, eine schmerzhafte und oft beängstigende Erfahrung. Consul Template nimmt HAProxy den Schrecken:

backend frontendbalance roundrobin{{range "app.frontend"}}service {{.ID}} {{.Address}}:{{.Port}}{{end}}

Sie werden feststellen, dass das Attribut check entfernt worden ist. Da unsere Gesundheitsprüfungen in Consul definiert sind und Consul Template nur gesunde Knoten aus einer Serviceabfrage zurückgibt, können wir HAProxy die Arbeit der Gesundheitsprüfung der Knoten ersparen und diese Logik Consul überlassen.

Mit dem optionalen Befehlsargument kann Consul Template automatisch ein Neuladen von HAProxy auslösen, wenn die Vorlage aktualisiert wird. Wenn Knoten dynamisch zu Consul hinzugefügt oder aus Consul entfernt werden, wird Ihr Load Balancer sofort über die Änderung informiert, was es einfacher denn je macht, Ausfallzeiten zu minimieren.

„Varnish Server

Varnish ist ein leistungsstarker Caching-Server, der die Abfrage mehrerer Backends unterstützt, von denen Daten und Proxy-Anfragen gecacht werden. Eine typische Varnish-Konfigurationsdatei könnte wie folgt aussehen:

import directors;backend app_01 { .host = "1.2.3.4"; .port = "8080"; }backend app_02 { .host = "5.6.7.8"; .port = "8080"; }sub vcl_init { new bar = directors.round_robin() bar.add_backend(app_01); bar.add_backend(app_02); }sub vcl_recv { set req.backend_hint = bar.backend(); }

Genauso wie unser HAProxy-Beispiel macht es Consul Template trivial, Varnish-Backends dynamisch zu befüllen und zu verwalten:

import directors;{{range service "app.frontend"}}backend {{.ID}} { .host = "{{.Address}}"; .port = "{{.Port}}";}{{end}}sub vcl_init { new bar = directors.round_robin() {{range service "app.frontend"}} bar.add_backend({{.ID}});{{end}}}sub vcl_recv { set req.backend_hint = bar.backend();}

„Anwendungskonfigurationen

Der intuitive und dennoch leistungsstarke Key-Value-Speicher ermöglicht es Anwendungsentwicklern und -betreibern, globale Konfigurationsinformationen in Consul zu speichern. Consul Template wird dynamisch aktualisiert, wenn eine Änderung an einem dieser Werte auftritt. Bei den heutigen Praktiken des Konfigurationsmanagements ist es üblich, eine Konfigurationsvorlage für eine Anwendung zu haben, die einige einstellbare Werte für die Anwendung ändert:

MaxWorkers 5 JobsPerSecond 11

Selbst bei Verwendung eines dynamischen Konfigurationsmanagementsystems bleibt die Konfiguration der Anwendung bis zum nächsten Lauf unverändert. Mit Consul Template wird jede Änderung im Key-Value-Store sofort an alle Templates weitergegeben, die auf diesen Wert hören. Jetzt kann Ihre Konfigurationsmanagement-Software eine Consul-Vorlage schreiben:

MaxWorkers {{key "web/max-workers"}}JobsPerSecond {{key "web/jobs-per-second"}}

Diese Vorlage ist nun mit Consul verbunden und erhält sofortige, dynamische Aktualisierungen, sobald eine Änderung an Consul übermittelt wird. Sie müssen nicht mehr eine Stunde warten, bis die nächste Iteration Ihres CM-Systems läuft.

„Features

Consul Template ist vollgepackt mit großartigen Funktionen, aber wir können unmöglich alle aufzählen! Hier sind nur einige der vielen Funktionen, die Sie in Consul Template finden:

  • Ruhe – Consul Template wird mit eingebauter Ruhe ausgeliefert und kann auf intelligente Weise auf Änderungen einer Consul-Instanz warten. Diese wichtige Funktion verhindert häufige Aktualisierungen einer Vorlage, während ein System schwankt.

  • Trockenmodus – Sie sind sich nicht sicher über den aktuellen Zustand Ihrer Infrastruktur? Befürchten Sie, dass eine Template-Änderung ein Subsystem zerstören könnte? Keine Angst, denn Consul Template verfügt über einen -dry-Modus. Im Trockenmodus gibt Consul Template das Ergebnis auf STDOUT aus, so dass ein Bediener die Ausgabe prüfen und entscheiden kann, ob die Template-Änderung sicher ist.

  • CLI und Config – Bevorzugen Sie es, alles über die Befehlszeile anzugeben? Oder verwenden Sie ein Konfigurationsmanagement-Tool und bevorzugen Konfigurationen, die auf die Festplatte geschrieben werden? Was auch immer Sie bevorzugen, Consul Template unterstützt Sie dabei! Mit integrierter Unterstützung für HCL akzeptiert Consul Template eine Konfigurationsdatei, Befehlszeilenflags oder eine Mischung aus beidem! Auf diese Weise können Sie Ihre bestehenden Konfigurationsmanagement-Tools weiterhin zusammen mit Consul Template verwenden.

  • Verbale Fehlersuche – Auch wenn Sie denken, dass alles perfekt ist, fallen manchmal Systeme aus. Für diese kritischen Momente verfügt Consul Template über ein detailliertes Protokollierungssystem, mit dem sich fast jedes Problem aufspüren lässt.

„Fazit

Leave a Reply