Apresentando o Consul Template
Hoje estamos lançando o Consul Template, uma aplicação autônoma que é embalada cheia de novos recursos surpreendentes.
Consul Template consulta uma instância do Consul e atualiza qualquer número de modelos especificados no sistema de arquivos. Como um bônus adicional, Consul Template pode executar comandos arbitrários quando uma atualização de template é concluída.
“Demo
“Use Cases
Consul Template pode consultar uma entrada de serviço, chaves e valores chave em Consul. A poderosa linguagem de abstração e consulta de templates torna o Consul Template perfeito para criar configurações dinâmicas como:
“Apache/Nginx Proxy Balancers
Não é raro ter múltiplos servidores de aplicação proxied atrás de uma única instância proxy de face pública. Esta configuração geralmente se parece com:
<proxy balancer:="" frontend="">BalanceMember 1.2.3.4:80 BalanceMember 5.6.7.8:80</proxy>
Mas adicionar e remover um nó do balanceador de carga é muitas vezes um processo doloroso, demorado e entediante. Pior ainda, quando um nó frontal torna-se “insalubre”, um operador precisa removê-lo manualmente do balanceador de carga. Consul Template torna todo este processo trivial:
<Proxy balancer://frontend>{{range service "app.frontend"}} BalanceMember {{.Address}}{{end}}</Proxy>
Aqui está um exemplo similar para uma configuração Nginx:
upstream frontend { {{range service "app.frontend"}} server {{.Address}};{{end}}}
As nós são adicionados e removidos do Consul, eles são automaticamente adicionados e removidos da configuração do balanceador de carga. Como o método service
do Consul Template só consulta nós saudáveis, nós não saudáveis também são removidos do balanceador de carga assim que são reportados como abaixo. Isto minimiza tanto o tempo de parada quanto a intervenção do operador para que você possa se concentrar no que é importante!
“HAProxy Backends
HAProxy é um software de balanceamento de carga muito comum e de alto desempenho. Um típico arquivo de configuração HAProxy se parece com:
backend frontendbalance roundrobinserver web1 web1.yourdomain.com:80 checkserver web2 web2.yourdomain.com:80 check
No entanto, assim como o equilibrador proxy Apache/Nginx, adicionar e remover nós do HAProxy é uma experiência dolorosa e muitas vezes assustadora. Consul Template tira o medo do HAProxy:
backend frontendbalance roundrobin{{range "app.frontend"}}service {{.ID}} {{.Address}}:{{.Port}}{{end}}
Você pode notar que o atributo check
foi removido. Como as nossas verificações de saúde são definidas no Consul, e o Consul Template apenas devolve nós saudáveis de uma consulta de serviço, podemos salvar HAProxy o trabalho de verificar a saúde dos nós e deixar essa lógica para o Consul.
Com o argumento de comando opcional, o Consul Template pode activar automaticamente uma recarga de HAProxy quando o template é actualizado. Como os nós são dinamicamente adicionados e removidos do Consul, seu balanceador de carga será imediatamente informado da mudança, tornando mais fácil do que nunca minimizar o tempo de inatividade.
“Varnish Servers
Varnish é um poderoso servidor de cache que suporta a consulta de múltiplos backends a partir dos quais os dados de cache e pedidos de proxy. Um típico arquivo de configuração do Vernish pode parecer:
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(); }
Apenas como nosso exemplo HAProxy, o Consul Template torna trivial preencher e gerenciar backends Varnish dinamicamente:
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();}
“Application Configurations
O intuitivo mas poderoso armazenamento de valores chave permite aos desenvolvedores de aplicativos e operadores armazenar informações de configuração global no Consul. O Consul Template será atualizado dinamicamente quando ocorrer uma mudança para um desses valores. Com as práticas atuais de gerenciamento de configuração, é comum ter um template de configuração para uma aplicação que altera alguns valores ajustáveis para a aplicação:
MaxWorkers 5 JobsPerSecond 11
Even usando um sistema de gerenciamento de configuração dinâmico, a configuração da aplicação permanecerá inalterada até a próxima execução. Com o Consul Template, qualquer alteração na loja de valores chave é imediatamente propagada para todos os templates que ouvem esse valor. Agora, seu software de gerenciamento de configuração pode escrever um Template Consul:
MaxWorkers {{key "web/max-workers"}}JobsPerSecond {{key "web/jobs-per-second"}}
Este template está agora conectado com o Consul e receberá atualizações instantâneas e dinâmicas assim que uma mudança for empurrada para o Consul. Você não precisa mais esperar uma hora para que a próxima iteração do seu sistema CM seja executada.
“Features
Consul Template está lotado de grandes funcionalidades, mas não podemos listar todas elas! Aqui estão apenas alguns dos muitos recursos que você encontrará no Consul Template:
-
Quiescence – O Consul Template é enviado com quiescência incorporada e pode esperar inteligentemente por mudanças de uma instância do Consul. Este recurso crítico evita atualizações frequentes de um template enquanto um sistema está flutuando.
-
Dry Mode – Não tem certeza do estado atual da sua infra-estrutura? Teme que uma mudança de template possa quebrar um subsistema? Não tenha mais medo porque o Consul Template vem completo com o modo
-dry
. No modo seco, o Consul Template irá renderizar o resultado para STDOUT, assim um operador pode inspecionar a saída e decidir se a mudança de template é segura. -
CLI e Config – Você prefere especificar tudo na linha de comando? Ou você está usando uma ferramenta de gerenciamento de configuração e prefere configurações gravadas no disco? Qualquer que seja a sua preferência, o Consulado Template já o abordou! Com suporte integrado para HCL, o Consul Template aceita um arquivo de configuração, bandeiras de linha de comando, ou uma mistura de ambos! Desta forma, você pode continuar usando suas ferramentas de gerenciamento de configuração existentes em conjunto com o Consul Template.
-
Verbose Debugging – Mesmo quando você acha que é perfeito, às vezes os sistemas falham. Para aqueles momentos críticos, o Consul Template tem um sistema de registro detalhado que pode ser usado para rastrear quase qualquer problema.
“Conclusão
“.
Leave a Reply