Ответ 1
Только частичное решение здесь. Таким образом, при подключении своих услуг к пользовательской сети наложения, у вас действительно есть доступ к настраиваемой службе Docker. Я подробно расскажу о сетевой функции режима Docker Swarm, прежде чем пытаться привязать ее к вашей проблеме.
Я буду использовать другой термин services и задач, в котором служба может быть elasticsearch, тогда как задача - это единственный экземпляр этой службы elasticsearch.
Сеть докеров
Идея заключается в том, что для каждой службы, которую вы создаете, docker назначает виртуальный IP (VIP) и пользовательский псевдоним dns. Вы можете получить этот VIP, используя команду docker service inspect myservice
.
Но есть два режима подключения службы к оверлейной сети dnsrr и VIP. Эти параметры можно выбрать с помощью опций --endpoint-mode
docker service create
.
Режим VIP (я считаю, что он по умолчанию или, по крайней мере, самый используемый), влияет на виртуальный ip на псевдоним службы dns. Это означает, что выполнение nslookup servicename
вернет вам один vip, который за кулисами будет связан с одним из ваших контейнеров в циклическом режиме. Но есть также специальный псевдоним dns, который позволяет вам получить доступ ко всем вашим экземплярам ips (все ваши задачи ips): tasks.myservice
.
Итак, в режиме VIP вы можете получить все ваши задачи ips с помощью простого nslookup tasks.myservice
, где myservice - это имя службы.
Другой режим - dnsrr. Этот режим просто избавляется от VIP и подключает псевдоним dns к различным задачам (= экземплярам службы) с помощью циклического доступа. Таким образом, вам просто нужно сделать nslookup myservice
для извлечения различных экземпляров службы ip.
Кластеризация elasticsearch
Хорошо, так что в первую очередь я не очень хорошо знаком с тем, как elasticsearch позволяет вам кластеризовать. Из того, что я понял из вашего вопроса, вам нужно, когда вы запускаете двоичный файл elasticsearch, укажите его как параметр, адрес all других узлов, с которыми ему нужно кластерировать.
Итак, что бы я сделал, это создать пользовательский образ Elasticsearch, возможно, основанный на одном из библиотеки по умолчанию, к которому я бы добавил пользовательский Entrypoint
, который сначала запускал script для извлечения других задач ф.
Я полагаю, что пребывание в VIP-режиме подходит для вас, так как есть псевдоним tasks.myservice
dns. Затем вам нужно будет разобрать вывод для извлечения задач ip (и, возможно, удалить ваши). Затем вы сможете сохранить их в переменной окружения файла конфигурации или использовать их в качестве параметра времени выполнения для бинарного файла elasticsearch.
Изменить. Чтобы создать настраиваемую оверлейную сеть, вам нужно будет использовать команду docker network create
и использовать опцию --network
docker service create
Это ответ в основном основан на Сетевая документация режима Swarm