Como Configurar Consul KV Usando Docker

Introdução

O Consul, do HashiCorp, é uma ferramenta versátil que serve várias funções em um ambiente moderno DevOps. É amplamente usado para descoberta de serviços, checagens de saúde, balanceamento de carga e, notavelmente, como um armazenamento distribuído de chave-valor (KV). O armazenamento KV no Consul é perfeito para armazenar dados de configuração dinâmicos, bandeiras de recurso, segredos e metadados de forma altamente disponível e consistente através de sua infraestrutura, permitindo que os serviços de um sistema distribuído acessem dinamicamente. Usar o Docker para configurar o armazenamento KV do Consul permite uma configuração rápida e ambientes isolados, tornando-o ideal para testes e desenvolvimento.

Este tutorial vai guiar você pelo processo de configuração e configuração do armazenamento KV do Consul usando o Docker. Ao final, você terá uma instância do Consul totalmente funcional rodando no Docker, com pares de KV configurados e acessíveis. Esta configuração é fundamental para a configuração dinâmica de serviços e gerenciamento de estado em sistemas distribuídos.

Pré-requisitos

Antes de começar, certifique-se de ter o seguinte:

  • Um conta de nuvem DigitalOcean..
  • Um servidor executando Ubuntu e um usuário não-root com privilégios de sudo e uma firewall ativa. Para orientação sobre como configurar isso, por favor escolha sua distribuição da lista e siga com nossa guia de configuração inicial do servidor. Certifique-se de trabalhar com a versão suportada do Ubuntu.
  • Docker instalado em seu Droplet Ubuntu. Por favor, siga com este tutorial sobre Como instalar e usar o Docker no Ubuntu.
  • Familiaridade com a linha de comando do Linux. Para uma Introdução ou atualização sobre a linha de comando, você pode visitar esta guia sobre Primer da linha de comando do Linux.
  • Conhecimento básico dos comandos do Docker e gerenciamento de contêineres.

Passo 1 — Puxando a Imagem do Docker Consul

Vamos puxar a imagem oficial do Consul do Docker Hub. Esta imagem é mantida pela HashiCorp e inclui tudo o que você precisa para executar o Consul.

Entre na consola de seu Droplet Ubuntu e execute:

docker pull hashicorp/consul:latest
Output
latest: Pulling from hashicorp/consul c8bcd218a73d: Pull complete 5f1ac8227c2a: Pull complete c51fd79d429a: Pull complete 91eff479bde6: Pull complete 4dfcc18e51db: Pull complete 3e2a8bf39bf9: Pull complete bd9ddc54bea9: Pull complete 2054d291fb84: Pull complete Digest: sha256:e244c64df77ab3586f177f1692e98575086eb40343dc82a6320f5e79543490eb Status: Downloaded newer image for hashicorp/consul:latest docker.io/hashicorp/consul:latest

Passo 2 — Executando o Container do Consul

Com a imagem do Consul baixada, você pode iniciar um novo container do Consul. Este container servirá como seu servidor Consul e permitirá que você interaja com a loja de KV (Key-Value).

Para iniciar o container, execute:

docker run -d --name=consul-server -e 
Output
CONSUL_BIND_INTERFACE
=eth0 -p 8500:8500 -p 8600:8600/udp hashicorp/consul c893b6707686bce8434213975a75c936b834cf25fc84d10b407a11c4fa8ca8ba

Entenda o que essa instrução faz:

  • -d executa o container em modo desconectado (no background).
  • --name=consul-server atribui um nome ao container.
  • -e CONSUL_BIND_INTERFACE=eth0 define a interface de rede que o Consul deve se ligar. Isso é necessário para a comunicação de rede adequada.
  • -p 8500:8500 mapeia o porto da interface web e API do Consul para o host.
  • -p 8600:8600/udp mapeia o porto do serviço de DNS para a descoberta de serviços.

Este passo é crucial, pois ele configura o serviço central do Consul, que você usará para configurar a loja de KV.

Passo 3 — Verificando a Instalação do Consul

Para garantir que o Consul estiver corretamente em execução, você precisa verificar o status do container e acessar a interface do usuário do Consul.

Primeiro, execute docker ps para listar todos os contêineres em execução e verifique se o contêiner Consul está em execução.

docker ps                                                                                                      
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                                                                    NAMES
c893b6707686   hashicorp/consul   "docker-entrypoint.s…"   51 seconds ago   Up 50 seconds   8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp   consul-server

Agora, verifique se o Consul é acessível, abra um navegador web e navegue até http://localhost:8500. Você deve ver a interface do usuário do Consul.

Este passo de verificação é importante para confirmar que sua instância do Consul está em execução sem nenhum problema antes de armazenar dados no KV store (Passo 5).

Passo 4 — Configurando o Firewall (Opcional)

Se sua instância do Consul precisar ser acessada externamente (por exemplo, de outros nós em um cluster), você deve ajustar suas configurações de firewall para permitir tráfego nas portas necessárias.

Por exemplo, se você estiver executando o Consul em uma instância de nuvem, você pode precisar permitir tráfego de entrada nas portas 8500 (API HTTP) e 8600 (DNS). As comandos específicos variam dependendo da solução de firewall que você está usando (UFW, iptables, etc.).

Este passo garante que sua instância do Consul é acessível de outras máquinas, o que é essencial para configurações distribuídas.

Passo 5 — Armazenando Pares Chave-Valor

Com o Consul em execução, você agora pode usar o KV store para armazenar dados de configuração. Você pode adicionar pares chave-valor usando o Consul CLI ou a interface web.

Para armazenar um par chave-valor via CLI, execute:

docker exec -it consul-server consul kv put config/db_host 
192.168.1.100
Success! Data written to: config/db_host
docker exec -it consul-server consul kv put config/db_port 3306         
Success! Data written to: config/db_port

Entenda o que essa instrução faz:

  • -it – Abre o terminal interativo a partir do sistema local para o container.
  • consul kv put – O comando kv put grava os dados no caminho do KV store dado.
  • config/db_host – Caminho para armazenar o valor.
  • 192.168.1.100 – Valor.

Usando a interface web,

  1. Navegue até a interface do Consul (http://localhost:8500).
  2. Clique na aba “Chave/Valor”.
  3. Crie uma nova chave clicando em “Criar”.
  4. Insira a chave (por exemplo, config/db_host) e o valor (por exemplo, 192.168.1.100).

Estes comandos e ações armazenam dados de configuração críticos que seus serviços podem acessar dinamicamente em tempo de execução.

Passo 6 — Recuperando Pares Chave-Valor

Uma vez que você armazenou alguns pares KV, você queira recuperá-los para garantir que eles foram armazenados corretamente.

Usando o CLI, recupere um valor usando o seguinte comando:

docker exec -it consul-server consul kv get config/db_host     
192.168.1.100

Usando a interface web,

  1. Vá à aba “Key/Value” na interface do Consul.
  2. Localize a chave que você criou e clique nela para ver o valor armazenado.

Recuperar os pares KV é um passo necessário para verificar se seus dados estão corretamente armazenados e acessíveis.

Passo 7 — Persistindo Dados Usando Volumes do Docker

Por padrão, os contêineres do Docker são efêmeros, o que significa que qualquer dado armazenado dentro deles será perdido se o contêiner for removido. Para persistir seus dados KV do Consul, você deve usar volumes do Docker.

  1. Pare e remova o contêiner atual do Consul:
docker stop consul-server 
docker rm consul-server 

Agora, verifique os contêineres e você deveria notar que o contêiner do Consul já não está em execução.

docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

2.Execute um novo contêiner do Consul com um volume do Docker anexado:

docker run -d --name=consul-server -e 
Output
CONSUL_BIND_INTERFACE
=eth0 -p 8500:8500 -p 8600:8600/udp -v consul_data:/consul/data hashicorp/consul 2d2a7d3ff1911c2283e70506d68391a5cbf9c935a2ae447bfb8fa21481989ef1
docker ps 
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d2a7d3ff191 hashicorp/consul "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp consul-server

A opção -v consul_data:/consul/data monta um volume do Docker no contêiner, garantindo que seu armazenamento KV persista em reinicios de contêiner.

Passo 8 — Automatizando o Início do Consul (Opcional)

Para implantações de produção, você pode automatizar o início do contêiner do Consul usando o Docker Compose. O Docker Compose simplifica as aplicações de Docker multi-contêiner e facilita o gerenciamento de serviços.

Crie um arquivo docker-compose.yml com o seguinte conteúdo:

docker-compose,yml
services:
  consul:
    image: hashicorp/consul:latest
    environment:
      - CONSUL_BIND_INTERFACE=eth0
    volumes:
      - consul_data:/consul/data 
    ports:
      - "8500:8500"
      - "8600:8600/udp"
    restart: always
volumes:
  consul_data:

Em seguida, execute:

docker-compose up -d
Output
[+] Running 2/2 ✔ Network work_default Created 0.0s ✔ Container consul-server Started 0.1s
docker ps
Output
WARN[0000] /Users/anandhkumar/work/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS work-consul-1 hashicorp/consul:latest "docker-entrypoint.s…" consul 40 seconds ago Up 11 seconds 8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp

Este comando inicia o Consul automaticamente e garante que ele reinicia se falhar, tornando-o mais resistente para uso em produção.

Passo 9 — Limpeza

Uma vez que você finalize sua sessão com a instância do Consul, você deve limpar seu ambiente Docker para liberar recursos.

Vamos parar e remover o contêiner do Consul:

docker stop consul-server   
docker rm consul-server
docker ps
output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Se você terminou com o Consul, você também pode remover a imagem do Docker:

docker rmi hashicorp/consul  
output
hashicorp/consul@sha256:e244c64df77ab3586f177f1692e98575086eb40343dc82a6320f5e79543490eb Deleted: sha256:eff8ccb509560987755a70df8d6c0b9410538d503d99498ae1ea9f48066b0439 Deleted: sha256:b5e6402bbb78eb061d538505a30300ef7f612104eaf0f11b17839a9b29bc5603 Deleted: sha256:1c61ada2ad8074615120d13bd805260d766ae8424cafbda4bded529d6a204d6f Deleted: sha256:9b36da670e2a59f1d81c6e3c9d55906c576b384df51272977e5a9caea7131e74 Deleted: sha256:8c6e52c441c246f60ca146b71204b7d6511df75fa87a0dc0a0f91141964e8fd9 Deleted: sha256:1fce18208235de2be3c419764ec1d469229af5387447d21649c841632c653cef Deleted: sha256:68e0a114c9c35b9aa8cac31fa32b27f886361bc85fcc63f34e882e9128f33a14 Deleted: sha256:3da5b888208a9b19694bfeaf8c74a432b50f44542d717c9e1f3ab273e505855a Deleted: sha256:dea73e9287e6e2f3b7f9fcac4f20767d7badeefa24e52f990f1674e98abfa1a3 Deleted: sha256:201fa22d1f4c7d6e7ec43135c63b2260f303f4864f5eb43569faaa1731628799

A limpeza ajuda a manter um ambiente de desenvolvimento organizado e garante que os recursos do Docker não sejam consumidos de forma não necessária.

Conclusão

Neste tutorial, você aprendeu a configurar a loja de KV do Consul usando o Docker. Você abrangeu a instalação do Docker, o funcionamento do container do Consul, a configuração da loja de KV, o armazenamento de dados com volumes do Docker e a limpeza do seu ambiente. Com essas etapas, você pode agora usar o Consul para gerenciar dinamicamente dados de configuração em seus sistemas distribuídos, aproveitando o poder do Docker para implantação e gerenciamento fáceis.

Source:
https://www.digitalocean.com/community/tutorials/how-to-configure-consul-kv-using-docker