Введение в стратегии развёртывания в Kubernetes

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

Понимание сине-зелёного развёртывания

Сине-зелёные развёртывания представляют собой простой, но мощный подход к внедрению новых версий вашего приложения. Вот как это работает:

  1. Подготовка: вы поддерживаете две идентичные производственные среды: одну помеченную как «синюю» (текущая версия), а другую — как «зелёную» (новая версия).

  2. Развёртывание:

    • Разверните новую версию в «зелёной» среде, сохраняя «синюю» среду активной и обслуживающей трафик.
    • Тщательно протестируйте «зелёную» среду, чтобы убедиться, что она стабильна и работает должным образом.
  3. Переключение трафика:

    • Как только вы будете удовлетворены «зелёной» средой, обновите конфигурацию маршрутизации, чтобы весь трафик от «синей» среды направлялся к «зелёной».
    • Если возникнут какие-либо проблемы, вы можете быстро переключиться обратно на «синюю» среду, обеспечивая беспроблемный откат.

Вот простая диаграмма Mermaid, иллюстрирующая процесс сине-зелёного развёртывания:

sequenceDiagram participant Blue participant Green participant Router participant Users Note over Blue,Green: Initial State Blue->>Router: Serving Traffic Router->>Users: Directing Traffic Note over Green: Deploy New Version Green->>Router: Ready for Traffic Note over Router: Switch Traffic Router->>Green: Direct Traffic to Green Green->>Users: Serving Traffic Note over Blue,Green: Rollback if Needed Router->>Blue: Switch Back to Blue if Issues

Пример файла YAML для сине-зелёного развёртывания

Вот пример того, как можно настроить сине-зелёный развёртывание в Kubernetes, используя файлы YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-blue
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: blue
  template:
    metadata:
      labels:
        app: myapp
        version: blue
    spec:
      containers:
      - name: myapp
        image: myregistry/myapp:blue
        ports:
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-green
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: green
  template:
    metadata:
      labels:
        app: myapp
        version: green
    spec:
      containers:
      - name: myapp
        image: myregistry/myapp:green
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - name: http
    port: 80
    targetPort: 80
  type: LoadBalancer

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

  1. Подготовка: настройте механизм перенаправления трафика, который может направлять небольшой процент трафика к новой версии. Убедитесь, что ваше приложение предназначено для одновременной работы нескольких версий.

  2. Развёртывание: разверните новую версию вместе с существующей версией. Направьте небольшой процент трафика на новую версию.

  3. Мониторинг и развёртывание: отслеживайте отзывы пользователей и показатели производительности для новой версии. Если новая версия работает хорошо, постепенно увеличивайте объём трафика, направленного на неё, пока все пользователи не будут обслуживаться новой версией. Если будут обнаружены проблемы, приостановите развёртывание, устраните проблемы и затем продолжите.

Вот диаграмма Mermaid, иллюстрирующая процесс канареечного развертывания:

sequenceDiagram participant OldVersion participant NewVersion participant Router participant Users Note over OldVersion,NewVersion: Initial State OldVersion->>Router: Serving Traffic Router->>Users: Directing Traffic Note over NewVersion: Deploy New Version NewVersion->>Router: Ready for Traffic Note over Router: Route Small Percentage of Traffic Router->>NewVersion: Direct Small Percentage of Traffic NewVersion->>Users: Serving Small Percentage of Traffic Note over Router: Monitor and Gradually Increase Traffic Router->>NewVersion: Increase Traffic Gradually NewVersion->>Users: Serving Increasing Percentage of Traffic Note over OldVersion,NewVersion: Rollback if Needed Router->>OldVersion: Switch Back if Issues

Пример файла YAML для канареечного развёртывания

Вот пример того, как вы можете настроить канареечное развёртывание в Kubernetes с использованием файлов YAML и инструментов, таких как Argo Rollouts:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: myapp-rollout
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myregistry/myapp:latest
ports:
- containerPort: 80
strategy:
canary:
steps:
- setWeight: 20
- pause:
duration: 10m
- setWeight: 40
- pause:
duration: 10m
- setWeight: 60
- pause:
duration: 10m
- setWeight: 80
- pause:
duration: 10m
- setWeight: 100

Основные различия и соображения

  • Скорость и простота развёртывания: сине-зелёные — быстрые и простые, позволяющие мгновенно развёртывать и откатываться. Однако это требует поддержки двух идентичных сред, что может быть ресурсоёмким. Канареечный — более постепенный и инкрементный, требующий тщательного мониторинга и корректировок. Этот подход занимает больше времени, но предлагает больший контроль и снижение рисков.

  • Управление рисками: сине-зелёное — все пользователи сразу переключаются на новую версию, что может быть рискованно, если возникнут проблемы. Однако откат происходит быстро и легко. Канареечное — только небольшая часть пользователей изначально затронута новой версией, позволяя обнаруживать и решать проблемы на ранней стадии.

  • Требования к ресурсам: сине-зелёное — требуется поддерживать две идентичные рабочие среды, что может быть дорогостоящим и ресурсоёмким. Канареечная — более ресурсосберегающая, поскольку первоначально небольшой объём трафика направляется на новую версию. Лучшие практики и инструменты

  • Мониторинг и наблюдаемость: используйте такие инструменты, как Prometheus и Grafana, для мониторинга показателей производительности и отзывов пользователей. Это важно как для сине-зелёных, так и для канареечных развёртываний, чтобы гарантировать, что новая версия работает должным образом.

  • Автоматизация: используйте такие инструменты, как Argo Rollouts, Flagger и Traefik, для автоматизации процесса развёртывания. Эти инструменты могут помочь в декларативной конфигурации, приостановке и возобновлении развёртываний и расширенном переключении трафика.

  • Сетевые инструменты: используйте сервисные сетки и сетевые инструменты, такие как Traefik, для упрощения и выполнения развёртываний. Эти инструменты могут помочь при взвешенных циклических переборах и разделении трафика между различными развёртываниями. Заключение

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