
Автор статьи: Рустем Галиев
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/
Добавить комментарий