2016-10-19 9 views
0

У меня есть докционированное приложение, разделенное на несколько контейнеров (несколько интерфейсных и серверных серверов, балансировщик нагрузки, mysql, elasticsearch и т. Д.). Конфигурация балансировщика нагрузки должна знать, какие контейнеры установлены, и поэтому я регистрирую службы при обнаружении службы Consul.Нужно ли моим изображениям докеров иметь свои собственные экземпляры клиента-консула?

Но я не совсем уверен, стоит ли запускать агента консула на каждом контейнере докера, вместо того чтобы использовать хост-докер, чтобы контролировать все запущенные контейнеры докеров и регистрировать их через HTTP-API Консула.

Есть ли какая-нибудь лучшая практика, вокруг которой я могу следовать?

ответ

0

Я не уверен, есть ли лучшие практики, но я нашел этот пост в блоге очень полезным Automatic Docker Service Announcement with Registrator. Он рассказывает о нескольких подходах к регистрации услуг и их преимуществах и недостатках.

Более конкретно, отвечая на ваш вопрос, нет, вы не должны запускать агента консула внутри каждого контейнера.

Один из вариантов - запустить агент консула на каждом хосте. Затем вы можете использовать что-то вроде Registrator, чтобы следить за запуском и закрытием новых контейнеров и автоматически обновлять Consul. Главное преимущество заключается в том, что в вашем контейнере есть одно задание, запустите приложение. У регистратора также есть одна работа, чтобы следить за событиями запуска/остановки контейнера и записывать их в Консуле. Ваши контейнеры ничего не знали о консуле и все еще участвуют в открытии службы.

Существует также Autopilot pattern, который предлагает перейти в другом направлении и сделать ваше заявление Консулом осведомленным, чтобы он мог сообщать о своем собственном здоровье и обнаруживать его собственные зависимости. Большая часть информации, которую я видел по этой схеме, - Joyent (например, это blog post). Стоит прочитать для другой перспективы достижения масштабируемости и устойчивости в приложениях.

2

Вам не нужно запускать агента консула на каждом контейнере докера, вы можете просто воспользоваться консулом, подвергая его DNS вашему локальному. Следующее не из контейнера, но вы все равно поймете, что я делаю.

Далее команда, я использую для запуска моего агента

consul agent -data-dir /var/lib/consul/ -config-dir /etc/consul.d/ -bind 10.X.X.X -dns-port 53 -join consul-master 

Примечания: Я добавил и т.д. запись// хостов для консула-мастеров с его IP, и я также добавил сервер имен для 127.0. 0.1 в файле /etc/resolv.conf.

В каталоге /etc/consul.d/ содержится мой файл конфигурации для службы. Ниже приведен пример:

{ 
    "service": { 
    "name": "stackoverflow", 
    "tags": [ 
     "example" 
    ], 
    "port": 5000 
    } 
} 

Теперь, как только мой консулом агент работает, я могу проверить на любом компьютере с консулом агентом (клиент/сервер) для службы с помощью команды копания или запрос АНИ HTTP следующим образом:

curl http://stackoverflow.service.consul:80/api/v1/ping 
{"success":true,"message":"pong"} 

Для DNS:

dig @127.0.0.1 -p 53 stackoverflow.service.consul 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.55.amzn1 <<>> @127.0.0.1 -p 53 tracker.service.consul 
; (1 server found) 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57167 
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 
;; WARNING: recursion requested but not available 

;; QUESTION SECTION: 
;tracker.service.consul.  IN A 

;; ANSWER SECTION: 
tracker.service.consul. 0 IN A X.X.X.X 

;; Query time: 1 msec 
;; SERVER: 127.0.0.1#53(127.0.0.1) 
;; WHEN: Fri Jul 7 11:29:01 2017 
;; MSG SIZE rcvd: 56 

Надежда, что помогает и дает четкое представление о нем

 Смежные вопросы

  • Нет связанных вопросов^_^