Как настроить Consul KV с использованием Docker

Введение

Consul, разработанный HashiCorp, является гибкой утилитой, выполняющей множество функций в современной среде DevOps. Он широко используется для обнаружения сервисов, проверки состояния, балансирования нагрузки и, в частности, как распределенное хранение ключей-значений (KV). Хранение KV в Consul идеально подходит для хранения динамических конфигурационных данных, флагов функций, секретов и метаданных надежным и последовательным способом по всей инфраструктуре, что позволяет сервисам в распределенной системе динамически получать доступ к ним. Использование Docker для настройки KV-хранения Consul обеспечивает быстрое установление и изолированные среды, что и делает его идеальным для тестирования и разработки.

В этом руководстве вы узнаете, как настроить и конфигурировать KV-хранение Consul с использованием Docker. By the end, you will have a fully functional Consul instance running in Docker, with KV pairs configured and accessible. This setup is essential for dynamic service configuration and state management in distributed systems.

Предварительные требования

Перед началом убедитесь, что у вас есть следующее:

  • Учетная запись DigitalOcean Cloud..
  • Сервер с установленным Ubuntu и пользователь с правами sudo, но не являющийся root, а так же активной firewall. Чтобы узнать, как настроить это, пожалуйста выберите из этого списка вашу дистрибутив и следуйте инструкции по установке сервера. Убедитесь, что вы работаете с поддерживаемой версией Ubuntu.
  • Установлен Docker на вашем узле Ubuntu Droplet. Пожалуйста, следуйте этому руководству по установке и использованию Docker на Ubuntu.
  • Знакомство с Linux命令行. Чтобы познакомиться с命令行 или проверить свои знания, вы можете посетить это руководство по primer Linux command line.
  • Основные понятия о Docker командах и управлении контейнерами.

Шаг 1 — Получение Docker образа Consul

Допустим, мы вытянем официальный образ Consul с Docker Hub. Этот образ поддерживается HashiCorp и включает все, что нужно для запуска Consul.

войдите в консоль вашего узла Ubuntu Droplet и выполните:

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

Шаг 2 — Запуск контейнера Consul

Теперь, когда образ Consul уже загружен, вы можете запустить новый контейнер Consul. Этот контейнер будет выполнять функции сервера Consul и позволит вам взаимодействовать с KV-хранением.

Чтобы запустить контейнер, выполните:

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

Вот, что делает эта команда:

  • -d запускает контейнер в отдельном режиме (в фоновом режиме).
  • --name=consul-server присваивает имя контейнеру.
  • -e CONSUL_BIND_INTERFACE=eth0 устанавливает сетевую интерфейс, на который Consul должен привязываться. Это необходимо для правильной сетевой коммуникации.
  • -p 8500:8500 соединяет порт Web UI и API Consul с хостом.
  • -p 8600:8600/udp соединяет порт DNS для службы обнаружения службы.

Этот шаг важен, так как он устанавливает базовую службу Consul, которую вы будете использовать для настройки KV-хранения.

Шаг 3 — проверка установки Consul

Чтобы убедиться, что Consul работает корректно, вам нужно проверить статус контейнера и получить доступ к интерфейсу UI Consul.

Сначала запустите docker ps, чтобы вывести список всех запущенных контейнеров и проверить, запущен ли контейнер Consul.

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

Теперь убедитесь, что Consul доступен, откройте веб-браузер и перейдите к адресу http://localhost:8500. You should see the Consul UI.

Этот шаг проверки важен для подтверждения, что ваша инстанция Consul запущена без каких-либо проблем, прежде чем сохранять данные в KV-магазине (шаг 5).

Шаг 4 — Конфигурация Firewall (необязательно)

Если ваша инстанция Consul должна быть доступна с внешнего сервера (например, с других узлов кластера), вы должны настроить вашу firewall, чтобы разрешить трафик на необходимых портах.

Например, если вы запускаете Consul на облачном инстансе, вам может потребоваться разрешить входящий трафик на порты 8500 (HTTP API) и 8600 (DNS). Специфические команды будут варьироваться в зависимости от решения firewall, которое вы используете (UFW, iptables и т. д.).

Этот шаг обеспечивает доступность вашей инстанции Consul с других машин, что является необходимым для распределенных настроек.

Шаг 5 — хранение пар ключ-значение

С Consul работая, теперь вы можете использовать KV store для хранения конфигурационных данных. Вы можете добавить пары ключ-значение с помощью консольного интерфейса CLI Consul или веб-UI.

Чтобы сохранить пары ключ-значение через CLI, выполните:

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

Вот, что делает эта команда:

  • -it – Запускает интерактивную терминал с локальной системы в контейнер.
  • consul kv put – Команда kv put записывает данные в заданный путь KV store.
  • config/db_host – Путь для хранения значения.
  • 192.168.1.100 – Значение.

Используя Web UI,

  1. Перейдите к UI Consul (http://localhost:8500).
  2. Кликните на вкладку “Key/Value” .
  3. Создайте новый ключ, нажав “Create” .
  4. Введите ключ (например, config/db_host) и значение (например, 192.168.1.100).

Эти команды и действия хранят критические конфигурационные данные, которые могут быть динамически доступны вашим сервисам в runtime.

Шаг 6 – Получение пар ключ-значение

Когда вы уже сохранили какие-то KV пары, вы хотите их извлечь, чтобы убедиться, что они были правильно сохранены.

Используя CLI, извлечь значение с помощью следующей команды:

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

Используя Web UI,

  1. Перейдите на вкладку “Key/Value” в UI Consul.
  2. Найдите созданную вами ключ и нажмите на него, чтобы увидеть сохранённое значение.

Получение пар ключ-значение является необходимым шагом для проверки правильности хранения и доступности ваших данных.

Шаг 7 — Persisting Data Using Docker Volumes

по умолчанию контейнеры Docker являются эphemeral, что意味着 любые данные, хранящиеся внутри них, будут утеряны, если контейнер будет удалён. Чтобы сохранить ваши данные KV Consul, вы должны использовать Docker volumes.

  1. Остановите и удалите текущий контейнер Consul:
docker stop consul-server 
docker rm consul-server 

Теперь посмотрите на контейнеры, и вы должны заметить, что контейнер Consul больше не запущен.

docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

2. Запустите новый контейнер Consul с присоединённым Docker volume:

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

Параметр -v consul_data:/consul/data монтирует Docker volume в контейнер, что обеспечивает сохранность вашего KV-магазина при перезапуске контейнера.

Шаг 8 — автоматизация запуска Consul (необязательно)

Для производственных установок может потребоваться автоматизировать запуск контейнера Consul с использованием Docker Compose. Docker Compose упрощает многоконтейнерные приложения Docker и облегчает управление службами.

Создайте файл docker-compose.yml следующим содержимым:

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:

Потом выполните:

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

Этот код автоматически запускает Consul и обеспечивает его перезапуск в случае сбоя, что делает его более устойчивым для производственного использования.

Шаг 9 — Очистка

После того как вы закончите работу с экземпляром Consul, вы должны очистить вашу среду Docker, чтобы освободить ресурсы.

Просто остановим и удалим контейнер Consul:

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

Если вы больше не нужны Consul, вы также можете удалить образ 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

Очистка помогает поддерживать чистую разрабатываемую среду и обеспечивает, чтобы ресурсы Docker не использовались не необходимо.

Заключение

В этом руководстве вы научились, как настроить и настроить КВ-магазин Consul с использованием Docker. Вы ознакомились с установкой Docker, запуском контейнера Consul, настройкой КВ-магазина, сохранением данных с использованием объектовvolume Docker и очисткой вашего окружения. С помощью этих шагов теперь вы можете использовать Consul для динамического управления конфигурационными данными в ваших распределенных системах, используя для удобного установки и управления силу Docker.

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