Pull to refresh

Comments 12

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

полностью согласен. сейчас столкнулся именно с этим — некоторых базовых вещей до сих нет, хотя о них просили еще несколько лет назад. похоже, придется смотреть в сторону k8s, хотя изначально выбрал consul+nomad из-за своей простоты.

И не могу не добавить, хотя статья и не про это: consul — это service discovery не только для нод nomad'а, но и для запускаемых им сервисов. Если в jobs файле добавить небольшую секцию service, а сам consul посадить слушать порт 53 и настроить рекурсоры, то можно всегда иметь возможность узнать не только IP ноды, где в данный момент хостится сервис, но и даже динамические порты, которые торчат наружу
А каких функций к примеру в Номаде в данный момент не хватает?
лично я уткнулся в следующие проблемы:
1) настройка частной сети в nomad полностью отсутствует, хотя в том же docker-compose это делается без проблем. приходится делать самим докером (docker network create <сеть>). Для решения этой проблемы советуют колхоз в виде дополнительного таска типа exec, который бы поднимал сеть, но этот подход упирается в проблему №2
2) нет приоритетов тасков (по аналогии, в том же docker-compose есть depends_on), т.е. нельзя тот же таск, который создает сеть, поставить первым.
3) хотелось бы обработки событий, типа onStart/onStop, чтобы иметь возможность таким образом решить все ту же проблему с сетью, потому что погасить ее ведь тоже как-то надо
4) при попытке разобраться с инструкцией template напоролся на то, что нет ни офф документации по ней, ни каких-то отзывов пользователей. документация в общем и целом довольно скудная

вот с такими проблемами пришлось столкнуться при попытке поковырять nomad и перенести туда группу приложений, которые прекрасно работают в docker-compose. Наверняка список не полон
Спасибо. К слову, проблемы 2-3 есть и в docker swarm mode, но он совсем уж примитивный и последний год не показывает особо признаков жизни.

Если кто будет искать/читать про nomad.


  1. Топ фича для меня network_mode = host и динамические порты в приватной сетке с нулевым оверхедом на CNI (нужна приватность сети? в облаках с этим нет проблем, просто два кластера), т.е. command = "myserver", args = ["-addr", "${NOMAD_ADDR_http}"]
  2. Такая же проблема в кубе, просто падать или ждать поднятия на уровне приложения (сейчас не знаю, но раньше в кубе нельзя было задать политики на restart, они росли экспоненциально, в nomad это настраивается через restart stanza)
  3. Такое редко нужно, я просто через templates пишу entrypoint.sh
  4. templates это частный случай consul-template (отдельной утилиты, доки на нее полно)

Docker compose в любом случае не торт на проде. Вместо него можно использовать ansible docker_container. Почти тоже самое по синтаксису (!!!), только не оставляет следа на сервере.

Да, в данном варианте мы не в полной степени использовали Consul — на проектах использую его также для service discovery других сервисов, healthcheck'ов и прочего. Хотел добавить информацию про это в статье, но тема достойна отдельной статьи.

Из недостатка функций в Nomad столкнулся с проблемой организации кластера Redis — он подключается только через IP адрес и не поддерживает доменные имена (была идея сделать это через Consul). Nomad же не может дать ему внутренний IP адрес. Есть альтернативное решение, но оно показалось мне избыточным
Содержимое файла config.json: в конце фигурной скобки не хватает =)
Все верно x)

При копировании из файла пропустил эту скобку, исправил сейчас. Спасибо!
И есть сложные моменты, которые новичку сложно понять.
при установке консул просят указать интерфейс ( так как делаем это все на ВМ)
Необходимо добавить в конец:
«bind_addr»: "{{ GetInterfaceIP \«ens18\» }}"

А в конфиге server.hcl:
bind_addr = «0.0.0.0»

advertise {
rpc = «IP-ADRESS:4647»
serf= «IP-ADRESS:4648»
}

А в этом моменте, чуток подробней можно подробней?
Что же со стороны Consul? Давайте посмотрим. Переходим в панель управления Consul, на страницу nodes:
Куда переходить, какая машина, порт etc.
Я бы все-таки сделал ударение на то, что bind-addr != advertise adress чуть более, чем полностью.
ExecStart=/bin/bash -c '/usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui'


не совсем понял — почему сразу без баша нельзя запустить консул? Или в этом нет никакого магического смысла?
Разницы в данном случае нет — можно запускать и без префикса с башем. Тут уже дело привычки больше.

ExecStart=/usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui

Sign up to leave a comment.

Articles