Начинающим DevOps-инженерам, администраторам, любителям фасовать микросервисы по контейнерам — о применении пакетного менеджера Helm в Kubernetes.
Ранее в разработке приложений преобладала монолитная архитектура — принцип единого и неделимого кода. Функции "организма" монолитного приложения тесно переплетены и взаимодействуют через внутренние механизмы. Сложно выделить конкретную функцию приложения: любые изменения затрагивают смежные функции. Поэтому каждый шаг разработки обновляет приложение целиком, продукт эволюционирует медленно и неповоротливо.
В противовес этому недостатку монолита появилась микросервисная архитектура. Код строится из простых компонентов, каждый компонент упакован в коробку-модуль и выполняет только собственную функцию. Общение между компонентами тоже простое: один, согласно протоколу, спросил, второй — ответил.
Что изменилось? Во-первых, проектирование модулей обрело независимость. Каждый разработчик (или команда) решает свою небольшую задачу. Во-вторых, развилась утилизация ресурсов. Микросервисы эксплуатируются равномерно, нагрузка на них распределяется оптимально. Как следствие, возникла профилактика кода от ошибок. Сбой в одном из модулей не тянет за собой другие, а в связях между модулями нет «бутылочных горлышек».
Побочный эффект микросервисной архитектуры — стремительное размножение коробок-модулей. Потребовалось наладить логистику. Микросервисы накапливаются и распределяются по репозиториям, а репозитории доставляют модули на сборочную площадку. Такая практика получила название CI/CD (Continuous Integration/Continuous Delivery, непрерывная интеграция/непрерывная доставка).
Внутри каждого репозитория настроены CI/CD-пайплайны — конвейеры передачи модулей на целевую платформу. На платформе (в нашем случае — Kubernetes) модули разворачиваются, переупаковываются, совмещаются в приложение. Получается некий промежуточный результат. Ура.
Каждый отдельный модуль-микросервис несёт в себе метаданные. Много модулей — много метаданных, ими нужно уметь управлять. Helm — инструмент для упаковки модулей с метаданными в пакеты, которые удобно запускать в Kubernetes.
Перед нами встала конкретная задача: перенести в Kubernetes приложение (порядка пятидесяти микросервисов). Перенос происходит так:
Сравните объем работы:
Рекомендуем Helm. Пакетный менеджер немногим сложнее пакета с пакетами на вашей кухне.
3 ноября 2022