Portainer и Traefik

На днях поднимали небольшое продуктовое окружение на несколько нод. Для этого решили использовать Docker Swarm. Не смотря на то, что сам по себе Swarm мало отличается от "голого" докера, всё же приятно будет иметь инструмент для визуального контроля состояния всего кластера. Версии запущенных контейнеров посмотреть или переменные окружения проверить. Ну и вдвойне удобнее если такого рода задачи возникают редко и ты уже знать забыл что там и где настроено - раз в месяц например.

Пользуясь подвернувшимся случаем хочу поделиться тем, как мы это запускаем.

Подготовка

Прежде всего напомню что у нас на каждой ноде запускается Consul и наружу кластер торчит через Traefik. Вторым шагом идет склейка этого всего с помощью Consul Registrator. Теперь мы готовы запускать любые сервисы/контейнеры, требующие HTTP-доступа.

Docker Compose

Сразу перейдем к результирующему файлу. На прод он у нас доставляется и шаблонизируется ансиблом, но это "уже совсем другая история".

Portainer представляет из себя master-slave систему - агенты запущены на каждой ноде кластера, а властелин этого всего (включая web) запускается на управляющей ноде Docker Swarm Manager.

Для запуска агента на каждой ноде, используется политика размещения mode:global, а для мастера - mode:replicated с числом реплик 1. Также на мастера накладывается ограничение node.role=manager. Вот в целом и всё ✅.

docker stack deploy --prune --with-registry-auth portainer

Дальше Portainer зарегистрируется в Traefik через Consul и мы сможем смотреть что-же там происходит в этом хитром кластере...

Заключение

Всем спасибо, будут вопросы - обращайтесь :)