Назад | Перейти на главную страницу

Подчиненный IP-адрес Mesos для экземпляра службы, запущенной Marathon (контейнер докеров)

У меня есть образ докера, который я хотел бы запустить через Mesos / Marathon.

Я использую сеть BRIDGE в докере, и я хотел бы передать «общедоступный» (то есть не сеть docker0 контейнера) адрес подчиненного / докер-хоста mesos, на котором запускается контейнер, в начальный контейнер через env var или param, поэтому я могу рекламировать этот IP-адрес в ответах приложения (приложение является узлом Cassandra, и я заполню broadcast_address в cassandra.yaml с этим адресом)

Насколько я понимаю, я могу заставить Mesos перенаправлять любой конкретный порт (в настроенном диапазоне) по этому адресу обратно на адрес docker0 моего работающего контейнера. Если это правда, и я могу гарантировать, что экземпляр приложения (узел Cassandra) не будет перемещен с этого ведомого устройства, с парой ограничений, я могу иметь кластер Cassandra, запланированный мезо.

Мой вопрос: как мне получить IP-адрес ведомого (хоста докера) в экземпляре приложения Marathon при его запуске?

Вы не знаете IP-адрес, пока Marathon не найдет подходящий хост для задачи. Однако во время запуска задачи на подчиненном сервере Mesos некоторые свойства сохраняются в переменных ENV:

...
ULIMIT=-n 8192
HOST=slave01.example.com
MESOS_SLAVE_PID=slave(1)@192.168.1.2:5051
MARATHON_APP_RESOURCE_CPUS=0.1
MESOS_TASK_ID=dummy.eb6e1d9a-c2f0-11e5-a58b-00259057db2f

Если вас устраивает имя хоста, вы можете использовать HOST переменной или извлеките IP-адрес из MESOS_SLAVE_PID.

Если вы начнете mesos-slave с участием --ip=192.168.1.2, то оба HOST и LIBPROCESS_IP Переменная ENV будет установлена ​​на адрес хоста. Для пакета Мезосфера:

echo "192.168.1.2" > /etc/mesos-slave/ip

и перезапустите раб.

Еще один вариант - разрешить IP-адрес агента внутри контейнера Docker:

AGENT_IP=$(getent hosts ${HOST} | awk '{ print $1 }')