DevOps / Linux

True Blue-green deploy to kubernetes

17.08.2019

Проблема

При дефолтном роллауте какое-то время одновременно доступны старый и новый деплоймент.

Для некоторых приложений это критично, если изменения в коде не обратносовместимые. (к примеру, используется CDN и имена файлов не меняются, а меняются только аргументы обращений к ним: /index.0.js?t=12G33s15c)

Такая стратегия обновления называется ramped.

Решение

Честный blue-green, когда переключение со старой версии софта на новую версию происходит одномоментно.

Пример

Необходимо в деплоймент добавить новый label (в нашем случае commitId ), по которому определять selector для сервиса.

Обновление конфигурации сервиса в CI необходимо выполнять после успешного деплоя деплоймента (проверяя успешность с помощью rollout status deployment). Чтобы успеть вовремя переключить сервис на новые поды, необходимо добавить sleep в prestop контейнера.