Введение
Consul от HashiCorp — универсальный инструмент, выполняющий множество функций в современной DevOps-среде. Он широко используется для обнаружения сервисов, проверки работоспособности, балансировки нагрузки и, что особенно важно, в качестве распределённого хранилища ключей и значений (KV). Хранилище KV в Consul подходит для хранения динамических данных конфигурации, флагов функций, секретов и метаданных в полностью доступном и согласованном виде в рамках всей вашей инфраструктуры, обеспечивая динамический доступ к ним со стороны сервисов в распределённой системе. Использование Docker для настройки хранилища KV в Consul обеспечивает быстрое развертывание и создание изолированных сред, что делает его идеальным решением для тестирования и разработки.
Это руководство поможет вам настроить хранилище KV Consul с помощью Docker. К концу у вас будет полнофункциональный экземпляр консоли Docker с настроенными и доступными парами KV. Такая настройка необходима для динамической настройки сервисов и управления состоянием в распределённых системах.
Предпосылки
Прежде чем начать, убедитесь, что у вас есть следующее:
- Учетная запись DigitalOcean Cloud.
- Сервер под управлением Ubuntu и пользователь без прав root с привилегиями sudo и включенным брандмауэром.
- Docker установлен на вашем сервере Ubuntu.
- Введение в командную строку Linux
- Базовые знания команд Docker и управления контейнерами.
Шаг 1 — Извлечение образа Consul Docker
Давайте скачаем официальный образ консоли из Docker Hub. Он поддерживается HashiCorp и включает в себя всё необходимое для запуска консоли.
Войдите в консоль 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
Теперь, когда образ консоли загружен, вы можете запустить новый контейнер консоли. Этот контейнер будет выступать в качестве сервера консоли и позволит вам взаимодействовать с хранилищем 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 Задаёт сетевой интерфейс, к которому должна быть привязана консоль. Это необходимо для корректной сетевой связи.
- -p 8500:8500 сопоставляет веб-интерфейс Consul и порт API с хостом.
- -p 8600:8600/udp сопоставляет порт службы DNS для обнаружения служб.
Этот шаг очень важен, поскольку он запускает службу Consul, которую вы будете использовать для настройки хранилища KV.
Шаг 3 — Подтверждение установки консоли
Чтобы убедиться в правильной работе консоли, необходимо проверить состояние контейнера и получить доступ к интерфейсу консоли.
Сначала запустите 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Теперь проверьте, доступна ли консоль, откройте веб-браузер и перейдите по адресу http://localhost:8500. Вы должны увидеть интерфейс Consul.
Этот шаг проверки важен для подтверждения того, что экземпляр вашей консоли работает без проблем, прежде чем сохранять данные в хранилище KV (шаг 5).
Шаг 4 — Настройка брандмауэра (необязательно)
Если вашему экземпляру консоли требуется внешний доступ (например, с других узлов в кластере), необходимо настроить параметры брандмауэра, чтобы разрешить трафик через необходимые порты.
Например, если вы используете Consul на облачном экземпляре, вам может потребоваться разрешить входящий трафик на порты 8500 (HTTP API) и 8600 (DNS). Конкретные команды будут различаться в зависимости от вашего решения по межсетевому экрану (UFW, iptables и т. д.).
Этот шаг гарантирует, что ваш экземпляр консоли будет доступен с других машин, что крайне важно для распределенных конфигураций.
Шаг 5 — Хранение пар ключ-значение
После запуска Consul вы можете использовать хранилище KV для хранения данных конфигурации. Пары «ключ-значение» можно добавлять через интерфейс командной строки Consul или веб-интерфейс.
Чтобы сохранить пару ключ-значение через CLI, выполните:
docker exec -it consul-server consul kv put config/db_host
192.168.1.100
Success! Data written to: config/db_hostdocker exec -it consul-server consul kv put config/db_port 3306
Success! Data written to: config/db_portВот что делает эта команда:
- -it – Запускает интерактивный терминал из локальной системы в контейнере.
- consul kv put – Команда kv put сохраняет данные по указанному пути.
- config/db_host – Путь для сохранения значения.
- 192.168.1.100 – значение.
Используя веб-интерфейс,
- Перейдите в пользовательский интерфейс Consul (http://localhost:8500).
- Нажмите на вкладку “Ключ/Значение”.
- Создайте новый ключ, нажав “Создать”.
- Введите ключ (например, config/db_host) и значение (например, 192.168.1.100).
Эти команды и действия хранят критически важные данные конфигурации, к которым ваши службы могут динамически получать доступ во время выполнения.
Шаг 6 — Извлечение пар ключ-значение
После сохранения нескольких пар KV вам, возможно, захочется восстановить их, чтобы убедиться, что они были сохранены правильно.
Используя CLI, извлеките значение с помощью следующей команды:
docker exec -it consul-server consul kv get config/db_host
192.168.1.100Используя веб-интерфейс,
- Перейдите на вкладку «Ключ/Значение» в пользовательском интерфейсе Consul.
- Найдите созданный вами ключ и щелкните по нему, чтобы увидеть сохраненное значение.
Восстановление пар KV — важный шаг для проверки того, что ваши данные правильно хранятся и доступны.
Шаг 7 — Постоянные данные с использованием томов Docker
По умолчанию контейнеры Docker являются эфемерными, то есть все данные, хранящиеся в них, будут потеряны при удалении контейнера. Для сохранения данных Consul KV необходимо использовать тома Docker.
Остановите и выйдите из текущего контейнера консоли:
docker stop consul-server
docker rm consul-server Теперь проверьте контейнеры, и вы заметите, что консилер больше не работает.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESПодключите новый консольный контейнер с томом Docker:
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
2d2a7d3ff1911c2283e70506d68391a5cbf9c935a2ae447bfb8fa21481989ef1docker 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 в контейнере и обеспечивает перезапуск хранилища KV во всем контейнере.
Шаг 8 — Автоматический запуск консоли (необязательно)
Для производственных развёртываний вам может потребоваться автоматизировать развёртывание контейнера Consul с помощью Docker Compose. Docker Compose упрощает разработку многоконтейнерных Docker-приложений и упрощает управление сервисами.
Создайте файл 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 – Очистка
После завершения работы с экземпляром консоли вам необходимо очистить среду Docker, чтобы освободить ресурсы.
Давайте остановимся и удалим контейнер консоли:
docker stop consul-server
docker rm consul-server
docker psoutput
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESЕсли вы закончили работу с консолью, вы также можете удалить образ 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 не будут использоваться без необходимости.
Результат
В этом руководстве вы узнали, как настроить хранилище KV в Consul с помощью Docker. Вы рассмотрели установку Docker, запуск контейнера Consul, настройку хранилища KV, сохранение данных с помощью томов Docker и очистку среды. Выполнив эти шаги, вы теперь можете использовать Consul для динамического управления данными конфигурации в ваших распределённых системах, используя возможности Docker для простого развертывания и управления.










