Поделитесь опытом, как можно заимплементить следующий юзкейс:
Есть stateless приложение, общающееся с БД. Надо его деплоить и масштабировать, делаем Deployment объект с нужным имейджем, прописываем в окружение ссылку на секрет, где лежат креденшелы к БД. При создании новой версии приложения меняем имейдж версию. Всё просто и красиво.
Но что если инстансы этого приложения должны разговаривать с разными инстансами БД? Придется делать несколько деплойментов, и несколько секретов (на каждую БД). Плюс несколько ингрессов, чтобы клиента отправлять в нужную группу инстансов. Ок, делаем условный хелм чарт, при создании группы объектов переменными разруливаем.
И теперь при апдейте версии приложения нам нужно апдейтить не 1 деплоймент, а сразу целую кучу. Руками делать это чревато ошибками.
Но ок, пишем скрипт, который вытягивает деплойменты по лейблам, и проставляет им всем новую версию. Криво, но в общем случае должно работать.
А теперь сверху добавим требование, чтобы при создании новой такой группы инстансов приложения дергались ещё и внешние системы - ту же БД не хочется создавать руками (а в облаке можно запросить инстанс через API), и есть ещё пара интеграций, которые при создании/удалении группы инстансов нужно вызывать.
Получается, что при добавлении группы инстансов (деплоймента и всей пачки сопутствующих объектов) нужно ещё и сходить в несколько систем, и дернуть их руками (или через скрипт). А при удалении произвести обратные действия.
TL;DR нужно:
1) создавать/апдейтить/удалять кубовые объекты (деплойменты, секреты, ингрессы)
2) дергать при изменениях внешние API
3) при изменении версии приложения апдейтить имейдж во всех деплойментах (а не просто во всех репликах одного деплоймента), где это приложение крутится
Появляется желание это дело автоматизировать, и свести админскую деятельность к минимуму.
Напрашивается очевидная мысль написать под это кастомный оператор. Пока думаю в этом направлении, но, может, есть способы сделать это всё проще, и я упускаю что-то очевидное?