Личные облака: Nomad

Чтобы разгрузиться от тревожных новостей, на прошлых и этих выходных я плотно засел за реализацию личного облака для проектов.

Суть такова: я хочу удобный и понятный способ деплоить приложения, не теряя простоты Heroku но получив расширенную гибкость, лучше производительность и снизив расходы. На практике это означает что мне нужна инфраструктура с менеджед базой данных, https, масштабированием, приватным докер реестром и не за дорого. Сейчас все мои личные проекты работают на Heroku, а клиентские раскиданы по куче разных облачных провайдеров. Своё решение мне нужно как для того, чтобы снизить косты на Heroku, так и чтобы унифицировать инфраструктуру клиентов и упростить её эксплуатацию.

Nomad

Я уже давно облизывался на Hashicorp Nomad как легковесную альтернативу тяжёлому и сложному Kubernetes и завендорлоченному ECS. Полтора года назад я даже поднял полу-продакшн кластер для одного из клиентских решений, но проект схлопнулся и на том мои эксперименты закончились.

В экосистеме Hashicorp (Nomad, Consul, Vault) есть всё, что мне нужно, и когда подвернулся новый проект, где менеджед кубер обошёлся бы слишком дорого, я взялся за прототипирование.

План был такой: сделать терраформ модуль в котором описать стандартную структуру веб-сервиса (приватная сеть, бастион, балансировщик, менеджед база, автоскейлинг группа, докер реестр) которая бы в один клик подымалась и разворачивала Consul+Nomad кластера. Дальше с помощью GitLab туда уже бы деплоились нужные джобы.

На эту историю я потратил около 2 дней возни, но в конце-концов всё одолел. Благодаря cloud-init удалось решить задачу автоматической установки всех нужных сервисов и соединения их в кластер, так что можно легко реплицировать и масштабировать эту инфраструктуру.

Дальше я задеплоил туда своё приложение и навернул сверху ингресс в виде Traefik с LetsEncrypt конфигурацией. По незнанию я поднял кластер траефиков и некоторое время разбирался почему у меня не генерируются сертификаты, пока не дошло, что каждый запрос к LetsEncrypt генерирует свой challenge, а так как траефиков много, то они соревнуются друг с другом и отдают не те ответы. Хотите решить эту проблему—покупайте enterprise-edition или оставляйте только один инстанс. Не high-available, но пока так.

Вся эта связка: Nomad+Consul+Traefik круто заинтегрирована друг с другом, в интернете есть туториалы на всё и фактически, после того как я поднял железо, то джобы заработали с пол-пинка. У всех продуктов есть приятный и отзывчивый UI в котором легко получить нужную инфу.

У меня осталось несколько нерешённых задач: Vault для хранения секретов (сейчас я просто сложил их в Consul) и нормальный CI/CD. Из-за того, что кластер находится внутри приватной сети, подключиться к нему можно только по VPN, поэтому мой GitLab не имеет туда доступа чтобы дёрнуть редеплой. Есть несколько способов решить эту задачу (GitLab Runner или Waypoint внутри сети), но я пока не дошёл до реализации.

Часть работы после полного пересоздания инфраструктуры приходится делать вручную—создание секретов и конфигурацию vpn, но для остального уже есть готовый шаблон. Собрал Dockerfile, нажал кнопочку и оно поехало куда надо.

Nomad мне прям зашёл своей простотой и скоростью работы. Конечно, готовых решений по нему намного меньше чем по куберу, но у Hashicorp очень крутая документация и синергия между своими продуктами. Поэтому в планах у меня большая миграция разбросанных тут и там по облакам сервисов в свой nomad-кластер.

Позже я подготовлю подробный мануал как и что конфигурить, потому что в интернете есть только куски информации, и чтобы собрать всё в кучу и сделать работу от начала до конца, надо крепко запотеть.

Ну а на этих выходных я занимался уже подъемом такого же прототипа, но на базе Kubernetes. Об этом в следующей части.


Понравился материал? Подписывайся на мой телеграм канал: https://t.me/full_of_hatred