Рубрики
Uncategorized

Прогрессивная доставка с AWS Appmesh в EKS с использованием флаггер

Привет всем 👋 !! В этом сообщении мы увидим, как реализовать прогрессивную доставку с помощью AWS … с меткой AWS, Kubernetes, DevOps, CloudNative.

Привет всем 👋 !! В этом блоге мы увидим, как реализовать прогрессивную доставку с помощью AWS Appmesh в EKS с помощью Flagger. Прежде чем глубоко погрузиться в блог, давайте посмотрим на некоторые концепции, стоящие за ним. — Непрерывная доставка В Непрерывное развертывание В Прогрессивная доставка Анкет

Концепции

Непрерывная доставка -Возможность снабжения артефактов, таких как двоичные файлы, изображения контейнеров, секреты или конфигурации времени выполнения в безопасном автоматизированном подходе.

Непрерывное развертывание — несколько создан, вытягивая указанные артефакты и запустив их в среде выполнения, такую как Kubernetes, Amazon ECS и т. Д. На момент публикации некоторые передовые практики, такие как неизменные артефакты и многоэтажное кэширование, были широко распространены и приняты.

Прогрессивная доставка

Прогрессивная доставка — это современная разработка программного обеспечения для постепенного развертывания новых функций, чтобы ограничить потенциальное негативное влияние и измерить метрики с помощью недавно развернутых функций. Прогрессивная доставка основывается на основе непрерывной доставки и расширяет практику, включающую развертывание функций, канарейку, A/B-тестирование, сине-зеленые развертывания.

Прогрессивная доставка делает процесс выпуска более устойчивым. Это снижает риск, внося дополнительные изменения, и на каждом шаге вы проверяете или делаете ручное одобрение, чтобы перейти на следующий этап. Используя это, вы можете доставлять чаще с уверенностью.

Флаггер

Флаггер это прогрессивный инструмент доставки, который автоматизирует процесс выпуска для приложений, работающих на Kubernetes. Это снижает риск введения новой версии программного обеспечения в производстве, постепенно перемещая трафик на новую версию при измерении метрик и проведении тестов на соответствие.

Flagger реализует несколько стратегий развертывания (Canary Leleases, A/B -тестирование, синее/зеленое зеркалирование), используя сервисную сетку (App Mesh, Istio, Linkerd) или контроллер Ingress (Contour, Gloo, Nginx, Skipper, Traefik) для маршрутизации трафика. Для анализа выпуска Flagger может запросить прометею, DataDog, New Relic, CloudWatch или графит, а для оповещения он использует Slack, MS Teams, Discord и Rocket. Flagger может быть настроен с помощью пользовательских ресурсов Kubernetes и совместим с любыми решениями CI/CD, сделанным для Kubernetes.

Изображение: флаггер

Начиная

Этот блог проводит вас через настройку Flagger и AWS Appmesh на EKS. Вы можете создать кластер Kubernetes, используя портал или EKSCTL. Здесь мы будем использовать инструмент командной строки EKSCTL — для создания или управления кластером EKS.

Создать кластер EKS

  eksctl create cluster --name=eks-dev \
  --region=us-east-1 \
  --nodes 3 \
  --appmesh-access

Эта команда создаст кластер EKS с приложенной политикой AppMesh IAM.

Установка AWS Appmesh

Добавить eks helm Repo

  helm repo add eks https://aws.github.io/eks-charts

Установите Appmesh CRDS

  kubectl apply -k [github.com/aws/eks-charts/stable/appmesh-controller//crds?ref=master](http://github.com/aws/eks-charts/stable/appmesh-controller//crds?ref=master)

Создайте пространство имен под названием приложение

  kubectl create ns appmesh-system

Установите контроллер Appmesh

  helm upgrade -i appmesh-controller eks/appmesh-controller \
  --wait --namespace appmesh-system

Установите экземпляр Prometheus, чтобы собрать метрики сетки приложения для запуска канарского анализа.

  helm upgrade -i appmesh-prometheus eks/appmesh-prometheus \
  --wait --namespace appmesh-system

Установка флага

Добавить репозиторий шлема Flagger

  helm repo add flagger https://flagger.app

Установите Canary CRDS Flagger

  kubectl apply -f https://raw.githubusercontent.com/fluxcd/flagger/main/artifacts/flagger/crd.yaml

Развернуть флаггер в пространствах имен системы AppMesh. Пожалуйста, установите MeshProvider в AppMesh и MetricsServer на ваш адрес Prometheus.

  helm upgrade -i flagger flagger/flagger \
  --namespace=appmesh-system \
  --set crd.create=false \
  --set meshProvider=appmesh:v1beta2 \
  --set metricsServer=http://appmesh-prometheus:9090

Давайте сделаем развертывание

Установите развертывание вашего POD, включая горизонтальный капсул Scaler. Здесь я использую один из популярных образцов — информация о капсулах. Обратите внимание, что мы не устанавливаем какие -либо объекты API -api, специфичные для AppMesh, здесь. Flagger будет создавать Appmesh VirtualRouter, VirtualService на основе канарского файла, который мы создадим.

kubectl apply -k https://github.com/fluxcd/flagger//kustomize/podinfo?ref=main

Развернуть стручок Loadtest для запуска нагрузочных тестов в развертывании Podinfo

helm upgrade -i flagger-loadtester flagger/loadtester \
--namespace=test \
--set appmesh.enabled=true \
--set "appmesh.backends[0]=podinfo" \
--set "appmesh.backends[1]=podinfo-canary"

Настройка канарейки

Создайте канарейское определение развертывания, которое мы создали. В этом YAML мы создаем Canary API, ориентируясь на конкретное развертывание. В конфигурации анализа мы инструктируем Канарский анализ выполнять каждый 1 млн интервал — и увеличивать вес до 5-50 в зависимости от порогов запроса, соскобаемых из метрик.

apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: podinfo
  namespace: test
spec:
  provider: appmesh:v1beta2
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: podinfo
  service:
    # container port
    port: 9898
    timeout: 15s
    match:
      - uri:
          prefix: /
    rewrite:
      uri: /
  # define the canary analysis timing and KPIs
  analysis:
    # schedule interval (default 60s)
    interval: 1m
    # max number of failed metric checks before rollback
    threshold: 5
    # max traffic percentage routed to canary
    # percentage (0-100)
    maxWeight: 50
    # canary increment step
    # percentage (0-100)
    stepWeight: 5
    # App Mesh Prometheus checks
    metrics:
    - name: request-success-rate
      # minimum req success rate (non 5xx responses)
      # percentage (0-100)
      thresholdRange:
        min: 99
      interval: 1m
    - name: request-duration
      # maximum req duration P99
      # milliseconds
      thresholdRange:
        max: 500
      interval: 30s

Проверка проверки на прогрессирование

Кроме того, вы можете увидеть, как Webhooks настроены для выполнения принятия на предварительном развертывании и нагрузочных тестах, когда выполняется маршрутизация канарского трафика. Это запустит тест на загрузку на канарейском развертывании перед прогрессом этапов и вызовет предварительные веб -крючки перед маршрутизацией трафика в канарейку.

  analysis:
    ....
    webhooks: #optional
    - name: acceptance-test
      type: pre-rollout
      url: http://flagger-loadtester.test/
      timeout: 30s
      metadata:
        type: bash
        cmd: "curl -sd 'test' http://podinfo-canary.test:9898/token | grep token"
    - name: load-test
      url: http://flagger-loadtester.test/
      timeout: 5s
      metadata:
        cmd: "hey -z 1m -q 10 -c 2 http://podinfo-canary.test:9898/"

Успешные развертывания

Запустите развертывание канарейки, обновив версию изображения. Развертывание канарейки будет вызвано спецификациями развертывания, конфигурации и секретов.

kubectl -n test set image deployment/podinfo \
podinfod=stefanprodan/podinfo:3.1.1

Флаггер обнаруживает изменение версии контейнера и выполняет канарейский анализ.

kubectl -n test describe canary/podinfo

Status:
  Canary Weight: 0
  Failed Checks: 0
  Phase: Succeeded
Events:
 New revision detected! Scaling up podinfo.test
 Waiting for podinfo.test rollout to finish: 0 of 1 updated replicas are available
 Pre-rollout check acceptance-test passed
 Advance podinfo.test canary weight 5
 Advance podinfo.test canary weight 10
 Advance podinfo.test canary weight 15
 Advance podinfo.test canary weight 20
 Advance podinfo.test canary weight 25
 Advance podinfo.test canary weight 30
 Advance podinfo.test canary weight 35
 Advance podinfo.test canary weight 40
 Advance podinfo.test canary weight 45
 Advance podinfo.test canary weight 50
 Copying podinfo.test template spec to podinfo-primary.test
 Waiting for podinfo-primary.test rollout to finish: 1 of 2 updated replicas are available
 Routing all traffic to primary
 Promotion completed! Scaling down podinfo.test

Автоматический откат

Когда количество неудачных проверок достигает порога канарского анализа, трафик направляется обратно на первичную, канарейку масштабируется до нуля, а развертывание помечается как неудачный.

Вывод

Прогрессивная доставка открывает быстрые выбросы. Используя Flagger, теперь это проще, чтобы включить автоматизированные развертывания канарейки с вашей любимой сервисной сеткой, которую вы используете в своем кластере Kubernetes. Это даст вам полный контроль над процессом развертывания функций. Вы можете расширить процесс прогрессивной доставки, расширив проверку, ручное утверждение, уведомления команды Slack или MS и т. Д. Мы рассмотрим расширяемые настройки с утверждением и уведомлениями в предстоящих сообщениях в блоге.

Оригинал: «https://dev.to/aws-builders/progressive-delivery-with-aws-appmesh-in-eks-using-flagger-21fl»