Как написать docker-compose для приложения, работающего в кластере - PullRequest
0 голосов
/ 30 апреля 2019

Я настраиваю стек мониторинга в Docker Swarm, и мне нужно настроить prometheus alertmanager и hashicorp консул.

Оба эти инструмента должны знать либо имена хостов, либо IP-адреса других членов кластера при запуске. Эти настройки могут быть переданы через среду.

Есть ли способ сделать это в файле docker-compose, который я могу передать в развертывание докера?

Что я проверял до сих пор
Я смотрел на решения других людей, и большинство из них, похоже, полагаются на использование шаблонов облачной платформы при создании роя для создания необходимой конфигурации или заставляют узлы иметь известный статический IP-адрес.

Мне бы хотелось решение, которое может декларативно описывать конфигурацию сервиса. Привязанность хоста к рою приемлема, я собираюсь запустить обе службы на 1 контейнере на хост хоста роя в конфигурации с 3 роями.

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

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

services:
  alertmanager_1: # First cluster instance
    image: prom/alertmanager:latest
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
      - '--storage.path=/alertmanager'
      - '--cluster.peer=tasks.alertmanager_2:9094'  # links to second cluster instance via overlay DNS
    deploy:
      mode: global
      placement:
        constraints:
          - node.hostname == swarm-manager000000
    networks:
      prometheus_stack:
        aliases:
          - alertmanager
    ports:
        - '19093:9093'
    volumes:
      - alertmanager-data:/alertmanager
      - alertmanager-config:/etc/alertmanager
  alertmanager_2: # Second cluster instance
    image: prom/alertmanager:latest
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
      - '--storage.path=/alertmanager'
      - '--cluster.peer=tasks.alertmanager_1:9094' # refers to the first

...

networks:
  prometheus_stack:
    driver: overlay
    attachable: true 

Нумерованные экземпляры службы позволяют указывать правильные командные строки конфигурации однорангового узла без предварительного знания имен хостов, а псевдоним сети наложения позволяет ссылаться на кластер в целом в другой конфигурации, для которой требуется эта конфигурация DNS.Расширение этого до более крупного кластера потребовало бы добавления большего количества определений службы и добавления записи --cluster.peer для каждого дополнительного экземпляра.Я полностью описал процесс здесь

0 голосов
/ 03 мая 2019

Если вы создали настраиваемую оверлейную сеть (вам следует) для своего сервиса, вы можете получить ip-адреса всех контейнеров в сервисе «myservice», используя:

dig tasks.myservice +short

...