> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Личные облака: Nomad
- URL: https://www.rozhkov.me/private-clouds-nomad/
- Published: 2022-02-23T07:00:00.000Z
- Updated: 2022-02-23T10:20:21.000Z
- Author: Vova Rozhkov
- Tags: інструменти, робота

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

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

## [Nomad](https://www.nomadproject.io/)

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

В экосистеме Hashicorp ([Nomad](https://www.nomadproject.io/), [Consul](https://www.consul.io/), [Vault](https://www.vaultproject.io/)) есть всё, что мне нужно, и когда подвернулся новый проект, где менеджед кубер обошёлся бы слишком дорого, я взялся за прототипирование.

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

На эту историю я потратил около 2 дней возни, но в конце-концов всё одолел. Благодаря [cloud-init](https://cloudinit.readthedocs.io/en/latest/) удалось решить задачу автоматической установки всех нужных сервисов и соединения их в кластер, так что можно легко реплицировать и масштабировать эту инфраструктуру.

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

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

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

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

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

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

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