Зачем нам Spinnaker, если есть Python? Как мы написали свой «велосипед» для деплоя в K8s
Привет, Хабр!
Довольно долгое время мы использовали в своём окружении Spinnaker. Очень удобный, правда старомодный, инструмент, который справлялся со своими задачами. Однако чем дольше пользовались, тем больше становилось очевидно что Спиннакер малость избыточен, при этом очень прожорливый в плане потребления ресурсов, и тяжёлый в плане обслуживания и поддержки. Особенно когда перестали выходить новые версии CLI под Mac OS, и управление перешло в Докер контейнер. А уж когда после очередного обновления снова стали падать компоненты из-за нехватки памяти и отвалился SSO, пришло озарение...

Мы сели, подумали и решили: пора что-то менять. Посмотрели по сторонам в поисках альтернативы. Нам нужно было не так уж и много:
Следить за ECR репозиторием.
Видеть появление нового образа.
Присылать сообщение в Slack с двумя кнопками - деплоить или пропустить.
По нажатию кнопки деплоить новый образ в EKS.
Казалось бы, задача тривиальная. Но перебирая существующие решения, ничего простого и легковесного мы не нашли.
И тут прозвучала та самая фраза: «А что если написать свой велосипед?».
Так родился KED — Kubernetes ECR Deployer.
Что это и зачем оно вам?
Изначально мы делали КЕДа сугубо под себя (AWS ECR + Slack). Но аппетит приходит во время еды: мы поняли, что мир не замыкается на AWS, а Slack есть не у всех(да, мы подумали и о других). Поэтому мы немного “расширили” сознание код, сделали архитектуру модульной и выложили проект в Open Source.
Теперь KED поддерживает:
Репозитории: ECR, DockerHub (и можно дописать свои).
Мессенджеры: Slack, Telegram (и можно дописать свои).
Деплой: через Helm.
Как это работает под капотом
Логика работы проста и прозрачна, как мы изначально и планировали:
Polling: С заданной в конфиге периодичностью KED опрашивает репозиторий на наличие новых тегов.
Notification: Если находится новый образ, соответствующий маске, в чат (Slack/Telegram) прилетает уведомление.
Action: Сообщение интерактивное. В нем есть кнопки: «Развернуть» (Deploy) или «Пропустить» (Skip). Никакой магии консоли, просто ChatOps.

Прилетел новый образ Deployment: Если нажали «Развернуть», KED накатывает новую версию через Helm.




Фичи, за которые нам не стыдно
Мы постарались перенести лучшие практики из Spinnaker, но без его тяжеловесности:
Pre/Post Deploy Hooks: Как и во многих других системах, у нас можно запустить скрипты до и после установки. Нужно прогнать миграции или отправить метрику? Пожалуйста.
Модульность: Всё написано на Python. Если вам нужно добавить уведомления в Discord или поддержку Google Container Registry — это делается написанием одного модуля.
Rollbacks: Если что-то пошло не так с деплоем, или просто нужно вдруг накатить старую версию, можно вызвать бота и одной кнопкой откатиться на любую из предыдущих версий.
Где взять?
Мы выложили исходный код и инструкцию по установке на GitHub. Приглашаем потестить, потыкать палочкой и, конечно же, поругать (или похвалить) в issues.
Будем рады любым замечаниям, пулл-реквестам и комментариям. Надеемся, наш «велосипед» поможет кому-то сэкономить ресурсы кластера и нервы девопсов!
И да, у КЕДа нет своей иконки. Мы генерим каждый раз новую используя следующий промт:
Create an icon for the application that deployed images from ECR to Kubernetes. The icon should depict a sneaker, the Kubernetes icon, a gear, and the word KED.