Восемь лет в DevOps: путь инженера от эникея до Kubernetes-платформ
Опубликовано: 2026-06-06 · Обновлено: 2026-09-13
Сейчас я открываю ноутбук в Дананге, во Вьетнаме, и на одном экране у меня 25+ Kubernetes-кластеров Finstar в разных регионах — референсная архитектура, которую веду фактически один. На втором экране — MixVel и Red Rose, которые я продолжаю вести параллельно с Finstar: с июля просто стало два фронта вместо одного, и именно на фронте MixVel я недавно разбирался, почему Vault там молчал весь август. Восемь лет назад я менял картриджи в принтерах и не знал слова «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-м, я переехал — и дальше уже не останавливался: сначала Минск, потом Грузия (Батуми), затем Азия — Таиланд вдоль и поперёк, Китай, Вьетнам, потом Армения, где почти дошёл до гражданства. А в 2026-м — снова Вьетнам, на этот раз осознанно: осел в Дананге. Гибрид превратился в удалёнку, удалёнка — в новый способ работать: через границы, по контрактам, на несколько продуктов сразу. Это объясняет всё, что было дальше.
Главный урок 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-го добавился Finstar на фултайм — MixVel я не закрыл, а веду параллельно, как раньше вёл Flowerave рядом с Сиреной. Просто теперь роли поменялись местами: full-time — новое место, а Sirena-Тревел (MixVel и Red Rose) — то, что держу по контракту рядом. И то, что там вскрылось уже после того, как появился второй фронт, — отдельная история дальше по тексту.
Начало 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-воркфлоу видно глазами, можно перезапустить, можно протестировать. Рутинные события теперь идут без меня — и это и есть цель.
Эту связку веду и сейчас — просто с июля 2026-го она стала контрактом рядом с фултаймом в Finstar, а не основной работой.
Июль 2026 — н.в. Finstar Financial Group: тот же масштаб, только теперь целиком на мне
Finstar (внутри — DFI) — мультистрановой финтех-холдинг с продуктами потребительского кредитования во Вьетнаме, на Филиппинах, в ЮАР, Индии, Шри-Ланке и Европе. У каждого продукта — risk engine, коммуникационная платформа, API-шлюз, DWH, KYC/скоринг — свой кластер AWS EKS. Я отвечаю за референсную архитектуру целиком: 25+ кластеров в разных регионах, 100% через Terraform и общий Helm library chart, GitOps через ArgoCD. Ручных действий в консоли — ноль.
Три месяца в роли — рано делать громкие цифры вроде тех, что были у Сирены. Дальше только то, что уже подтверждено моими коммитами:
Поднял продовый EKS с нуля для африканской DWH-команды — сети, cross-account IAM-роли, бутстрап ArgoCD — и завёл в него StarRocks целиком: балансировщик, DNS, security groups. Плюс новые namespace'ы, подключённые к service mesh Linkerd через Terraform сразу в двух регионах, Африке и Европе.
FinOps с первого месяца. Consolidation-политики Karpenter и rightsizing нод — чтобы compute-расходы не росли линейно вместе с флотом, который уже перевалил за 25 кластеров.
Доработал общий Helm library chart, которым пользуются все продуктовые команды — добавил graceful shutdown (terminationGracePeriodSeconds + lifecycle hooks). Изменение раскатилось на 10+ кластеров одним бампом версии чарта.
И снова написал внутренний Kubernetes-дашборд — FastAPI + чистый JS, только на этот раз с нуля, на новом стеке. Показывает ворклоды, RBAC, реальное потребление дисков, health-check ингрессов. Задеплоен через ArgoCD на dev/QA/shared, разработчики уже пользуются им вместо kubectl. Забавно, что я второй раз в карьере строю ровно этот инструмент на новом месте — хорошая идея не перестаёт быть хорошей от смены работодателя.
Ежедневно — Vault, Kaniko/GitLab CI, Kafka, ClickHouse/StarRocks, YDB и Postgres в мульти-региональном AWS. Разница с MixVel в масштабе владения: там инфраструктуру строила и вела платформенная команда, здесь референсную архитектуру на 25+ кластеров веду один.
Сентябрь 2026. Тем временем в MixVel
Sirena-Тревел (MixVel и Red Rose) я веду по контракту параллельно с Finstar, а не «иногда посматриваю» — и в сентябре это дало о себе знать: всплыло то, что тихо копилось месяцами.
Vault был опечатан (sealed) с 2 августа. Не какой-то тестовый — рабочий Vault инфраструктурного хаба, single-node, Shamir seal, без HA — восстанавливать было некому и нечем, кроме как руками. Причину падения установить уже не вышло: логи ротировались, метрики Prometheus истекли по retention, событий namespace тоже не осталось — Vault рестартовал без OOM-метки, livenessProbe на нём не было настроено вообще, только readinessProbe, так что ничего не пыталось поднять его само.
Хуже другое: 21 ExternalSecret по всей инфраструктуре целый месяц не мог синхронизироваться — все они ждали Vault и разом самовосстановились в двухсекундном окне сразу после расшифровки. Формально правило алерта на именно этот случай (ExternalSecretNotSynced) в репозитории уже существовало и должно было стрелять непрерывно весь месяц. Не долетело ни до кого — это дыра в роутинге Alertmanager, а не в правилах.
Заодно, ожидая, пока отвиснет apiserver хаба (тот в ту ночь встал на несколько минут подряд — под перегрузкой ноды, где крутилось 98+ подов), decommission'нул два неймспейса, которые месяцами не удалялись из-за зависших Terraform-финалайзеров. И отдельно — восстановил доступ к паре продакшен-хостов техподдержки, потерявших SSH-ключи: Ansible-плейбук гоняет их через снимок диска, rescue-VM, инъекцию ключа и пересоздание в Yandex Cloud — не героика, а ровно тот скучный runbook, который просто обязан существовать до того, как понадобится.
Это не «пожар потушил» история. Это история о том, что можно месяц молчать в проде и никто не заметит, если тишину не отличать от нормы.
Что бы я сделал иначе
Начинать с мониторинга, а не заканчивать им. В Flowerave я поднял нормальный мониторинг достаточно рано — и когда что-то ломалось, были данные, а не догадки. В Сирене мониторинг встраивался в уже работающую систему задним числом — это на порядок больнее. Если бы я сегодня начинал новый проект, Prometheus и алертинг появились бы раньше первого микросервиса.
GitOps с первого дня. Дисциплина «никакого прямого kubectl apply» кажется лишним усложнением — ровно до той ночи, когда отлаживаешь кластер, чьё реальное состояние разошлось с репозиторием три недели назад и никто не знает как. В MixVel — с первого дня. Дежурства становятся заметно человечнее.
Документация как полноценный результат работы. Я начал серьёзно вести runbook'и в Сирене после нескольких post-mortem'ов, где восстановление затягивалось только потому, что нужное знание жило в голове у одного человека. confluence-publisher, который я написал в MixVel, — прямое следствие того, что я стал относиться к документации серьёзно: Markdown в git, автосинхронизация в Confluence, те же практики, что и в коде.
Тишина — не то же самое, что «всё в порядке». Vault в MixVel был опечатан месяц, и заметил это не алерт, а я сам, руками. Правило для алерта существовало — оно просто никуда не долетало. Теперь я проверяю не «есть ли yaml с правилом», а «дойдёт ли это до живого человека», и для любого stateful-сервиса без HA закладываю алерт на сам факт его немоты, а не только на конкретную метрику.
Итого
- 2018–2022: эникей → Linux-сисадмин, с этого всё началось
- Сирена-Тревел: с 2022 — по сей день (сначала фултайм, с июля 2026 — по контракту параллельно с Finstar), enterprise-масштаб, миграция ВМ→K8s, CI/CD с нуля, on-call, 500+ нод
- Flowerave: 1,5 года, единственный DevOps, стартап с нуля, фундаментальная надёжность
- MixVel: с 2025 — по сей день, FluxCD hub-and-spoke, 6 кластеров, собственный инструментарий, data-платформа
- МТС: 4-месячный контракт, kubeadm + ArgoCD + Jsonnet, блокчейн/финтех
- Red Rose: с 2026 — по сей день, параллельно с MixVel, Yandex Cloud, n8n-автоматизация
- Finstar Financial Group: с июля 2026 — по сей день, фултайм, референсная AWS/EKS-архитектура на 25+ кластерах в разных регионах, целиком на мне
Восемь лет в сжатом виде: каждое место добавляло свой стек, но окупался всегда один и тот же фундамент, заложенный заранее. Бэкапы, мониторинг, воспроизводимые окружения, откат в один шаг, GitOps и документация с первого дня. И ещё один пункт, который добавился только сейчас: алерт, который никуда не долетает, ничем не лучше его отсутствия. Всё остальное — детали реализации.