DEV Community

Khadijah (Dana Ordalina)
Khadijah (Dana Ordalina)

Posted on

Сине-зеленое развертывание на EKS

EKS = Управляемый Kubernetes от Amazon Web Services
EKS предоставляет вам:

Управляющая плоскость **Kubernetes** (API-сервер, планировщик).
AWS управляет этим за вас.
Вам всё ещё необходимо:

Рабочие узлы (EC2) → для запуска подов
kubectl **→ для связи с кластером
**YAML
→ для указания Kubernetes, что нужно запустить.
Очень важная ментальная модель

_`Your laptop (kubectl)
        |
        v
EKS API Server (managed by AWS)
        |
        v
Worker Nodes (EC2) → Pods → Containers`_
Enter fullscreen mode Exit fullscreen mode

Подключаться к узлам по SSH НИКОГДА нельзя.

Шаг 1 — Создайте EKS вручную (через консоль AWS, без использования инструментов).

1. Откройте консоль AWS → EKS
Выберите регион (например: us-east-1)
Нажмите «Создать кластер».
2. Конфигурация кластера
Заполнять только:

Имя *:bluegreen-demo
*
Версия Kubernetes
: по умолчанию
Роль кластерной службы *: Если AWS отображает её, выберите её. Если нет, нажмите *«Создать роль» (AWS создаст её автоматически).
Нажмите Далее

3. Сетевое взаимодействие
Использовать значения по умолчанию :

VPC по умолчанию
Как минимум 2 подсети
Доступ к общедоступной конечной точке
Нажмите «Создать».

⏳ Дождитесь активации

В этот момент:

Kubernetes существует
НО пока ничего не может бежать

Шаг 2 — Создание рабочих узлов (ЭТО создаст EC2)

Зачем нам это нужно
Kubernetes размещает поды на узлах .
Нет узлов = нет подов.

Создать группу узлов
Внутри вашего кластера:

Перейдите в раздел «Вычисления» → «Добавить группу узлов».
Наполнять:

Имя:bg-nodes
Роль IAM: создать/выбрать роль работника по умолчанию
Настройки узла:

Тип экземпляра:t3.medium
Желательно: 2
Мин.: 2
Макс.: 3
Создать группу узлов → дождаться активации

Теперь EC2 существует автоматически.

Шаг 3 — Подключите kubectl (так работает DevOps)

С вашего ноутбука:

aws eks update-kubeconfig \
  --region us-east-1 \
  --name bluegreen-demo
Enter fullscreen mode Exit fullscreen mode

Проверять:

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

Если вы видите узлы → значит, вы соединены.

Впредь:

Консоль AWS практически неактуальна.
Всё делается с помощью kubectl

Почему существуют стратегии развертывания (ОЧЕНЬ ВАЖНО)

До Kubernetes (старый мир)

  • Остановить приложение
  • Развернуть новую версию
  • Запустите приложение снова.
  • Пользователи видят время простоя
  • Откат происходит медленно.
    Проблемы, с которыми сталкивался DevOps

  • Простои во время развертывания

  • Пользователи получают ошибки

  • Быстрый откат недоступен.

  • Страх перед развертыванием войск

Проблема с Kubernetes решена:

  • - Капсулы
  • - Услуги
  • - Самоисцеление
  • Однако стратегия развертывания определяет, как будет перемещаться трафик. Именно поэтому *существуют стратегии развертывания *.

Что такое сине-зеленая стратегия (в простом виде)?

Сине-зеленый = две версии, работающие одновременно.

  • Синий → текущее производство
  • Зеленый → новая версия, протестирована
  • Транспортный поток резко меняет направление движения. Отсутствие частичного трафика. Отсутствие замедления развертывания.

Почему сине-зеленый цвет используется в DevOps

Преимущества

  • Отсутствие простоев
  • Мгновенный откат
  • Безопасные релизы
  • Легко понять
  • Предсказуемое поведение

Когда DevOps выбирает сине-зеленый подход

  • Критические приложения
  • API
  • Финансовые системы
  • Внутренние платформы
  • Когда неудача обходится дорого

Как работает принцип «сине-зеленого» взаимодействия в Kubernetes (простая истина)

Kubernetes уже предоставляет нам такой инструмент:
👉 Сервис

Решение принимает служба:

«Какие модули посещают пользователи?»

Сине-зеленый = *изменить селектор услуги
*

Вот и все.

Внедрение сине-зеленого подхода (с нуля)

1️⃣ Развертывание Blue (версия 1 – в рабочем режиме)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-blue
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo
      color: blue
  template:
    metadata:
      labels:
        app: demo
        color: blue
    spec:
      containers:
      - name: app
        image: hashicorp/http-echo:0.2.3
        args: ["-text=BLUE v1"]
        ports:
        - containerPort: 5678
Enter fullscreen mode Exit fullscreen mode

2️⃣ Экологичное развертывание (версия 2 – не запущена)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-green
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo
      color: green
  template:
    metadata:
      labels:
        app: demo
        color: green
    spec:
      containers:
      - name: app
        image: hashicorp/http-echo:0.2.3
        args: ["-text=GREEN v2"]
        ports:
        - containerPort: 5678
Enter fullscreen mode Exit fullscreen mode

3️⃣ Сервис (производственный трафик)

apiVersion: v1
kind: Service
metadata:
  name: prod-svc
spec:
  selector:
    app: demo
    color: blue   # LIVE VERSION
  ports:
  - port: 80
    targetPort: 5678
Это переключатель управления .

Разверните всё
kubectl apply -f blue.yaml
kubectl apply -f green.yaml
kubectl apply -f service.yaml
Enter fullscreen mode Exit fullscreen mode

Трафик → СИНИЙ

Само развертывание (синий → зеленый)

Измените одну строку:

color: green
Enter fullscreen mode Exit fullscreen mode

Подайте заявку снова:

kubectl apply -f service.yaml
Enter fullscreen mode Exit fullscreen mode

Транспортный поток мгновенно переключается.

Перезагрузка Pod не требуется.
Простой отсутствует.

Откат (безопасность DevOps)

Вернитесь назад:

color: blue
Enter fullscreen mode Exit fullscreen mode

Применить → откат завершен.

Top comments (0)