Что такое зеленое развертывание (Green Deployment)?

«Что такое зеленое развертывание (Green Deployment)?» — вопрос из категории Архитектура и DevOps-практики, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Зеленое развертывание (Green Deployment) — это стратегия выпуска обновлений, при которой новая версия приложения ("зеленая" среда) разворачивается на полностью изолированной инфраструктуре, параллельно с работающей текущей версией ("синяя" среда). После успешного тестирования "зеленой" среды весь пользовательский трафик переключается на нее.

Как это работает на практике (например, в Kubernetes):

  1. Подготовка: У вас есть Deployment my-app-blue (версия 1.0), обслуживающий трафик через Service my-app-service.
  2. Развертывание: Вы создаете новый Deployment my-app-green с обновленным образом (версия 2.0). Он запускается независимо, не получая внешнего трафика.
    # my-app-green-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: my-app-green
    spec:
    selector:
    matchLabels:
      app: my-app
      version: "2.0"
    template:
    metadata:
      labels:
        app: my-app
        version: "2.0"
    spec:
      containers:
      - name: app
        image: my-registry/app:v2.0
  3. Тестирование: Выполняются smoke-тесты, интеграционные тесты и проверки на "зеленой" среде через внутренний служебный endpoint.
  4. Переключение трафика: Обновляется селектор Service my-app-service, чтобы он начал направлять трафик на поды с меткой version: "2.0". В Kubernetes это происходит практически мгновенно.
  5. Откат: Если после переключения обнаружена критическая ошибка, откат тривиален — нужно вернуть селектор Service обратно на version: "1.0". Старая "синяя" среда все еще работает.

Преимущества в DevOps-цикле:

  • Нулевое время простоя (Zero Downtime): Переключение между идентичными, готовыми к работе средами.
  • Мгновенный и безопасный откат: Позволяет откатить релиз за секунды, что критично для соблюдения SLA.
  • Снижение риска: Позволяет провести полное тестирование новой версии в production-подобном окружении перед подачей на нее реального трафика.
  • Упрощение A/B тестирования: Можно направлять часть трафика (например, через Istio) на "зеленую" среду для канареечного (canary) релиза.