![image](https://habrastorage.org/getpro/habr/post_images/1fa/e69/e6f/1fae69e6f5c70e49c561eeecc13a5e2d.png)
Доброго времени суток, %username%. Пора расчехлить блог после 6 лет простоя и попробовать опять что-то полезное принести сообществу.
Я крайне удивлен, что на хабре до сих пор нет ни одной статьи про Swarmpit. Я конечно понимаю, что наверняка большинство изучая Docker останавливаются собственно на нем и потом пытаются забраться на Эверест под названием Kubernetes. Не знаю точных чисел, но думаю тут большинство теряются и либо вообще забивают на Docker либо только его и используют. А зря!
Docker Swarm это почти идеальная система для почти всех. Я очень сомневаюсь, что действительно большому количеству людей нужен Kubernetes. Я убил на него почти сутки и понял, что убью еще штук 30, чтобы потом его спокойно использовать, НО я простой программист и вся эта крутая DevOps движуха вообще не о программировании. И тут я услышал про Docker Swarm и за 1 сутки абсолютно легко в него вник.
Для кого нужен Docker Swarm? Вы уже прониклись отличными возможностями Docker экосистемы. Ваши приложения состоят из микросервисов. При этом у Вас несколько серверов и хотелось бы и отказоустойчивость иметь и нагрузку как-то регулировать.
И в этой статье я вообще не буду описывать как его настроить и что это такое. Я пойду еще дальше и покажу безумно простой инструмент для работы с уже настроенным кластером. Да, кластер нужно настроить, это на самом деле всего пара команд (подробнее тут):
docker swarm init
docker swarm join
В целом я бы мог просто оставить ссылку на сайт Swarmpit и закончить, Вы все умеете читать, а устанавливается он вообще 1 командой и там даже думать не нужно, Вы просто расслабляетесь и запускаете свои контейнеры.
Ссылка вот:
Но я все-таки немного опишу и покажу скриншоты из этой чудесной админки.
1. Главный экран
Здесь собрана вся информация о кластере. Также сюда можно закрепить избранные сервисы и следить за их статусом:
![image](https://habrastorage.org/getpro/habr/post_images/9e8/3c7/334/9e83c73348c1a7713f7124e331ddd073.png)
2. Подключение сторонних реестров
По умолчанию Swarmpit будет искать образы в hub.docker.com
![image](https://habrastorage.org/getpro/habr/post_images/859/a56/a22/859a56a22257a13f5a8420b914cea611.png)
3. Добавление нового сервиса
Тут все предельно просто и понятно. Сначала находим образ в открытом или закрытых реестрах.
![image](https://habrastorage.org/getpro/habr/post_images/554/8d7/0ad/5548d70ad4540fea19f0d60fe851d30d.png)
Выбираем версию, название и само собой режим: глобальный или реплицированный. Также можно задать команду на выполнение:
![image](https://habrastorage.org/getpro/habr/post_images/34c/ff1/6cf/34cff16cfbea72a93e05df8738755144.png)
Затем настраиваем его сеть. Может добавить из общих, настроить порты и дать hostname alias для сервиса.
![image](https://habrastorage.org/getpro/habr/post_images/e40/560/1f8/e405601f8a931c464cc012eabb96bba3.png)
Устанавливаем переменные среды, подключаем хранилища, добавляем конфиги и секретные конфиги.
![image](https://habrastorage.org/getpro/habr/post_images/fdb/3dd/6ce/fdb3dd6ce794de2c4dbdf2701cf0a837.png)
Устанавливаем лимиты для приложения:
![image](https://habrastorage.org/getpro/habr/post_images/927/0f5/f3c/9270f5f3cc6ce05c002d4aff24fc341e.png)
Можем выдать сервису теги, включить автообновление образа, выдать ноды для деплоя и вообще настроить политику редеплоя, чтобы избежать простоя приложения:
![image](https://habrastorage.org/getpro/habr/post_images/04f/601/2c4/04f6012c4901ab0b1d97a54c7f44d5ea.png)
Настройка логов:
![image](https://habrastorage.org/getpro/habr/post_images/f04/b02/ec3/f04b02ec31f08dd54dd832457ca72129.png)
4. Само собой можно добавлять сети и изменять их
![image](https://habrastorage.org/getpro/habr/post_images/5dd/eab/cf6/5ddeabcf601de005584f2e67c4219a27.png)
5. Просматривать подключенные к кластеру ноды
На одной машине у Вас может быть несколько нод (почитайте про docker-machine), но инстанс Swarmpit может быть подключен только к одному кластеру и только за ним будет следить.
![image](https://habrastorage.org/getpro/habr/post_images/c24/527/5c0/c245275c0a8be1aff702c11bfd4d39dc.png)
6. Добавлять хранилища, контролируемые docker
![image](https://habrastorage.org/getpro/habr/post_images/ad4/eb2/637/ad4eb26376e475c9078db98dbccfb7c8.png)
7. Ну и само собой добавлять конфиги
![image](https://habrastorage.org/getpro/habr/post_images/491/9ce/d80/4919ced803c3fa2d1b05fc1201fc5291.png)
8. Также можно добавлять пользователей с 2-мя типами доступа
![image](https://habrastorage.org/getpro/habr/post_images/03f/43f/0b4/03f43f0b45dcb8068b704ce098887a3c.png)
Т.к. это docker swarm само собой можно создавать стеки и их запуск возможен только с помощью docker-compose формата:
![image](https://habrastorage.org/getpro/habr/post_images/24a/291/816/24a291816b67f68bd4bbf7b8e672d7b3.png)
Плюсы:
+Я не кунг-фу мастер консоли, хоть и разворачивал в ней часть своих сервисов и убивал на это очень много времени. Swarmpit это время здорово экономит, особенно когда начинаешь играться с конфигами для того же nginx например. И вскоре обещают сделать версионирование конфигов с авторедеплоем связанных сервисов. Т.е. изменили строчку, сохранили и конфиг автоматом полетел во все сервисы, где он до этого был указан.
+Также я не упомянул наличие API и вот тут как раз шикарные возможности по управлению кластером своей логикой. Вы можете через API следить за состоянием, при всплеске добавлять реплик приложению, а при уменьшении их же уменьшать.
Минусы:
-Мастер пароль никак нельзя сбросить и нужно переустанавливать кластер, если Вы его потеряли
-Разработчиков вроде 1-2, поэтому фичи добавляют долго, но на текущий момент критических багов я не обнаружил
-Всякие мелкие недоработки, но большая часть из них висит в issue и разработчики обещают к 2.0 все выполнить
-Контроль только над подключенным кластером, никакой поддержки сторонних кластеров или подключения к ним нет и видимо не будет
Собственно еще раз дам ссылку на сайт Swarmpit тыц
Github страница Swarmpit тыц.
На данный момент я сделал еще 2 open source проекта на NodeJS, если интересно могу рассказать про них тоже. 1-й это редирект для телеграма без рекламы и ультрамелкий (Docker Image весит 27МБ и тоже написан на NodeJS без единого пакета), 2-й посложнее это cdn сервер для изображений, который налету может модифицировать изображения (ресайз, смена формата, качество итд) и может сэкономить 200$ (может и меньше, такова цена Business CloudFlare который позволяет делать так же).
dds
А у меня с docker swarm наоборот не сложилось. Очень многое приходилось делать руками, писать скрипты, допиливать напильником. k8s же хоть и требовал начального погружения, но зато очень многие проблемы решаются с пол пинка. Я уже не говорю про комьюнити которое просто огромное. В то время когда я взялся за k8s я был просто разработчиком, после чего так затянуло, что перешли переквалифицироваться в sre
Assorium Автор
Безусловно k8s крайне мощный и всеобъемлющий. Но тут все-таки проблема времени, кому-то он быстрее дается, а кто-то я =)
Ну и для средней коммерции swarm хватает, главное очень упрощает деплой и разработку, особенно со Swarmpit. И я могу делать то, что умею, а именно программировать.
RevanScript
Я тоже смотрел в сторону k8s, немного охренел от количества информации, в которой нужно разобраться, и решил что Swarm пока что для моего мелкого кластера хватит с головой :)