Совершенствуем развертывание приложений в Kubernetes с помощью Canary Deployment

—

от автора

Автор статьи: Рустем Галиев

IBM Senior DevOps Engineer & Integration Architect. Официальный DevOps ментор и коуч в IBM

Привет, Хабр! В мире современной разработки программного обеспечения Kubernetes стал непреложным стандартом для оркестрации контейнеров. Его масштабируемость, надежность и гибкость сделали его первым выбором для многих команд, стремящихся ускорить процесс развертывания и обновления приложений. Однако, с ростом сложности проектов и ожиданиями пользователей, даже Kubernetes иногда не способен гарантировать безотказное развертывание новых версий приложений.

Именно здесь на сцену выходит Canary Deployment — практика, которая позволяет пошагово внедрять новые версии приложений, минимизируя риски и предоставляя возможность быстро реагировать на возможные проблемы. В этой статье мы погрузимся в мир Canary Deployment в Kubernetes и рассмотрим его внедрение, настройку и передовые методики для обеспечения бесперебойных обновлений приложений. Приготовьтесь к тому, чтобы усовершенствовать свой процесс развертывания и достичь высокой степени надежности в мире контейнеризации и оркестрации!

Canary Deployment (или деплоймент «канарейка») — это методика поэтапного обновления приложений, который позволяет разработчикам и DevOps-командам минимизировать риски при внедрении новых версий приложений, тестируя их на ограниченной аудитории перед полным развертыванием. Этот подход назван в честь традиционной практики использования канареек для проверки безопасности в шахтах: если канарейка жива, воздух безопасен для дыхания, если нет — это сигнализирует о проблема

Мы начнем с создания начального развертывания. Будем использовать тот же манифест, что использовали при блу-грине, который запускает версию 1.0 образа контейнера k8spatterns/random-generator в контейнерах его реплик. Добавим определение деплоймента в файл Initial-deployment.yaml:

apiVersion: apps/v1 kind: Deployment metadata:   name: random-generator-blue spec:   replicas: 3   selector: matchLabels:   app: random-generator   version: initial   template: metadata:   labels:     app: random-generator     version: initial spec:   containers:   - image: k8spatterns/random-generator:1.0     name: random-generator     ports:     - containerPort: 8080     readinessProbe:       httpGet:         path: /info         port: 8080       initialDelaySeconds: 5

Выполним kubectl apply -f initial-deployment.yaml

kubectl get pods -l app=random-generator,version=initial  kubectl get pods -l app=random-generator,version=initia

Маршрутизация трафика к репликам случайного генератора развертывания происходит через сервис типа ClusterIP. Добавим следующее содержимое в новый файл service.yaml:

apiVersion: v1 kind: Service metadata:   name: random-generator spec:   selector: app: random-generator   ports: - protocol: TCP   port: 80   targetPort: 8080

Выполним:

kubectl apply -f service.yaml

kubectl run tmp --image=alpine/curl:3.14 --restart=Never -it --rm -- curl random-generator.default.svc.cluster.local

В Kubernetes технику канареечного выпуска можно реализовать путем создания нового развертывания с небольшим количеством реплик, которое можно использовать в качестве канареечного экземпляра. На этом этапе сервис должен направить некоторых клиентов к обновленным экземплярам Pod.

Мы создадим еще один деплоймент, который будет запускать версию 2.0 образа k8spatterns/random-generator в контейнерах его реплик. В этом случае мы создадим только одну реплику. Добавим определение  в new-deployment.yaml:

apiVersion: apps/v1 kind: Deployment metadata:   name: random-generator-new spec:   replicas: 1   selector: matchLabels:   app: random-generator   version: new   template: metadata:   labels:     app: random-generator     version: new spec:   containers:   - image: k8spatterns/random-generator:2.0     name: random-generator     ports:     - containerPort: 8080     readinessProbe:       httpGet:         path: /info         port: 8080       initialDelaySeconds: 5 

Запустим:

kubectl apply -f new-deployment.yaml  kubectl get pods -l app=random-generator,version=new

Как работает Канареечный релиз:

Можно попробовать подключиться к сервису с помощью временного пода, как показано ниже. Трафик будет направлен на реплики старого или нового деплоймента:

kubectl run tmp --image=alpine/curl:3.14 --restart=Never -it --rm -- curl random-generator.default.svc.cluster.local

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

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

Canary Deployment часто используется в совокупности с инструментами управления контейнерами, такими как Kubernetes. Kubernetes предоставляет мощные средства для управления развертыванием и автоматического масштабирования, что делает его идеальным выбором для этой методики.

Использование Canary Deployment позволяет организациям быстрее и безопаснее внедрять новые функции и улучшения, сокращая временной промежуток между разработкой и выпуском, а также повышая уровень довольных пользователей.

А если вы только начинаете свое знакомство с Kubernetes, приглашаю на бесплатный вебинар, где мы сделаем первые шаги в использовании Kubernetes и познакомимся с различными способами развертывания локального Kubernetes кластера. Вы узнаете, как установить и настроить Kubernetes с использованием инструментов, таких как Minikube, Kind или Docker Desktop. Регистрация доступна по ссылке.


ссылка на оригинал статьи https://habr.com/ru/articles/765560/


Комментарии

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

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