Прогрессивная доставка (2 части серии)
Арго развертывание это прогрессивный контроллер доставки, созданный для Kubernetes. Это позволяет развертывать ваше приложение с минимальными/нулевыми простоями, приняв постепенный способ развертывания вместо того, чтобы принимать подход «все сразу».
Argo Rollouts Supertrges ваши кластер Kubernetes и в дополнение к обновлениям Rolling Теперь вы можете сделать
- Синие/зеленые развертывания
- Канарские развертывания
- A/B тесты
- Автоматические откаты
- Интегрированный метрический анализ
В этой статье мы увидим простой пример, который сочетает в себе синие/зеленые развертывания с дымовыми тестами, которые решают, будут ли новая версия приложений будет продвигаться или нет.
Как работают синие/зеленые развертывания
Прежде чем мы посмотрим на волшебный соус, стоящий за развертыванием Арго, важно знать основы, лежащие в основе синего/зеленого развертывания (также известного как красный/черный).
Вначале есть только одна версия активна (один цвет). Как только новое приложение будет развернуто, создан второй экземпляр приложения (два цвета). Критическая точка здесь состоит в том, что новый цвет не получает живой трафик. Все пользователи все еще находятся на старой версии.
Как только разработчики уверены, что новая версия готова к работе, весь живой трафик переключается на второй цвет. Большим преимуществом здесь является то, что если что-то пойдет не так, разработчики могут просто переключить трафик обратно в предыдущую версию. Всегда быстрее переключать балансировщик нагрузки, чем снова перераспределение.
Через некоторое время предыдущая версия может быть полностью отброшена. Это в основном из -за потраченных впустую ресурсов, но не строго необходимых. В нескольких вариациях предыдущий цвет может оставаться позади в качестве отказа.
Предварительный просмотр следующего цвета с разведывателями ARGO
Теперь, когда мы видели, как работают синие/зеленые развертывания в целом, давайте посмотрим, что делает Argo Dellouts с Kubernetes.
Rollout Argo — контроллер Kubernetes и имеет Несколько вариантов синего/зеленых развертываний , но самое интересное — это служба «Предварительный просмотр», которая позволяет проверить новый цвет перед тем, как сделать переключатель трафика к Live пользователей. Вы можете легко установить оператор в свой кластер, следуя инструкциям.
Вы можете найти пример приложения в https://github.com/codefresh-contrib/argo-rollout-blean-green-sample-app . Это простое приложение Java с двумя струями и без других зависимостей.
Чтобы выполнить первоначальное развертывание, клонируйте репозиторий GIT локально и отредактируйте файл сине-зеленый ручный одобрение/развертывание.yaml
заменив Cf_short_revision
с любым доступным тегом от Dockerhub ( Например 8b39c04
Несомненно
Сохраните файл, а затем выполните первое развертывание с
kubectl create ns blue-green kubectl apply -f ./blue-green-manual-approval -n blue-green
Вот начальное состояние, использующее Kubeview Graphical Tool Анкет
Мы видим, что приложение имеет два стручка, и у нас также есть два службы, указывающие на них. Сервис под названием «Развертывание-голубые-активные»-это то, что для живого трафика. Один по имени «Rollout-Bluegreen-Preview» является внутренним и в настоящее время не должно служить какого-либо трафика. Это также указывает на тот же цвет, что и живой.
Если вы также хотите отслеживать вещи из командной строки, обязательно установите Арго развертывание CLI и бежать
kubectl argo rollouts get rollout spring-sample-app-deployment --watch -n blue-green
Следующим шагом является создание новой версии приложения. Вы можете либо снова изменить тег изображения на манифесте (и запустить kubectl Apply
снова) или просто использовать ярлык, предлагаемый Argo Dillouts
kubectl argo rollouts set image spring-sample-app-deployment spring-sample-app-container=kostiscodefresh/argo-rollouts-blue-green-sample-app:9c7732e -n blue-green
Тег изображения, которую вы используете, является произвольным. Это просто должно отличаться от текущего. Как только Revouts ARGO обнаружит изменения, это сделает следующее:
- Создайте новую реплику, установленные с 2 стручками для нового цвета
- Перенаправьте услугу «Предварительный просмотр» для них
Вот как это выглядит в Kubeview:
CLI также сообщает второй реплиз:
Это одна из самых важных точек в синем/зеленом развертывании. На этом этапе все живые пользователи все еще находятся в старой версии приложения. Для них это дело как обычно, и они полностью не влияют на то, что происходит за кулисами.
Теперь ваша обязана проверить следующую версию, используя службу «Предварительный просмотр», который предлагает argo Rollouts. Возможно, вам нужно посмотреть на проверки здоровья, проверить его метрики или даже лучше провести некоторые тесты на дым, которые подтверждают правильность новой версии.
Вы можете легко найти IP-адрес предварительного просмотра с
kubectl get svc rollout-bluegreen-preview -n blue-green
В приложении есть фиктивные конечные точки на/привод/здоровье и/привод/метрики, которые вы можете посетить со своим браузером. Мы автоматизируем процесс с Codefresh в следующем разделе.
Как только все выглядит хорошо, мы можем продвигать развертывание с
kubectl argo rollouts promote spring-sample-app-deployment -n blue-green
Это момент истины. Эта команда будет инструктировать развертывание Argo для переключения живого трафика (то есть всех ваших пользователей на новую версию).
Как вы можете видеть, что обе службы теперь указывают на новую версию. Старая версия все еще сохраняется для быстрых откатов. После указанного количества времени (30 -секундные — значение по умолчанию), развертывание Argo полностью разрушит старую версию.
Теперь мы вернемся к исходному состоянию только с двумя подводами новой версии приложения.
Новое развертывание повторит весь процесс.
Если по какой -то причине ваши тесты на дым терпят неудачу, и вы не хотите продвигать новую версию, вы можете преодолеть весь процесс с
kubectl argo rollouts abort spring-sample-app-deployment -n blue-green
Вы также можете вернуться к предыдущей версии с
kubectl argo rollouts undo spring-sample-app-deployment -n blue-green
В Argo Dellowous есть больше вариантов, которые позволяют вам выбрать количество версий, которые остаются позади, количество времени, которое сохраняется каждая версия, к какой версии для отката и так далее.
Увидеть весь Спемент развертывания Больше подробностей.
Обратите внимание также, что для простоты причины, два служба в примере питаются от балансировщиков нагрузки. Проверьте цены вашего облачного провайдера, прежде чем запустить этот пример самостоятельно, и обязательно вычистите все после того, как вы закончите.
Автоматизация всего с помощью трубопровода CodeFresh
Теперь, когда мы видели, как вы можете выполнять вручную синий/зеленый развертывание, пришло время автоматизировать процесс развертывания с помощью трубопроводов CodeFresh.
Приложение поставляется с некоторыми простыми интеграционными тестами (которые требуют запуска приложения). Они будут использоваться в качестве тестов на дым.
Следуя передовым методам, цель теста на дым настраивается (а не жестко кодируется на Localhost или другое имя). Это означает, что вы можете легко запустить тесты на дым с любой целью независимо от фактического IP вашего Loadbalancer.
Мы создадим следующий трубопровод:
Этот трубопровод делает следующее:
- Клоны исходный код приложения
- Строит изображение Docker
- Развертывает Приложение путем обновления манифестов Kubernetes. Арго развертывает новый манифест и создает новый «цвет» для следующей версии
- Запускает интеграционные тесты против сервиса «Предварительный просмотр», созданной Argo Dinlouts. Живые пользователи все еще находятся на предыдущей/стабильной версии приложения.
- Если тестирование на дым проходит новый цвет, продвигается и становится новой активной версией
- Если дымовые тесты проваливаются, новый цвет отбрасывается, все живые пользователи никоим образом не влияют
Вот Определение трубопровода :
codefresh.yml version: "1.0" stages: - prepare - build - deploy - finish steps: clone: type: "git-clone" stage: prepare description: "Cloning main repository..." repo: '${{CF_REPO_OWNER}}/${{CF_REPO_NAME}}' revision: "${{CF_BRANCH}}" build_app_image: title: Building Docker Image type: build stage: build image_name: kostiscodefresh/argo-rollouts-blue-green-sample-app working_directory: "${{clone}}" tags: - "latest" - '${{CF_SHORT_REVISION}}' dockerfile: Dockerfile start_deployment: title: Deploying new color stage: deploy image: codefresh/cf-deploy-kubernetes:master working_directory: "${{clone}}" commands: - /cf-deploy-kubernetes ./blue-green-manual-approval/service.yaml - /cf-deploy-kubernetes ./blue-green-manual-approval/service-preview.yaml - /cf-deploy-kubernetes ./blue-green-manual-approval/rollout.yaml environment: - KUBECONTEXT=mydemoAkscluster@BizSpark Plus - KUBERNETES_NAMESPACE=blue-green run_integration_tests: title: Smoke tests stage: deploy image: maven:3.5.2-jdk-8-alpine working_directory: "${{clone}}" fail_fast: false commands: - mvn -Dmaven.repo.local=/codefresh/volume/m2_repository verify -Dserver.host=http://13.86.102.74 -Dserver.port=80 promote_color: title: Switching traffic to new color stage: finish image: kostiscodefresh/kubectl-argo-rollouts:latest commands: - /app/kubectl-argo-rollouts-linux-amd64 promote spring-sample-app-deployment -n blue-green --context "mydemoAkscluster@BizSpark Plus" when: steps: - name: run_integration_tests on: - success abort_deployment: title: Keeping the existing color stage: finish image: kostiscodefresh/kubectl-argo-rollouts:latest commands: - /app/kubectl-argo-rollouts-linux-amd64 argo rollouts undo spring-sample-app-deployment -n blue-green --context "mydemoAkscluster@BizSpark Plus" when: steps: - name: run_integration_tests on: - failure
Теперь у вас есть истинное непрерывное развертывание! Все развертывания являются полностью автоматическими, и «плохие» версии приложений (которые не проходят тесты на дым) никогда не достигнут производства.
Rollouts Argo много возможностей, которые мы увидим на следующих постах этой серии. Более подробную информацию о развертывании синего/зеленого, а также пример с ручным одобрением см. страница документации Анкет
Новичок в codefresh? Создайте свою бесплатную учетную запись сегодня !
Прогрессивная доставка (2 части серии)
Оригинал: «https://dev.to/codefreshio/minimize-failed-deployments-with-argo-rollouts-and-smoke-tests-46e»