@lalatop

Kubernetes, десятки configmap и как это готовить?

Всем привет. Может кто подскажет или расскажет свой кейс, как удобно управлять конфигмапами куба, когда их сотни, и нужно их постоянно редачить, что-то добавлять, что-то удалять, потому что уже голова по швам от косяков с тем, как это все поддерживать
Есть один проект, в котором на данный момент, 35+ микросервисов и постоянно добавляются новые.
Имеется 4 окружения, дев тест релиз прод. Итого 120+ микросервисов
В каждом сервисе подключен бутстрап конфиг, в котором подключены 4-5 конфигмапов дополнительно (Всякие бизнес конфиги, конфиги с адресами, апликейшн и прочее),
разработка решила сделать так, что бы не маунтить все конфиги в апликуху, а только бустрап
При выдаче изменений версионных, в основном, требуется к примеру в 10-и конфигах сделать изменения. Всё вносится вручную, какие-то параметры надо удалить, какие-то добавить и так далее. Kustomize не катит. Автоматизировать изменение не представляю как. Далее конфигмапы деплоятся в куб из гита.
По итогу можно провтыкать изменить на каком-то окружении параметр, и всё..окружения уже не одинаково настроены.
Хранить одну копию конфигов, одного окружения, в ней делать изменения и раскатывать на всё остальное, тоже не получается.
Потому что..dev окружение, в нем в конфигах одни данные.. (адреса параметры и тд)
Тест и релиз находятся в другом кластере, у них тоже разные данные в конфигах.
По итогу раскатка изменений может занимать полтора-два дня. Это с учетом сборки и деплоя приложений.
У кого-то будут варианты как решить проблему с конфигмапами и как это оптимизировать всё?
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Тут читается не техническая а организационная проблема.

Не очень понятно но попробую дать совет.

Вот ты говоришь что требуется в 10 конфигах сделать изменения.
Какие? Они - взаимосвязаны? - Это должен быть 1 коммит в git.
Эти все изменения должны быть просмотрены глазами хотя-бы несколькими людьми.
Если цена изменения дорого стоит (инфраструктура) то по любому должна
быть бригада девопсов. Они - страхуют друг друга от случайной ошибки.
Если ты будешь брать на себя падения датацентров - то очень скоро
станешь пациентом кардиолога. Бери коллег для подстраховки.

Константы и зависимости - надо объявлять отдельно. Чтоб если меняется hostname
или имя свойства - то это должно быть ровно одно изменение. Как поддержать
константы в конфигах - я щас не помню но была куча всяких штук... толи Puppet
толи Ansible вобщем поищи сам. Я думаю таких много конфигураторов.

Когда несколько environments то на проекте создается просто несколько фолдеров типа
/dev
/qa
/uat

и в каждом фолдере лежит полностью сконфигурированная и оттестированная
копия всех конфигов. Переключение между env тоже должны происходит
изменением ровно 1 свойства.

Если внутри конфигов есть некая базовая конфигурация которая очень похожа
(прототип) то сделайте аналог COC (Convention Over Configuration). Пускай
прототип будет всегда. А наследники dev, qa, uat будут просто изменять
дельту. Пароль поменялся - в конфиге-наследнике - лежит ровно 1 строчка с паролем.
Других строк - не надо. Потому что они наследуются от прототипа.

Как технически реализовать COC - я не скажу. Это надо обсуждать. Я это делал
на Java проектах но это как-бы идея "на подумать". На проектах у меня были
*.properis файлы и эту конвенцию было реализовать несложно. С ЯМЛ ами я не делал.
Ну думаю что это возможно. Почему нет?
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
У вас просто организационная проблема, нужно переделать архитектурный подход.

В глаза кидаются мелочи типа

В каждом сервисе подключен бутстрап конфиг, в котором подключены 4-5 конфигмапов дополнительно

А почему у вас несколько конфигмапов на одно приложение, а не один конфигмап?

При выдаче изменений версионных, в основном, требуется к примеру в 10-и конфигах сделать изменения

Почему из-за изменения версии, нужно делать изменения в конфигмапах, тоже неясно. Что-то себе придумали, и при масштабировании оно оказалось неудобным.

По итогу можно провтыкать изменить на каком-то окружении параметр, и всё..окружения уже не одинаково настроены.

Делать статические параметры, и в конфигмапы выносить исключительно environment-related опции.

По вашему вопросу никто не скажет решения. Это нужно сесть и переделать.
У меня свыше 100 компонентов, десяток енвайрнментов. Конфигмап один на неймспейс, секрета два на неймспейс, в принципе достаточно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы