Introduktion af Consul Template

I dag frigiver vi Consul Template, et selvstændigt program, der er fyldt med fantastiske nye funktioner.

Consul Template forespørger en Consul-instans og opdaterer et vilkårligt antal angivne skabeloner i filsystemet. Som en ekstra bonus kan Consul Template udføre vilkårlige kommandoer, når en skabelonopdatering er afsluttet.

“Demo

“Use Cases

Consul Template kan forespørge på en tjenesteposter, nøgler og nøgleværdier i Consul. Den kraftfulde abstraktion og skabelonforespørgselssproget gør Consul Template perfekt til at oprette dynamiske konfigurationer som:

“Apache/Nginx Proxy Balancers

Det er ikke ualmindeligt at have flere applikationsservere, der er proxyservere bag en enkelt, offentlig proxyinstans. Denne konfiguration ser normalt ud som:

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

Men det er ofte en smertefuld, tidskrævende og kedelig proces at tilføje og fjerne en knude fra load balanceren. Endnu værre er det, at når en frontend-knude bliver “usund”, skal en operatør manuelt fjerne den fra load balancer’en. Consul Template gør hele denne proces triviel:

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

Her er et lignende eksempel for en Nginx-konfiguration:

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

Når noder tilføjes og fjernes fra Consul, tilføjes og fjernes de automatisk fra load balancer-konfigurationen. Da Consul-skabelonens service-metode kun forespørger om sunde knuder, fjernes usunde knuder også fra load balancer-konfigurationen, så snart de rapporteres som nede. Dette minimerer både nedetid og operatørindgreb, så du kan fokusere på det, der er vigtigt!

“HAProxy Backends

HAProxy er meget almindelig, højtydende load balancing-software med høj ydeevne. En typisk HAProxy-konfigurationsfil ser således ud:

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

Som Apache/Nginx-proxybalancer er det imidlertid en smertefuld og ofte skræmmende oplevelse at tilføje og fjerne knudepunkter fra HAProxy, ligesom det er tilfældet med Apache/Nginx-proxybalancer. Consul Template tager frygten ud af HAProxy:

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

Du bemærker måske, at attributten check er blevet fjernet. Da vores sundhedskontroller er defineret i Consul, og Consul Template kun returnerer sunde knuder fra en serviceforespørgsel, kan vi spare HAProxy for arbejdet med at kontrollere knudernes sundhed og overlade denne logik til Consul.

Med det valgfrie kommandoargument kan Consul Template automatisk udløse en genindlæsning af HAProxy, når skabelonen opdateres. Når noder tilføjes og fjernes dynamisk fra Consul, vil din load balancer straks blive informeret om ændringen, hvilket gør det nemmere end nogensinde før at minimere nedetid.

“Varnish-servere

Varnish er en kraftfuld caching-server, som understøtter forespørgsel på flere backends, hvorfra data og proxyforespørgsler kan cachelagres. En typisk Varnish-konfigurationsfil kan se sådan ud:

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

Som i vores HAProxy-eksempel gør Consul Template det trivielt at udfylde og administrere Varnish-backends dynamisk:

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 intuitive og alligevel kraftfulde nøgle-værdilager giver applikationsudviklere og operatører mulighed for at gemme globale konfigurationsoplysninger i Consul. Consul Template vil dynamisk blive opdateret, når der sker en ændring af en af disse værdier. Med dagens praksis for konfigurationsstyring er det almindeligt at have en konfigurationsskabelon til et program, som ændrer nogle indstillelige værdier for programmet:

MaxWorkers 5 JobsPerSecond 11

Selv ved hjælp af et dynamisk konfigurationsstyringssystem forbliver programmets konfiguration uændret indtil næste kørsel. Med Consul Template bliver enhver ændring i nøgleværdilageret straks overført til alle skabeloner, der lytter til den pågældende værdi. Nu kan dit konfigurationsstyringsprogram skrive en Consul-skabelon:

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

Denne skabelon er nu forbundet med Consul og vil modtage øjeblikkelige, dynamiske opdateringer, så snart en ændring er skubbet til Consul. Du behøver ikke længere at vente en time på, at den næste iteration af dit CM-system skal køre.

“Funktioner

Consul Template er spækket med fantastiske funktioner, men vi kan umuligt opremse dem alle! Her er blot nogle få af de mange funktioner, du finder i Consul Template:

  • Quiescence – Consul Template leveres med indbygget quiescence og kan på intelligent vis vente på ændringer fra en Consul-instans. Denne vigtige funktion forhindrer hyppige opdateringer af en skabelon, mens et system svinger.

  • Dry Mode – Er du usikker på den aktuelle tilstand af din infrastruktur? Er du bange for, at en skabelonændring kan ødelægge et undersystem? Frygt ikke mere, for Consul Template leveres komplet med -dry-tilstand. I tør tilstand vil Consul Template gengive resultatet til STDOUT, så en operatør kan inspicere output og beslutte, om skabelonændringen er sikker.

  • CLI og Config – Foretrækker du at angive alt på kommandolinjen? Eller bruger du et konfigurationshåndteringsværktøj og foretrækker konfigurationer, der skrives på disk? Uanset hvad du foretrækker, så har Consul Template dig dækket! Med indbygget understøttelse af HCL accepterer Consul Template en konfigurationsfil, kommandolinjeflag eller en blanding af begge dele! På denne måde kan du fortsætte med at bruge dine eksisterende konfigurationshåndteringsværktøjer sammen med Consul Template.

  • Verbose Debugging – Selv når du tror, at det er perfekt, fejler systemer nogle gange. Til disse kritiske øjeblikke har Consul Template et detaljeret logsystem, der kan bruges til at opspore næsten ethvert problem.

“Konklusion

Leave a Reply