Все кейсы
Production Infra Box · 5 дней

VPN-сервис: автоматизация Kafka и обновления без downtime

Кроссплатформенный VPN-сервис управлял кластерами Kafka вручную. Каждое обновление — риск инцидента. Конфигурации на dev, staging и prod расходились. За 5 дней мы автоматизировали весь жизненный цикл Kafka через Ansible.

30 min
Деплой идентичного кластера Kafka
0
Инцидентов при обновлениях
100%
Идентичность dev/staging/prod
5 дней
Срок реализации

Проблема

  • Ручное управление кластерами Kafka через SSH — каждый деплой занимал полдня
  • Конфигурации dev/staging/prod расходились, 'работает у меня' — норма
  • Обновления Kafka без тестирования конфигурации → инциденты в production
  • Нет возможности быстро поднять новый кластер для тестирования
  • Runbook существовал только в голове одного инженера

Решение

  • Ansible-роли для полного жизненного цикла Kafka (install, configure, upgrade, rolling restart)
  • Единый источник истины для конфигурации — один файл vars.yml для всех окружений
  • Тестирование конфигурации перед выкатом через Molecule + Testinfra
  • Rolling update без остановки сервиса — брокеры обновляются по одному
  • Документация в коде: каждый параметр с комментарием и ссылкой на Kafka docs

Как работает автоматизация

Структура Ansible-проекта

kafka-automation/
├── roles/
│ ├── kafka/
│ │ ├── tasks/main.yml
│ │ ├── handlers/main.yml
│ │ └── defaults/main.yml
│ └── zookeeper/
├── inventories/
│ ├── dev/
│ ├── staging/
│ └── prod/
└── playbooks/
├── deploy.yml
└── rolling-update.yml

Rolling update без downtime

# rolling-update.yml
- name: Rolling Kafka update
hosts: kafka_brokers
serial: 1 # один брокер за раз
tasks:
- name: Wait for partition reassignment
kafka_info:
bootstrap_servers: ...
until: result.under_replicated == 0
retries: 30
- name: Stop broker
service: name=kafka state=stopped
- name: Update and start
include_role: name=kafka

Результаты

Деплой нового кластера
Полдня30 min
Обновление Kafka
Вручную + рискАвто + тесты
dev/staging/prod конфиги
Расходятся100% parity

«Раньше я боялся обновлять Kafka в production. Теперь это просто команда в GitLab CI — запускаю и иду пить кофе.»

— Lead Engineer, VPN-сервис (SaaS / VPN)

Стек технологий

KafkaAnsibleKubernetesTerraformGitLab CI/CDArgoCDGrafanaPrometheusPostgreSQL

Нужна автоматизация инфраструктуры?

Расскажите о вашем стеке — предложим план за 24 часа.