Восемь лет в DevOps: путь инженера от эникея до Kubernetes-платформ
Опубликовано: 2026-06-06
Сейчас я открываю ноутбук в Ереване, и на одном экране у меня шесть Kubernetes-кластеров MixVel, на втором — Red Rose, европейский B2B, на третьем — n8n, который ночью сам завёл три тикета в Jira и никого не разбудил. Восемь лет назад я менял картриджи в принтерах и не знал слова «reconciliation».
Между этими двумя кадрами — пять мест работы, одна релокация, одна миграция длиной в два года и примерно тысяча дежурств. Коротко: начинал с эникея в 2018-м, вырос до мультикластерных Kubernetes-платформ. Поработал в российской GDS уровня Amadeus, стартапе по продаже билетов, финтех-крипто-дивизионе и одновременно в двух продуктах travel-tech холдинга. Этот пост — развёрнутая версия: как на самом деле выглядело каждое место, что я там построил и что бы сделал иначе.
2018–2022. Эникей, который полез не туда
Начинал я не с Kubernetes, а с фразы «у меня принтер не печатает». Первая работа — эникейщик: переустановить Windows, сбросить пароль в AD, протянуть патч-корд, объяснить, что Caps Lock включён. Платили мало, уважали ещё меньше, но там был один сервер в углу — старый CentOS, на котором крутились бэкапы и какая-то внутренняя 1С. Его все боялись трогать. Я полез.
Сначала просто чтобы бэкапы перестали падать по ночам. Написал первый в жизни bash-скрипт, повесил на cron, прикрутил Zabbix, чтобы видеть, что место на диске кончается, до того как оно кончится. Через полгода я был «тот, кто разбирается в линуксе», ещё через год — младший сисадмин: стойка, десяток виртуалок, nginx, MySQL, ручной деплой по SSH.
Именно тогда я поймал то, что определило всю карьеру: мне физически неприятно делать руками то, что можно описать кодом. Первый Ansible-плейбук я написал не потому, что кто-то попросил, а потому что заводить третий одинаковый сервер вручную было оскорбительно. Прочитал про Docker, не понял зачем, отложил. Через год понял. К 2022-му у меня было достаточно Linux и автоматизации, чтобы рискнуть и пойти туда, где всё это нужно по-взрослому.
2022 — н.в. Сирена-Тревел: где «быстро» — ругательство
Сирена — российская GDS: система, которая обрабатывает инвентарь авиационных мест и транзакции бронирования на рынке авиаперевозок России и СНГ. Если упрощать: когда вы покупаете билет на рейс по России или СНГ, где-то там инвентарь мест и транзакция проходят через систему вроде этой. Аналог Amadeus или Sabre, только отечественный. 24/7, миллионы бронирований, и слово «даунтайм» в коридорах произносят шёпотом.
Я пришёл в августе 2022-го и впервые увидел инфраструктуру, которую не обойдёшь глазами: 500+ CentOS-виртуалок, на них зоопарк — Java, Python, PHP, .NET, C++. Всё живое, всё в проде, и большая часть старше, чем мой опыт. Первую неделю я просто читал. Вторую — боялся. На третьей понял, что бояться придётся ещё года два, и можно начинать работать.
Миграция, которая шла дольше, чем длятся некоторые браки. Главный проект — увести всё с виртуалок в контейнеры. Не одним прыжком — тремя поколениями: XEN/libvirt → Docker Swarm → Kubernetes. Почему так? Потому что нельзя остановить GDS, чтобы «переехать на выходных». Каждый сервис перевозился отдельно, с отходными путями, с неделями параллельной работы старого и нового. Два года. Результат, которым горжусь до сих пор: утилизация железа +40% — те же нагрузки поехали на заметно меньшем количестве машин. Не магия. Просто наконец-то стало видно, кто сколько на самом деле ест.
CI/CD с нуля. Когда я пришёл, «задеплоить» означало: зайти по SSH, запустить чей-то личный скрипт, помолиться. У каждой команды свой обряд, ни одного общего стандарта, деплой занимал часы. Я поднял пайплайны в GitLab CI для всех кодовых баз: unit и интеграционные тесты, SonarQube, Trivy, Docker build, Helm deploy. Добавил promotion gates dev → staging → prod и авто-откат при провале health-чеков. Деплой: с часов до менее чем 10 минут. Инциденты из-за плохих релизов: −65%. Последнюю цифру я люблю не за проценты, а за то, что за ней — десятки ночей, которые никого не разбудили.
Мониторинг и дежурства. Prometheus на 500+ нодах, 30+ дашбордов в Grafana, мост на Zabbix для легаси-систем, которые жили до нашего стека. On-call с runbook'ами и обязательными post-mortem'ами — без поиска виноватых, только «что сломалось и как сделать, чтобы не повторилось». MTTR упал со 120 минут до 20 за два года. Я до сих пор помню первое дежурство, когда меня подняли в 3:40, я открыл runbook, написанный мной же месяц назад, и через 18 минут лёг обратно. Вот ради этого ощущения и пишутся runbook'и.
В разгар Сирены, в 2022-м, я переехал — и дальше уже не останавливался: сначала Минск, потом Грузия (Батуми), затем Азия — Таиланд вдоль и поперёк, Китай, Вьетнам. Сейчас осел в Армении, получаю гражданство, а сам присматриваюсь к Чехии. Гибрид превратился в удалёнку, удалёнка — в новый способ работать: через границы, по контрактам, на несколько продуктов сразу. Это объясняет всё, что было дальше.
Главный урок enterprise-инфраструктуры такого масштаба: быстро двигаться нельзя, и это в основном нормально. У одного плохого деплоя серьёзные последствия для всей цепочки. Дисциплину вокруг promotion gates, runbook'ов и post-mortem'ов я унёс с Сирены на каждую следующую работу как личный багаж.
2024–2025. Flowerave: один в поле DevOps
Параллельно с Сиреной я взял контракт в Flowerave — стартап по продаже билетов. После 500 нод и команды это был другой полюс: я был единственным DevOps-инженером, и не было ничего. Ни CI, ни Kubernetes, ни мониторинга, ни строчки IaC. Пустое облако и разработчики, которым нужно вчера.
Я поднял весь стек в Yandex Cloud через Terraform: VPC, managed PostgreSQL, Redis, S3, DNS. Production-кластер Kubernetes с Nginx Ingress, HPA и сетевыми политиками, чтобы микросервисы — каталог, заказы, платежи, уведомления — были изолированы. Self-hosted GitLab CE. Sentry, Prometheus, Grafana, ELK.
Первое, что я сделал — не деплой, а бэкапы. Ежедневный полный дамп PostgreSQL в S3 плюс непрерывная архивация WAL. RPO менее часа, RTO менее 30 минут. Звучит скучно ровно до того дня, когда это понадобилось — за 15 месяцев такой день был ровно один. Всё восстановилось. Один раз — но именно тот раз, ради которого всё и делалось.
Цифра, которой горжусь: провижнинг инфраструктуры — с 3 дней руками до 30 минут через Terraform. Ноль потерянных продакшн-данных за 15 месяцев.
И главный урок одиночки в стартапе: твоя настоящая работа — управлять объёмом. Каждый разработчик хочет observability, zero-downtime деплои, feature flags, канареечные релизы. Всё это можно построить — и тогда ты вечно строишь инфраструктуру вместо того, чтобы её держать. Я научился говорить «нет» и держаться за фундамент: бэкап, мониторинг, откат. Остальное — когда будет второй инженер.
2025–н.в. MixVel: фаза ремесленника
MixVel — частный дивизион внутри того же холдинга, что и Сирена. Агентский поиск авиабилетов с собственным кодом ГРС, высоконагруженный real-time для турагентств. Масштаб другой: несколько команд, 6 Kubernetes-кластеров (dev, test, sre, loadgds, demo плюс облачные окружения). Здесь я впервые строил не «инфраструктуру под продукт», а платформу.
Сердце — FluxCD v2, hub-and-spoke. Один hub-кластер управляет всеми spoke через зашифрованные kubeconfig в SealedSecrets. Правило, которое я ввёл с первого дня и ни разу не нарушил: никакого прямого kubectl apply — нигде, ни в одном окружении. Только git, только reconciliation FluxCD. Структура Kustomize трёхслойная: base (общее для всего), custom (кастомизация на продукт), per-env patches (минимальные переопределения на окружение). Больше 90% конфигурации общие, дрейфа — ноль. On-prem на k3s + Cilium, облако — Yandex Cloud Managed Kubernetes, ingress на APISIX.
Полная data-платформа через FluxCD HelmReleases: Kafka, RabbitMQ, Cassandra, ClickHouse, MongoDB, Redis, MinIO. Провижнинг кластеров — Ansible: ставит k3s, бутстрапит Flux, накатывает Cilium, тюнит ноды. Новый кластер готов меньше чем за 30 минут.
Но самое любимое здесь — инструменты, которые я написал сам, потому что готовых не было:
env-view — FastAPI-дашборд в каждом кластере. Показывает live-состояние ingress, сервисов и подов с HTTP/TCP health-чеками. Раньше дежурные вручную заходили в кластеры по SSH. Теперь есть URL. Поставляется как Helm-чарт.
abot — кастомный Alertmanager webhook receiver с per-team роутингом. Встроенный роутинг Alertmanager мощный, но неудобно расширять под разную логику эскалации на команду. abot — ~300 строк Python, развёрнут Helm-чартом во всех кластерах.
trivy-to-sonarqube — Python CLI, конвертирует вывод Trivy в формат external issues для SonarQube. Позволил показывать security-находки там, где разработчики уже смотрели на качество кода.
confluence-publisher — синхронизирует Markdown-документацию из git в Confluence. Появился после Сирены, где я устал от знаний, живущих в одной голове.
Я отношусь к этому коду как к продакшену: версионирован, контейнеризован, задеплоен через Helm. Где помогало — пользовался Copilot, но архитектуру держал в своей голове.
Урок платформы: цена несогласованности накапливается незаметно. Пока кластеров два — ничего. Когда их шесть и они начинают расходиться — отладка кросс-окруженческой проблемы превращается в ад. Трёхслойный Kustomize и жёсткая GitOps-дисциплина — не лишние накладные расходы. Именно они позволяют вести 6 кластеров без шестикратного роста рутины. Заодно прошёлся по rightsizing подов на реальных данных потребления — −20% к счёту за compute, просто перестав платить за воздух.
Начало 2026. МТС: четыре месяца в крипте
С января по апрель 2026-го — part-time-контракт в МТС, крипто/финтех-дивизион. Блокчейн-платформа для расчётов VED и два B2C-продукта для обмена крипты. Не похоже вообще ни на что из прошлого опыта, и именно поэтому я согласился.
Инфра — MWS (MTS Web Services) с кастомным Terraform-провайдером. Кластеры — не managed, а kubeadm, под каждое окружение: dev / stage / test / prod для VED и для B2C — 8 окружений суммарно. Node taints, чтобы блокчейн-нагрузки не делили ноды с B2C-стеком. Calico, Nginx Ingress, Longhorn + local-path, cert-manager с внутренним CA и Let's Encrypt.
GitOps здесь — ArgoCD, не FluxCD. Паттерн деплоя: argocd app sync + argocd app wait из GitLab CI с таймаутом 15 минут — пайплайн ждёт, пока кластер реально сойдётся, а не «отправил и ушёл». Переиспользуемая библиотека CI-джобов через include:: Kaniko-сборки, ArgoCD Helm deploy, Trivy с кастомной OPA-политикой на non-root USER, SonarQube, Semgrep. Определения пайплайнов для мульти-окружений генерировались через Jsonnet — один источник истины вместо восьми почти-одинаковых ямлов.
Самое интересное — Ansible: роли на полный жизненный цикл кластера. LVM-тома, iptables, ротация логов, kubeadm, WireGuard VPN для доступа к нодам, провижнинг пользователей на окружение. Kafka — через Strimzi, секреты — в Vault.
Короткий, но насыщенный контракт. Part-time — это не «меньше работы», это «жёстче приоритеты». Правило было одно: первым идёт то, что блокирует дев-команды. Всё остальное — потом или никогда. За четыре месяца я научился двум вещам, которых раньше не пробовал — kubeadm руками и ArgoCD — и обе теперь в арсенале.
2026–н.в. Red Rose Traveltech: два продукта, одна голова
Red Rose — европейская дочка MixVel, B2B корпоративные командировки. И вот тут случилось то, к чему всё шло: я веду инфраструктуру Red Rose и MixVel одновременно — два отдельных продуктовых стека в одной роли.
Поднять Red Rose было легко — не потому что просто, а потому что я это уже делал. Полный IaC в Yandex Cloud через Terraform, CI/CD в GitLab с циклом деплоя меньше 5 минут, Prometheus + Grafana с явными SLO — 99.9%+ на core booking API. Паритет dev / staging / prod на одних и тех же Terraform- и Helm-конфигах.
Новое здесь — операционная автоматизация на n8n. В обоих продуктах я строю event-driven ops-пайплайны: Grafana alert → тикет в Jira, дайджесты статуса reconciliation FluxCD, Slack-уведомления о деплоях, уведомления об онбординге партнёров, алерты о дрейфе Terraform. Это замена тому классу ad-hoc-скриптов, которые годами копятся в репозиториях и тихо ломаются, когда меняется чей-то API. n8n-воркфлоу видно глазами, можно перезапустить, можно протестировать. Рутинные события теперь идут без меня — и это и есть цель.
Что бы я сделал иначе
Начинать с мониторинга, а не заканчивать им. В Flowerave я поднял нормальный мониторинг достаточно рано — и когда что-то ломалось, были данные, а не догадки. В Сирене мониторинг встраивался в уже работающую систему задним числом — это на порядок больнее. Если бы я сегодня начинал новый проект, Prometheus и алертинг появились бы раньше первого микросервиса.
GitOps с первого дня. Дисциплина «никакого прямого kubectl apply» кажется лишним усложнением — ровно до той ночи, когда отлаживаешь кластер, чьё реальное состояние разошлось с репозиторием три недели назад и никто не знает как. В MixVel — с первого дня. Дежурства становятся заметно человечнее.
Документация как полноценный результат работы. Я начал серьёзно вести runbook'и в Сирене после нескольких post-mortem'ов, где восстановление затягивалось только потому, что нужное знание жило в голове у одного человека. confluence-publisher, который я написал в MixVel, — прямое следствие того, что я стал относиться к документации серьёзно: Markdown в git, автосинхронизация в Confluence, те же практики, что и в коде.
Итого
- 2018–2022: эникей → Linux-сисадмин, с этого всё началось
- Сирена-Тревел: 3 года, enterprise-масштаб, миграция ВМ→K8s, CI/CD с нуля, on-call, 500+ нод
- Flowerave: 1,5 года, единственный DevOps, стартап с нуля, фундаментальная надёжность
- MixVel: по сей день, FluxCD hub-and-spoke, 6 кластеров, собственный инструментарий, data-платформа
- МТС: 4-месячный контракт, kubeadm + ArgoCD + Jsonnet, блокчейн/финтех
- Red Rose: по сей день параллельно с MixVel, Yandex Cloud, n8n-автоматизация
Восемь лет в сжатом виде: каждое место добавляло свой стек, но окупался всегда один и тот же фундамент, заложенный заранее. Бэкапы, мониторинг, воспроизводимые окружения, откат в один шаг, GitOps и документация с первого дня. Всё остальное — детали реализации.