Подтвердить что ты не робот

Автоматическая самоконфигурация кластера etcd в качестве службы роуминга Docker

Я хочу найти способ развернуть кластер etcd в качестве службы Docker Swarm, который автоматически настроил бы себя без какого-либо взаимодействия. В принципе, я думаю о чем-то в духе этой команды:

docker service create --name etcd --replicas 3 my-custom-image/etcd

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

Мне нужен уникальный --name для каждого экземпляра, но я могу получить его с точки входа script, которая использовала бы export ETCD_NAME=$(hostname --short).

Проблема в том, что я застрял в начальной конфигурации. На основе руководства по кластеризации есть три варианта, но ни один из них не подходит:

  • Сценарий обнаружения DNS ближе всего к тому, что я ищу, но Docker не поддерживает обнаружение DNS SRV на данный момент. Я могу найти etcd, и я получу все IP-адреса контейнеров своих узлов, но нет записей _etcd-server._tcp.
  • Я не могу автоматически создавать ETCD_INITIAL_CLUSTER, потому что, пока я знаю IP-адреса, я не знаю имена других узлов, и я не знаю, как это можно понять. (Я не собираюсь открывать сокет Docker API для контейнера etcd для этого.)
  • Существует уже существовавший и т.д. кластер, и при поставке начального URI конфигурации из discovery.etcd.io - это возможное обходное решение, которое я заинтересован в том, чтобы не делать этого. Я пытаюсь "просто развернуть стек из этого docker-compose.yml, и он автоматически сделает все правильно, без вопросов".

Есть ли трюк, который я могу вытащить?

4b9b3361

Ответ 1

Как вы правильно сказали, что знаете IP-адреса ваших контейнеров узлов, поэтому предлагаемый трюк состоит в том, чтобы просто построить требуемые имена etcd в качестве производных от каждого IP-адреса node s.

  • внутри каждого контейнера etcd вызывается с использованием этого конкретного контейнера IP i.e. etcd-$ip
  • ETCD_INITIAL_CLUSTER заполняется с использованием других IP-адресов контейнеров аналогичным образом.

Имена могут быть такими же простыми, как etcd-$ip или даже лучше, то есть мы могли бы использовать netmask для вычисления IP-адреса node s в этой сети, чтобы сделать имена более красивыми.

В этом случае в простой конфигурации с тремя узлами можно было бы иметь имена типа etcd-02 etcd-03 и т.д.

Никаких особых требований для атрибута name, он просто должен быть уникальным и удобочитаемым для человека. Хотя это действительно похоже на трюк, он может работать