Konstantin
Как разделять энв для дева, стейджа, etc?
так уже от задачи к задаче. либо меняется профиль приложения, сохраненный в образе, типа spring-profile либо каждую переменную передаёшь
Silver 👻
Вот если каждую переменную, то тут уже не выходит IaC
Silver 👻
У меня маунт файлов (на каждом серваке /opt/project/.env)
Т.е. у тебя нет автоскейлинг группы, где сервера автоматом добавляются?
Eduard
Т.е. у тебя нет автоскейлинг группы, где сервера автоматом добавляются?
Попадают туды ансиблом, креды валяются на серваке в офисе под луксом
Eduard
Т.е. у тебя нет автоскейлинг группы, где сервера автоматом добавляются?
Автоскейла нет, только вручную запуск плэйбуков. Но к заббиксу прибить не сложно
Silver 👻
да перестань, чего это нет?
Ну если только через энв файлы
Silver 👻
Но и это не решает проблемы автоскейлинга и добавления серверов
Silver 👻
Нфс как выход, но это точка отказа
Konstantin
Ну если только через энв файлы
https://github.com/sameersbn/docker-gitlab/blob/master/kubernetes/gitlab-rc.yml
Konstantin
рандом конфиг с гитхаба
Silver 👻
Это я понимаю. Ты предлагаешь как раз вариант только для разных энвов разные файлы
Silver 👻
Копипаста и дублирование
Silver 👻
Это ж плохой подход. Или я не верно понимаю?
Konstantin
Копипаста и дублирование
ты так говоришь, как будто готовя ансибл ты вводишь одну команду и он тебе генерит плейбуки и конфиги под любую задачу, вжжууух
Silver 👻
Я их руками пишу и стараюсь не допускать дублирования
Silver 👻
Ну и инвентори максимально использую с переменными
Konstantin
запуск то всё равно идёт через указание хостов\переменных
Konstantin
чем тут не так
Silver 👻
Только хоста
Silver 👻
Все остальное автоматом
Silver 👻
Хост файла
Konstantin
Только хоста
у тебя для каждого хоста отдельная роль\конфиги?
Silver 👻
Нет, я имел ввиду хостс файл
Silver 👻
Инвентори
Silver 👻
Можем перейти в личку, ибо оффтопик уже
Konstantin
Ладно, забей, а то хотел по аналогии с ансиблом показать, а в итоге про ансибл говорим))
Silver 👻
:)
Lex
Допустим вот в одном окружении Линк на одну базу, а в другом Линк в другую базу
Передаете линк на базу в env и потом подставляете в конфиг. Все параметры зависимые от среды передаются (внезапно) как переменные среды.
Lex
Не нравится точка входа которая генерирует конфиг -- впиливайте в приложение поддержку переменных среды.
Silver 👻
Передаете линк на базу в env и потом подставляете в конфиг. Все параметры зависимые от среды передаются (внезапно) как переменные среды.
То есть, если у меня 5 сред, то и ямлов для деплоймента тоже 5? Не кажется слабо масштабируемым решением?
Lex
Нет, у тебя 5 конфигмапов в кубере и переменные среды берутся оттуда
Konstantin
То есть, если у меня 5 сред, то и ямлов для деплоймента тоже 5? Не кажется слабо масштабируемым решением?
Ты про клонирование говоришь, при масштабировании конфиг не меняется
Lex
Мало того, если вспомнить про сервис дискавери то будет еще меньше
Silver 👻
Масштабирование - это понятие относительное. Масштабировать можно и энвы. Контекст разный может быть
Silver 👻
Не пинайте ногами. Пытаюсь сложить в голове логичную структуру.
Konstantin
Я хз какие ещё контексты у масштабирования, кроме как изменения размера
Lex
Так, мы сейчас конкретную проблему решаем или сферически в вакууме делаем всех счастивыми?
Lex
Silver 👻
google://kubernetes+configmap
пошел читать. Спасибо
Lex
И вот тоже полезно: https://12factor.net/
Дмитрий Харитонов
:)
Я ничего не понял о задаче, но конфиги можно хранить не nfs, а в том же glusterfs и единой точки отказа не будет и маунтить можно на хост прям или в поду. Если URL нужно внутрь контейнера при сборке Dockerfile прокинуть, то лучше передавать переменную с урлом через —build-arg при сборке конетенйра через docker build и иметь единый Dockerfile для разных сред . При этом внутри файла переменная активируется через директиву ARG. Если у тебя внутри приложения есть конфиг файл, а само приложения не умеет из переменных окружения подхватывать настройки, а только из файла, то если конфиг у тебя в формате yaml, то прокатит такая конструкция back_host: "<%= ENV.fetch('BACK_HOST', 'http://localhost:3000') %>" в конфиг файле Для puba.rb например такой формат environment ENV.fetch('RAILS_ENV') { "development" } Такая конструкция позволяет в файл прокидывать переменные из окружения.
Lex
Я ничего не понял о задаче, но конфиги можно хранить не nfs, а в том же glusterfs и единой точки отказа не будет и маунтить можно на хост прям или в поду. Если URL нужно внутрь контейнера при сборке Dockerfile прокинуть, то лучше передавать переменную с урлом через —build-arg при сборке конетенйра через docker build и иметь единый Dockerfile для разных сред . При этом внутри файла переменная активируется через директиву ARG. Если у тебя внутри приложения есть конфиг файл, а само приложения не умеет из переменных окружения подхватывать настройки, а только из файла, то если конфиг у тебя в формате yaml, то прокатит такая конструкция back_host: "<%= ENV.fetch('BACK_HOST', 'http://localhost:3000') %>" в конфиг файле Для puba.rb например такой формат environment ENV.fetch('RAILS_ENV') { "development" } Такая конструкция позволяет в файл прокидывать переменные из окружения.
Но зачем эти костыли?
Lex
Гластер, нфс?
Silver 👻
Gluster редкое г... Наелся я его уже.
Silver 👻
Про конфигмапы интересно. Спасибо большое.
Gleb
Gluster редкое г... Наелся я его уже.
не очень то и редкое, но говно то еще да
Дмитрий Харитонов
То есть, если у меня 5 сред, то и ямлов для деплоймента тоже 5? Не кажется слабо масштабируемым решением?
Пока писал не заметил что у тебя там yaml файл так что такая конструкция должна работать database: <%= ENV.fetch('MONGOID_DATABASE') %>
Konstantin
Гластер, нфс?
И контейнеры оркестрировать через systemd)
Lex
Есть конфигмапы, есть секреты, есть хелм, есть init контейнера, но нет, будем жевать кактус...
Дмитрий Харитонов
будет один файл, а его содержание будет меняться в зависимости от того какие переменные ты туда передашь во время запуска контейнера
Silver 👻
И вот тоже полезно: https://12factor.net/
12фактор знаю, да. Но не всегда применимо, к сожалению.
Дмитрий Харитонов
Я просто нихрена не понимаю о чём вы пишете)
Дмитрий Харитонов
где легачи, какие файлы, какие переменные на каком этапе, всё в кучу)
Silver 👻
Свое легаси или чужое?
OTRS, как пример. Древний как говно мамонта. Лезть туда руками я совсем не хочу.
Harry
Коллеги, добрый день. Есть такой архитектурный вопрос. Изучаю микросервисы, пытаюсь понять, как их правильно организовать. Стек простой: golang+cockroachdb. Итого у меня есть три варианта: 1) Контейнер приложения и контейнер базы лежат в одном поде внутри стейтфул-сета. 2) приложение и база в разных подах, база в стейтфул-сете, у базы отдельно есть балансировщик. 3) базу вообще вынести из кубов. Как организовать все кошерно/феншуйно?
Lex
OTRS, как пример. Древний как говно мамонта. Лезть туда руками я совсем не хочу.
И его несколько энвов держать надо и еще эти энвы плодить часто?
Sergei
И где не применимо?
что 12 факторов говорят про стораджа? :)
Silver 👻
И его несколько энвов держать надо и еще эти энвы плодить часто?
Да, на него завязаны наши сервисы. QA'м хочется поднимать полное окружение для тестов.
Harry
А задача какая?
Задача - каталог каких-либо итемов, другие приложения разные запросы к нему делают и получают данные
Lex
Да, на него завязаны наши сервисы. QA'м хочется поднимать полное окружение для тестов.
Ну тогда в чем проблема создать обвязку в качестве точки входа, которая и будет генерить конфиг на основе переменных среды?
Harry
Тут проблема не в задаче а в правильности размещения приложений.
Silver 👻
Ок. Опишу более детально. Есть около 40 сервисов (часть своих, часть легаси). У каждого из них есть свои конфиги (свои можно переписать на ENV, но это будет долго). Сейчас есть сервис хранения и раздачи конфигов. При подъеме сервиса дергаем курлом конфиг и поднимаемся. Вроде все отлично, но меня смущает безопасность и сама идеология. Хотелось бы отказаться от этого сервиса с конфигами и хранить их как-то более правильно.
Andor
Етцд/консул
Andor
Вместо курла
Andor
Не?
Anton
чем будет отличаться от прошлого новаторского подхода с сервисом хранения и раздачи конфигов? =)
Anton
опять запускаешь что то, что непонятно как конфигурируется и неизвестно какое состояние имеет
Silver 👻
Вот
Silver 👻
Конфигмап выглядит куда лучше. Хотя я пока и не до конца понимаю