Terraform vs Pulumi — Infrastructure as Code для Kotlin-команды
Сравниваем Terraform на HCL и Pulumi на Kotlin для управления Kubernetes-инфраструктурой — с реальными примерами кода, болью миграции и нашим итоговым выбором.
Заметки о веб-разработке, архитектуре, оптимизации и инструментах. Пишу о том с чем сталкиваюсь в реальных проектах.
статей
категорий
минут на чтение
Как мы оптимизировали локальное окружение из 10+ микросервисов с помощью Docker Compose, multi-stage Dockerfile и правильных health checks.
Читать статьюСравниваем Terraform на HCL и Pulumi на Kotlin для управления Kubernetes-инфраструктурой — с реальными примерами кода, болью миграции и нашим итоговым выбором.
Сайт на PHP + Nginx выдерживал 500 RPS, а при 1000 начинал отдавать 502. Проблема была не в PHP-коде (он был оптимизирован), а в конфигурации Nginx и PHP-FPM: неправильный worker_connections, отсутствие keepalive к upstream, слишком маленький pm.max_children. Рассказываю пошагово, как мы увеличили пропускную способность в 10 раз.
Сборка Kotlin-проекта занимала 6 минут. После включения build cache, configuration cache и перехода на configuration avoidance API — 45 секунд. Рассказываю, что именно мы сделали, почему большинство туториалов по ускорению Gradle не работают, и как измерять реальный эффект от каждой оптимизации.
Переносили CI/CD с GitLab на GitHub Actions. Обе системы решают одни задачи, но подход к кэшированию, параллелизму и reuse workflows принципиально разный. В GitLab всё построено вокруг .gitlab-ci.yml и runners. В GitHub Actions — вокруг reusable workflows и marketplace actions. Рассказываю, что лучше для Kotlin-проекта с тестами, Docker-образами и деплоем в Kubernetes.
Микросервис работал нормально, но Kubernetes периодически убирал его из балансировщика. Пользователи видели 503. Оказалось, readiness probe проверял подключение к PostgreSQL, и при кратковременных просадках БД (backup, vacuum) сервис становился «не готовым». Рассказываю, как правильно настроить health checks в Kubernetes, чтобы не терять трафик из-за сторонних проблем.
Базовый Dockerfile для Spring Boot на Kotlin — 800 МБ. После оптимизации — 50 МБ. Разбираю multi-stage builds, GraalVM native image, Alpine vs distroless, jlink для кастомной JRE и реальные метрики по времени сборки, cold start и memory footprint.