Presentamos Consul Template

Hoy lanzamos Consul Template, una aplicación independiente que está repleta de increíbles nuevas características.

Consul Template consulta una instancia de Consul y actualiza cualquier número de plantillas especificadas en el sistema de archivos. Como ventaja adicional, Consul Template puede ejecutar comandos arbitrarios cuando se completa una actualización de plantilla.

«Demo

«Casos de uso

Consul Template puede consultar las entradas de un servicio, las claves y los valores de las claves en Consul. La potente abstracción y el lenguaje de consulta de plantillas hacen que Consul Template sea perfecto para crear configuraciones dinámicas como:

«Equilibradores de proxy Apache/Nginx

No es infrecuente tener varios servidores de aplicaciones proxy detrás de una única instancia de proxy de cara al público. Esta configuración suele ser algo así:

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

Pero añadir y eliminar un nodo del equilibrador de carga suele ser un proceso doloroso, lento y tedioso. Y lo que es peor, cuando un nodo del frontend se vuelve «insalubre», un operador tiene que eliminarlo manualmente del equilibrador de carga. Consul Template hace que todo este proceso sea trivial:

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

Aquí hay un ejemplo similar para una configuración de Nginx:

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

A medida que se añaden y eliminan nodos de Consul, se añaden y eliminan automáticamente de la configuración del equilibrador de carga. Dado que el método service de Consul Template sólo consulta los nodos sanos, los nodos no sanos también se eliminan del equilibrador de carga tan pronto como se informa de que han caído. Esto minimiza el tiempo de inactividad y la intervención del operador para que pueda centrarse en lo que es importante. Un archivo de configuración típico de HAProxy se parece a:

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

Sin embargo, al igual que el balanceador de proxy Apache/Nginx, añadir y eliminar nodos de HAProxy es una experiencia dolorosa y a menudo aterradora. Consul Template le quita el miedo a HAProxy:

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

Podrás notar que el atributo check ha sido eliminado. Como nuestras comprobaciones de salud se definen en Consul, y Consul Template sólo devuelve nodos sanos desde una consulta de servicio, podemos ahorrarle a HAProxy el trabajo de comprobar la salud de los nodos y dejarle esa lógica a Consul.

Con el argumento opcional de comando, Consul Template puede desencadenar automáticamente una recarga de HAProxy cuando se actualiza la plantilla. A medida que los nodos se añaden y eliminan dinámicamente de Consul, su equilibrador de carga será inmediatamente informado del cambio, haciendo más fácil que nunca minimizar el tiempo de inactividad.

«Servidores Varnish

Varnish es un potente servidor de caché que soporta la consulta de múltiples backends desde los que almacenar en caché los datos y las solicitudes de proxy. Un típico archivo de configuración de Varnish podría tener el siguiente aspecto:

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

Al igual que nuestro ejemplo de HAProxy, Consul Template hace que sea trivial rellenar y gestionar dinámicamente los backends de Varnish:

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

«Configuraciones de aplicaciones

El intuitivo pero potente almacén de valores clave permite a los desarrolladores y operadores de aplicaciones almacenar información de configuración global en Consul. La plantilla de Consul se actualizará dinámicamente cuando se produzca un cambio en uno de esos valores. Con las prácticas actuales de gestión de la configuración, es común tener una plantilla de configuración para una aplicación que altera algunos valores sintonizables para la aplicación:

MaxWorkers 5 JobsPerSecond 11

Incluso utilizando un sistema de gestión de la configuración dinámica, la configuración de la aplicación permanecerá sin cambios hasta la próxima ejecución. Con Consul Template, cualquier cambio en el almacén de valores clave se propaga inmediatamente a todas las plantillas que escuchan ese valor. Ahora, su software de gestión de la configuración puede escribir una Plantilla Consul:

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

Esta plantilla está ahora conectada con Consul y recibirá actualizaciones instantáneas y dinámicas tan pronto como se empuje un cambio a Consul. Ya no tendrá que esperar una hora para que se ejecute la siguiente iteración de su sistema CM.

«Características

Consul Template está repleto de grandes características, ¡pero no podemos enumerarlas todas! Éstas son sólo algunas de las muchas características que encontrará en Consul Template:

  • Quiescencia – Consul Template viene con quiescencia incorporada y puede esperar inteligentemente los cambios de una instancia de Consul. Esta característica crítica evita las actualizaciones frecuentes de una plantilla mientras un sistema está fluctuando.

  • Modo seco – ¿No está seguro del estado actual de su infraestructura? Teme que un cambio de plantilla pueda romper un subsistema? No tema más porque Consul Template viene completo con el modo -dry. En el modo seco, Consul Template mostrará el resultado en STDOUT, para que un operador pueda inspeccionar la salida y decidir si el cambio de plantilla es seguro.

  • CLI y Config – ¿Prefiere especificar todo en la línea de comandos? O está utilizando una herramienta de gestión de la configuración y prefiere las configuraciones escritas en el disco? Cualquiera que sea su preferencia, Consul Template lo tiene cubierto. Con soporte incorporado para HCL, Consul Template acepta un archivo de configuración, banderas de línea de comandos, ¡o una mezcla de ambos! De este modo, puede seguir utilizando sus herramientas de gestión de la configuración existentes en tándem con Consul Template.

  • Depuración detallada – Incluso cuando cree que es perfecto, a veces los sistemas fallan. Para esos momentos críticos, Consul Template tiene un sistema de registro detallado que puede utilizarse para rastrear casi cualquier problema.

«Conclusión

Leave a Reply