Продакшен продакшену рознь на самом деле. Мы например гоняли prod-трафик через java в докере. Но у нас был сервис типа прокси, то есть stateless, scalable и cloud-ready, без необходимости хранить сессии... - мечта девопса короче говоря. Там докер никому не мешал, зато деплой и оркестрация, релиз за 5 секунд и красота.
Ой, а кстати, что вообще делают со stateful приложениями и сервисами в дивном новом мире контейнеризации? Гоняют рядом с кластером и раскатывают по старинке условным ансиблом?
А деплой чем? Я попробовал оркестрировать ансиблом, но модули совсем не очень при каких то нестандартных вещах. Сильно смотрю сейчас на номад, да и вообще весь стек хашикорп. К8с очень велик и сложен для моих задач.
Разворот витрин данных - обычные веб-сервисы. Ну и прогон их от стендов тестирования до прода. Мне проще, мои базы данных можно считать стейтлес, данные в них не меняются и загружаются 1 раз в день.
Если уж так не нравится «портянка» в корне - делается отдельный том для docker и подключается на /var/lib/docker. Если с системного раздела регулярно снимаются снапшоты, то почти все нормальные люди и так создают отдельные тома для «левых» данных, типа /var, /tmp и т.п.
У меня как раз был nomad + consul + linkerd, поскольку я проиграла войну с ops-командой.
И я думаю что это была большая ошибка.
«hashicorp-стек» - это на самом деле миф, там нет никакой интеграции, даже на уровне форматов cli и конфигов. Это такой набор разрозненных и достаточно сырых утилит и если глянуть даже у самого номада cli-утилита задизайнена кое-как.
То есть если у k8s есть ресурсы есть действия и есть стандартный формат «выполнить действие с таким-то ресурсом», то у nomad будет:
nomad alloc-status
nomad job status
И вроде мелочь, но таких мелочей много.
Нет например cli-способа увеличить количество инстансов одного сервиса не зная полный конфиг сервиса. То есть я не могу сказать «job такая-то, увеличить количество инстансов на 5». Мне надо знать полный конфиг этого сервиса и задеплоить его как бы по новой. А узнать этот полный конфиг из номада можно в json-формате, который не совместим с hcl-форматом. И даже с json-форматом тоже не совместим. То есть там два json-формата: первым можно описать job для деплоя, а второй - это то что можно экспортировать из номада когда там уже всё запущено. И они разные.
hashicorp вроде как сделал плагин для номада в terraform. Вроде и то и то - их технология, но обновление плагина для поддержки новой версии номада делали больше полугода.
Я в итоге плюнула и настроила раскатку джоб из ansible, с шаблонами, переменными, поддержкой разных окружения и кластеров и т.п.
Для админа тоже там весело, логи например есть либо debug либо никаких. Интеграцию linkerd с consul для того чтобы healthcheck для сервисов работал наши админы открутили в первыую же неделю потому что нестабильно и не работает. Авторизации нет, namespaces нет, квот практически тоже нет...
Пришлось все это какими-то обертками и подпорками реализовывать.
И в общем хотели попроще а получилось что навертели вокруг якобы простого решения кучу недокументированных костылей, а сообщества которое помогло бы с ними справляться и делиться опытом нет. Так что ничего не выиграли в итоге.
Понятно что для моего простого случая мы там все запустили, нашли обходные пути и т.п., но как пошла вторая волна контейнеризации, с другим типом нагрузок и с бОльшим количеством команд-участников, проект по миграции на k8s откопали обратно. Теперь он вдруг он оказался в приоритете. И весь последний месяц пока я увольнялась каждый митинг народ кивал в мою сторону мол «а вот она же говорила» :)
И это я ещё не начала тему про port-forwarding. И какая эта боль когда у стандартного java-приложения 5 портов (main, actuator, jmx, debug и ykit) и с точки зрения nomad это все разные сервисы которым назначаются разные рандомные порты, а потом тебе надо перекурочивать систему мониторинга чтобы она училась сопоставлять healthcheck на порту таком-то и метрику потребления RAM на порту совсем другом , и что это оказывается тот же самый java процесс...
Проблема в том, что заканчивается место на диске. collaboraonly за сутки сожрала почти 50 гб, хз насколько нормально это. Но я решил отказаться от докера.
p.s. Сейчас у меня тоже есть раздел /var/lib/docker, но странное поведение докера так и осталось. А перевести его в режим чтобы он писал все свои данные только в файл - я не смог.
По-моему тут проблема с образом/контейнером, а не с docker'ом как таковым :) Надо смотреть, что именно творит ваша collaboraonly, что/куда пишет и в каких объемах.
Изучить стоит. Штука интересная. Я применение вижу для развертывания окружения для разработки, если оно нетривиальное. Также удобно для экспериментов. Вроде в кластерах используют с кубернетесом, но я не пробовал.