Рубрики
Uncategorized

Минимизировать неудачные развертывания с развертыванием Арго и Дымовые испытания

Rollouts ARGO — это прогрессивный контроллер доставки для Kubernetes. Это позволяет вам развернуть йо … Помечено Kubernetes, Argo, DevOps, CloudNative.

Прогрессивная доставка (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 обнаружит изменения, это сделает следующее:

  1. Создайте новую реплику, установленные с 2 стручками для нового цвета
  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.

Мы создадим следующий трубопровод:

Этот трубопровод делает следующее:

  1. Клоны исходный код приложения
  2. Строит изображение Docker
  3. Развертывает Приложение путем обновления манифестов Kubernetes. Арго развертывает новый манифест и создает новый «цвет» для следующей версии
  4. Запускает интеграционные тесты против сервиса «Предварительный просмотр», созданной Argo Dinlouts. Живые пользователи все еще находятся на предыдущей/стабильной версии приложения.
  5. Если тестирование на дым проходит новый цвет, продвигается и становится новой активной версией
  6. Если дымовые тесты проваливаются, новый цвет отбрасывается, все живые пользователи никоим образом не влияют

Вот Определение трубопровода :

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»