Кейсы: инфраструктура, платформа и управление сервисами
Чтение на пару минут. Каждый кейс по одной схеме: что было, что я сделал, что из этого вышло. Читать подряд не обязательно, фильтр сверху отберёт нужное.
Два направления в корпорации ITG. В SimpleOne — инфраструктура и платформа продукта: подготовка к Kubernetes, объектное хранилище, процессы и запас мощностей. В ITGLOBAL.COM — управляемые сервисы: команда из 13 инженеров (DevOps, SRE, прикладные сервисы, Linux/Windows, DBA).
SimpleOne · Head of Infrastructure
Инфраструктура и платформа в SimpleOne
Продукт развёртывается как HA-кластер на 20+ серверах (Docker Compose + Ansible) и поставляется заказчикам на их площадку. Мои кейсы здесь — про подготовку к Kubernetes, объектное хранилище, воспроизводимые процессы и осознанное планирование мощностей.
15репозиториев микросервисов в аудите готовности к Kubernetes
~8 ТиБбоевых данных в плане переноса S3 (1,8 млн объектов)
до 180 ГБпотенциал сокращения объектного хранилища
01Платформа · Kubernetes
Аудит готовности к Kubernetes — 15 микросервисов
Контекст
Продукт развёртывается как HA-кластер на 20+ серверах через Docker Compose и Ansible; стратегическая цель — переход в Kubernetes. Кодовая база микросервисов создавалась под Compose: сеть через внешнюю Docker network, DNS через embedded resolver, конфиги БД и брокеров ссылались на 127.0.0.1/localhost как дефолты. В Kubernetes эти допущения молча ломаются при деплое — нужно было понять, что блокирует миграцию, и оценить масштаб изменений.
Что сделал
провёл статический анализ 15 репозиториев: Go-сервисы, PHP-монолит, HAProxy/Nginx-конфиги, интеграционные сервисы
категоризировал находки по критичности: migration-critical (блокируют запуск) против low-priority (dev/CI/test)
нашёл 12+ мест с захардкоженными DNS/IP-допущениями, 7+ loopback-дефолтов для БД и брокеров, Docker-специфичные resolver в proxy и healthcheck, привязанный к localhost вместо pod IP
по каждой находке дал конкретную рекомендацию: заменить дефолты на обязательные переменные окружения, чтобы сервис падал сразу при старте, а не в бою, перевести Docker network на K8s Services, вынести захардкоженные gRPC-адреса в конфиг
выделил отдельный класс проблем: сервис с адресом peer-сервиса прямо в компилируемом коде — требует рефакторинга, а не смены конфига
Результат
В срок
K8s-песочница продукта развёрнута и запущена, Q2 2026
документ принят как архитектурная основа для планирования K8s-миграции
сформирован бэклог технических историй для команд платформы и инфраструктуры на Q3
ADR: выбор нового S3-бэкенда для поставок продукта
Контекст
Продукт поставляется заказчикам со встроенным S3-хранилищем — один экземпляр на инсталляцию. Объём боевых данных: ~8 ТиБ, 1,8 млн объектов; хранилище используют основное приложение, несколько Go-сервисов, Ansible-плейбук, инструменты резервного копирования БД, container registry и корпоративный мессенджер. Текущий S3-бэкенд изменил лицензионную политику открытой редакции (часть функциональности ушла в Enterprise, консоль убрана из community) — поставлять его заказчикам на их площадку юридически рискованно, тем более с учётом импортозамещения.
Что сделал
составил матрицу требований к S3 — 20+ критериев: Data/Control Plane, Event Notifications → AMQP, Bucket Lifecycle, IAM Bucket Policy, SSE-KMS, Prometheus-метрики, path-style, Sigv4, совместимость с тремя S3-клиентами и инструментами резервного копирования
сравнил три варианта: статус-кво (100% матрицы, но лицензионный блокер); вариант A — отклонён (нет Event Notifications в AMQP, нет SSE-KMS, ограниченный Lifecycle, AGPL); SeaweedFS (Apache 2.0, ~95% матрицы, AMQP → RabbitMQ, совместим со всеми клиентами)
выбрал SeaweedFS — единственный вариант с открытой лицензией и без урезанных функций, пригодный для поставки заказчикам
разработал тест-план: 15 кейсов Spike (Go/No-Go) + 15 PoC/prod — multipart-загрузка >10 ГБ, presigned URL с перегрузкой заголовков, Bucket Lifecycle, SSE-KMS через внешний KMS, нагрузочный прогон 30 мин для сравнения p99 latency
проанализировал схемы хранения: репликация (×2 overhead, от 2 нод) против Erasure Coding 10+4 (×1.4 overhead, от 14 нод) — с рекомендацией по каждой группе данных
подготовил 10-шаговый план миграции prod: синхронизация с верификацией контрольных сумм, read-only окно переключения, smoke-проверки, контрольный период эксплуатации
Результат
Apache 2.0
лицензионный риск устранён — SeaweedFS утверждён для всех новых поставок
все существующие клиенты сохраняют совместимость без изменений кода — только смена endpoint и credentials
Продукт развёртывается на нескольких Linux-дистрибутивах; enterprise-заказчики в РФ запрашивают поддержку отечественных ОС. Процесс добавления новой ОС был неформальным: инженер добавлял дистрибутив в список допустимых — и считал задачу закрытой. Без обязательной проверки ОС попадала в документацию без полного цикла проверки (нагрузочное тестирование пропускалось, distributed/offline-режимы не проверялись) — риск, что заказчик получает ОС в списке поддерживаемых, а при развёртывании находит несовместимость.
Что сделал
разработал регламент с 3 статусами ОС (Supported / Deprecated / Removed) и 4-этапным SDLC-чеклистом: Assessment → In Progress (Done) → Testing → Released
определил структуру задачи: Feature → User Stories по командам → Subtasks на каждый вид работ (спецификация, тест-план, план НТ, стенды, документация)
закрепил требования к стендам: совпадение версий ОС/Docker/Compose, установка и настройка автоматически через pipeline/ChatOps до перехода в работу
зафиксировал обязательный вход в работу: Ansible facts ОС, сведения о Docker/containerd/Compose, нагрузочный scope (согласованный со Scaling Team), известные риски
прописал состав итоговых артефактов: MR/branch, CI jobs (pre-check/deploy/post-check), smoke/E2E, k6-артефакты (runtime.zip, JSON, xlsx, HTML, Grafana), вывод Scaling Team, known limitations
сделал нагрузочное тестирование обязательным этапом для статуса Supported и определил триггеры повторной проверки: смена major/minor версии ОС, Docker-pins, репозитория, kernel/cgroup-дефолтов, CA/GPG/proxy, ключевых компонентов или базового k6-сценария
Результат
2 ОС
подтверждена поддержка за квартал, Q2 2026
регламент принят и передан на утверждение
сформирован воспроизводимый порядок: ОС считается поддерживаемой только после всех этапов и фиксации результата в коде, задаче и документации
Стек
AnsibleDockerk6PlaywrightPrometheusGrafanaGitLab CI
04Хранилище · аудит
Аудит объектного хранилища — 18 корзин, ≥400 ГБ
Контекст
Продукт использует внешнее S3-хранилище для релизных артефактов, резервных копий БД, CI-артефактов и вспомогательных сервисов. Точный объём не отслеживался — запас мощностей считали на глаз.
Что сделал
провёл read-only инвентаризацию 18 корзин без изменения данных
для каждой корзины зафиксировал объём, число объектов, дату последней записи, тип содержимого
установил, что ~75% объёма (≥300 ГБ) занимают релизные артефакты, накопленные с 2022 года без правил хранения
выявил несколько резервных репозиториев без ограничений по сроку хранения — бесконтрольный рост объёма
нашёл корзины без записей 1,5–4 года суммарно ≥19 ГБ (бэкапы тестовых сред, образы registry, зеркала репозиториев) и дубли-пересборки одного минора релиза
подготовил приоритизированные рекомендации: сроки хранения для релизов, forget --prune (restic), wal-g delete retain, lifecycle expiration для временных артефактов, по каждой корзине мониторинг
Результат
до 180 ГБ
потенциал освобождения + ≥19 ГБ от неактивных корзин
выявлены резервные репозитории без ограничений по сроку хранения — рост остановлен до того, как кончилось место
аудит проведён без простоя и без изменения данных
Стек
S3 APIPythonrcloneWAL-Grestic
ITGLOBAL.COM · Head of Managed Services
Управленческие кейсы в ITGLOBAL.COM
Управляемые сервисы — команда из 13 инженеров (DevOps, SRE, прикладные сервисы, Linux/Windows, DBA). Задача была в том, чтобы эксплуатация перестала держаться на устных договорённостях: понятные зоны ответственности, очереди, которые видно в цифрах, и экономика услуг, которую можно посчитать.
−88%технический долг команды: 286 → 34 задачи
5,9 днмедианное время выполнения (было 7); p90 — 19 дней (было 28)
×2доход DevOps-услуги у ключевого клиента
+48%выручка на час работы инженера (кастомная услуга)
7 минSLA на реакцию по кастомной услуге, режим 24×7
4продуктированных managed-сервиса
05Операционка · ITSM/SDLC
Построение управляемой операционки для инженерного отдела
Контекст
Статус значительной части работ приходилось уточнять у исполнителей. Операционные и проектные задачи смешивались, инженеры самостоятельно выбирали следующую работу, а у руководства не было единого набора показателей по очередям, загрузке и скорости выполнения.
Что сделал
разделил операционную работу в ITSM и проектную работу в SDLC
создал отдельные очереди для инцидентов, запросов, проблем, изменений и нераспределённых задач
ввёл приоритетную обработку очереди вместо самостоятельного выбора задач инженерами
установил требования к актуальности статусов и комментариев в длительных задачах
внедрил метрики возраста и размера очереди, загрузки сотрудников, трудозатрат и времени выполнения
связал показатели операционной деятельности с ежемесячным KPI команды
Результат
−88%
технический долг: 286 → 34 задачи
медианное время выполнения задачи уменьшилось с 7 до 5,9 дня
время закрытия на уровне p90 уменьшилось с 28 до 19 дней
состояние работ стало доступно из ITSM/SDLC без дополнительного опроса исполнителей
06Команда · структура
Реструктуризация команды из 13 инженеров
Контекст
Сотрудники были объединены преимущественно по исторически сложившимся технологическим специализациям. Зоны ответственности пересекались, руководитель оставался точкой входа для большого числа операционных вопросов, а переключение контекста снижало производительность.
Что сделал
разделил отдел на три направления: DevOps, SRE и прикладные сервисы
назначил лидов и закрепил за командами сервисы и зоны ответственности
сформировал модель ролей и ставок для планирования загрузки
ввёл квартальный цикл оценки сотрудников и регулярные встречи one-to-one
разработал матрицу компетенций для DevOps-направления
включил менторинг, knowledge sharing и улучшение процессов в систему мотивации
Результат
3 команды
DevOps, SRE и прикладные сервисы — с лидами и зонами ответственности
операционные и технические решения делегированы лидам
появилась возможность планировать загрузку не только по сотрудникам, но и по направлениям
квартальные performance review стали регулярным процессом для всей команды
параллельно с текущей эксплуатацией были запущены новые DevOps- и SRE-проекты
07Продукт · сервисы
Перепроектирование портфеля управляемых сервисов
Контекст
Существующие описания услуг не всегда позволяли однозначно определить состав работ, ограничения и ответственность клиента и исполнителя. Это создавало риски на presale, при активации услуги, в эксплуатации и при последующем биллинге.
Что сделал
Продуктировал четыре базовых managed-сервиса — Managed Monitoring, Managed Logging, Software Backup и Managed OS. Для портфеля подготовил:
единые описания услуг на русском и английском языках
SLA и матрицы ответственности
требования и опросники для активации
перечни типовых запросов
правила изменения параметров и деактивации услуг
GPL и единицы тарификации
presale-калькуляторы
пакеты инженерных часов XS–XL с прогрессивной скидкой
Результат
4 сервиса
Monitoring, Logging, Backup, OS — с SLA и presale-калькуляторами
состав и границы услуг стали единообразными для продаж, архитекторов и эксплуатации
появились повторяемые процедуры presale, активации и передачи услуги в поддержку
услуги получили измеримые единицы тарификации: VM, сервис, кластер, инстанс, объём хранения и инженерные часы
снизился риск появления неоплачиваемых работ за пределами согласованного SLA
08Экономика · прибыль и убытки
Экономика отдела и автоматизация биллинга
Контекст
Данные о доходах, выставляемых услугах, трудозатратах и стоимости команды находились в разных системах и отчётах. Было сложно определить прибыльность конкретного клиента или услуги и отличить оплачиваемую деятельность от операционных потерь.
Что сделал
свёл данные из биллинга, 1С, ITSM и timesheets
разработал первую модель прибылей и убытков отдела
ввёл план-факт по доходам и расходам
начал считать валовую маржинальность по услугам
добавил показатели выручки и прибыли на сотрудника
автоматизировал часть ежемесячных биллинг-отчётов
организовал регулярный анализ трудозатрат по клиентам и услугам
Результат
По одному из контрактов анализ показал, что фактическая стоимость работ превышала получаемую оплату. После пересмотра состава услуги:
68%
финансовый эффект от объёма высвобожденной инженерной ёмкости
неоплачиваемый объём работ, который остановили, составлял ~30% трудозатрат по контракту
освободившаяся ёмкость направлена на более маржинальные проекты
09Коммерция · цены
Пересборка коммерческой модели DevOps-услуги
Контекст
У крупного продуктового клиента фактический объём DevOps-работ и используемая модель оплаты перестали соответствовать друг другу. В рамках одного контракта смешивались разработка, сопровождение, консультации и поддержка инфраструктуры.
Что сделал
провёл аудит задач, трудозатрат и объектов инфраструктуры
разделил работы на Build и Support
рассчитал необходимый состав команды и доли ставок
разработал модели T&M и пакетной тарификации
сформировал отдельные ставки для junior-, middle-, senior- и architect-ролей
стандартизировал ежемесячную отчётность по DevOps и Managed IT
подготовил сервисную матрицу и калькулятор стоимости поддерживаемой инфраструктуры
Результат
×2
доход по DevOps-услуге у ключевого клиента
коммерческая модель стала учитывать реальную структуру команды и характер работ
появилась прозрачная связь между объёмом поддержки, инженерной ёмкостью и выставляемой стоимостью
отчётность клиента и внутренний биллинг приведены к единому формату
10Надёжность · мониторинг
Развитие мониторинга и разборов после аварий
Контекст
Модели здоровья части сервисов были неактуальны, некоторые алерты создавали лишний шум, а знания об архитектуре и сценариях отказа оставались у отдельных инженеров. После крупного инцидента с DNS-сервисом выяснилось, что часть конфигурации PostgreSQL/Patroni была внесена вручную и не сохранялась в распределённом хранилище конфигурации. При переключении кластера это привело к нарушению репликации.
Что сделал
организовал актуализацию моделей здоровья сервисов
внедрил отдельную модель здоровья и алертинг для DNS-сервиса
оптимизировал алерты для PostgreSQL и PHP-FPM
формализовал хронологию крупного инцидента и его root cause
координировал коммуникацию между инженерами, смежными командами и сервисным центром
перевёл corrective actions из ручных операций в конфигурацию кластера и автоматизированное развёртывание
закрепил изменения в DCS/etcd и инфраструктурных playbook
Результат
80%
моделей здоровья сервисов актуализировано
причина инцидента отделена от симптомов и зафиксирована в разборе после аварии
критичная конфигурация перестала зависеть от ручного изменения конкретного узла
появился воспроизводимый сценарий восстановления и повторной инициализации кластера
технические выводы инцидента преобразованы в конкретные изменения автоматизации
11Кастомная услуга · SLA
Полный цикл кастомной услуги: мониторинг и алертинг с реакцией 7 минут 24×7
Контекст
Заказчику был нужен не типовой мониторинг из каталога, а кастомная услуга под его критичные сервисы — с гарантированной реакцией на инциденты в режиме 24×7. Готового продукта под такой уровень реакции в портфеле не было, а разовые договорённости не давали ни предсказуемого качества, ни понятной экономики.
Что сделал
Провёл услугу через полный цикл — от требований до эксплуатации и биллинга:
собрал требования, объекты наблюдения и критичные сценарии, согласовал пороги и приоритеты
спроектировал и разработал кастомный мониторинг и алертинг под сервисы заказчика
заложил SLA на реакцию 7 минут в режиме 24×7 с дежурствами, маршрутизацией и эскалациями
упаковал услугу коммерчески: состав работ, единицы тарификации, SLA-матрица и калькулятор
провёл активацию, передачу в эксплуатацию и регулярную отчётность
Результат
+48%
выручка на час работы инженера
7 мин
SLA на реакцию, режим 24×7
сформирован воспроизводимый шаблон для похожих кастомных услуг — от presale до эксплуатации
Подход
Общий подход
В инженерных и управленческих задачах я иду одним и тем же путём:
сначала показать, как всё устроено на самом деле;
договориться, что и как мы измеряем;
закрепить, кто за что отвечает;
убрать ручные операции и договорённости на словах;
связать техническое изменение с деньгами или сроками.
Моя работа как руководителя — не переделать всю инженерную работу самому, а собрать систему, в которой команда сама принимает решения и держит сервисы без ежедневного контроля сверху.
P.S. Похожая задача — навести порядок в эксплуатации, подготовить инфраструктуру к Kubernetes, выбрать хранилище или собрать управляемую операционку и связать её с экономикой? Обсудить можно в контактах или отдельно по консалтингу на gomandev.ru →