Introduktion av Consul Template

I dag släpper vi Consul Template, ett fristående program som är fullt av fantastiska nya funktioner.

Consul Template frågar efter en Consul-instans och uppdaterar ett valfritt antal angivna mallar i filsystemet. Som en extra bonus kan Consul Template exekvera godtyckliga kommandon när en malluppdatering är klar.

”Demo

”Användningsfall

Consul Template kan fråga av en tjänst poster, nycklar och nyckelvärden i Consul. Det kraftfulla abstraktions- och mallförfrågningsspråket gör Consul Template perfekt för att skapa dynamiska konfigurationer som:

”Apache/Nginx Proxy Balancers

Det är inte ovanligt att ha flera applikationsservrar som proxyservrar bakom en enda proxyinstans som vetter mot allmänheten. Den här konfigurationen ser vanligtvis ut ungefär så här:

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

Men att lägga till och ta bort en nod från lastutjämnaren är ofta en smärtsam, tidskrävande och tråkig process. Ännu värre är att när en frontend-nod blir ”ohälsosam” måste en operatör manuellt ta bort den från lastbalansenheten. Consul Template gör hela denna process trivial:

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

Här är ett liknande exempel för en Nginx-konfiguration:

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

När noder läggs till och tas bort från Consul, läggs de automatiskt till och tas bort från konfigurationen av lastbalansen. Eftersom Consul-mallens service-metod endast frågar efter friska noder, tas även ohälsosamma noder bort från lastbalanseringskonfigurationen så snart de rapporteras som nere. Detta minimerar både nedtid och operatörsinterventioner så att du kan fokusera på det som är viktigt!

”HAProxy Backends

HAProxy är en mycket vanlig, högpresterande lastbalanseringsprogramvara. En typisk HAProxy-konfigurationsfil ser ut så här:

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

Men precis som Apache/Nginx proxybalanserare är det en smärtsam och ofta skrämmande upplevelse att lägga till och ta bort noder från HAProxy. Consul Template tar bort rädslan för HAProxy:

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

Du kanske märker att attributet check har tagits bort. Eftersom våra hälsokontroller definieras i Consul, och Consul Template endast returnerar friska noder från en tjänsteförfrågan, kan vi spara HAProxy arbetet med att kontrollera nodernas hälsa och överlåta den logiken till Consul.

Med det valfria kommando-argumentet kan Consul Template automatiskt utlösa en omladdning av HAProxy när mallen uppdateras. När noder dynamiskt läggs till och tas bort från Consul kommer din lastbalanserare omedelbart att informeras om ändringen, vilket gör det enklare än någonsin att minimera driftstopp.

”Varnish-servrar

Varnish är en kraftfull caching-server som har stöd för att fråga flera baksidor från vilka man kan cachelagra data och proxyförfrågningar. En typisk Varnish-konfigurationsfil kan se ut så här:

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(); }

Precis som vårt HAProxy-exempel gör Consul Template det trivialt att dynamiskt fylla på och hantera Varnish-backends:

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();}

”Applikationskonfigurationer

Det intuitiva men kraftfulla nyckelvärdeslagret gör det möjligt för applikationsutvecklare och operatörer att lagra global konfigurationsinformation i Consul. Consul Template uppdateras dynamiskt när en ändring av ett av dessa värden sker. Med dagens metoder för konfigurationshantering är det vanligt att ha en konfigurationsmall för ett program som ändrar vissa inställningsbara värden för programmet:

MaxWorkers 5 JobsPerSecond 11

Även med hjälp av ett dynamiskt konfigurationshanteringssystem kommer programmets konfiguration att förbli oförändrad fram till nästa körning. Med Consul Template sprids varje ändring i nyckelvärdeslagret omedelbart till alla mallar som lyssnar på det värdet. Nu kan ditt konfigurationshanteringsprogram skriva en Consul-mall:

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

Den här mallen är nu ansluten till Consul och kommer att få omedelbara, dynamiska uppdateringar så snart en ändring skickas till Consul. Du behöver inte längre vänta en timme på att nästa iteration av ditt CM-system ska köras.

”Funktioner

Consul Template är fullspäckad med fantastiska funktioner, men vi kan omöjligt räkna upp dem alla! Här är bara några av de många funktioner som du hittar i Consul Template:

  • Quiescence – Consul Template levereras med inbyggd quiescence och kan på ett intelligent sätt vänta på ändringar från en Consul-instans. Denna viktiga funktion förhindrar frekventa uppdateringar av en mall medan ett system fluktuerar.

  • Dry Mode – Är du osäker på det aktuella tillståndet i din infrastruktur? Rädd för att en malländring kan förstöra ett delsystem? Frukta inte längre eftersom Consul Template levereras komplett med -dry-läge. I det torra läget kommer Consul Template att visa resultatet till STDOUT, så att en operatör kan inspektera resultatet och avgöra om malländringen är säker.

  • CLI och Config – Föredrar du att specificera allt på kommandoraden? Eller använder du ett konfigurationshanteringsverktyg och föredrar konfigurationer som skrivs på disk? Oavsett vad du föredrar har Consul Template allt du behöver! Med inbyggt stöd för HCL accepterar Consul Template en konfigurationsfil, kommandoradsflaggor eller en blandning av båda! På så sätt kan du fortsätta att använda dina befintliga konfigurationshanteringsverktyg tillsammans med Consul Template.

  • Verbose Debugging – Även när du tror att det är perfekt, misslyckas system ibland. För dessa kritiska tillfällen har Consul Template ett detaljerat loggningssystem som kan användas för att spåra nästan alla problem.

”Slutsats

Leave a Reply