Linux DevOps

True Blue-green deploy to kubernetes

17.08.2019

Проблема

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

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

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

Решение

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

Пример

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

apiVersion: v1
kind: Service
metadata:
 name: my-app
 labels:
   app: my-app
spec:
 type: NodePort
 ports:
 - name: http
   port: 8080
   targetPort: 8080
 
 selector:
   app: my-app
   commitId: abcde123

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *