Обновление разработки приложения Lympo от главы DevOps и SRE Романа Городецкого
Приветствую! Роман здесь, руководитель DevOps и инженер надежности сайта в Lympo. Я рад представить некоторые последние достижения в технической инфраструктуре Lympo.
В течение последних двух месяцев мы наконец разработали конвейеры, которые позволяют нашим разработчикам быстрее и с меньшими рисками или борьбой поставлять свой код, чем раньше.Кроме того, мы активно инвестируем в подготовку нашей инфраструктуры для использования в производстве, и у нас уже есть некоторые идеи поделиться с вами.
Как отметил наш технический директор Gintautas Kisonas в последнем обновлении , мы хотим, чтобы наша инфраструктура была развязанной, масштабируемой и безопасной — вот основные принципы.По этой причине мы решили использовать архитектуру микросервисов. Для размещения и обслуживания микросервисов мы выбрали контейнеры Docker, поскольку это самое надежное решение для хостинга веб-сервисов на рынке ИТ сегодня.
Поток развития
Для размещения изображений Docker необходимы реестр докеров и службы непрерывной интеграции. Реестр Docker позволяет нам хранить наши обработанные изображения докеров. Между тем непрерывная интеграция (CI) позволяет автоматизировать многие обычные задачи в фоновом режиме, когда разработчик публикует свой код в репозиторий GIT. CI чаще всего используется для тестирования недавно опубликованного кода, а также для создания и пушинга изображений докеров в реестр Docker. Как только одно из заданий на конвейер заканчивается, разработчик мгновенно уведомляется по электронной почте и Slack, а конвейер прерывается.
Мы выбрали GitLab для размещения CI и Docker, который позволяет нам размещать наши изображения кода и докеров, а также использовать их CI.
Решения для хостинга
Когда контейнеры Docker впервые стали популярными, люди быстро поняли, что им нужен автоматизированный способ управления сотнями или даже тысячами контейнеров внутри кластера Docker. Вот почему нам нужен оркестр Docker.
Почему бы не Кубернете?
Двумя самыми популярными оркестрами докеров сегодня являются Kubernetes и Docker Swarm. Хотя большая часть ИТ-индустрии использует Kubernetes в качестве де-факто решения для организации контейнеров, мы решили пойти с Docker Swarm. Зачем? Простота Docker Swarm позволяет всей команде легче понять процесс развертывания, даже если разработчик не знает каких-либо знаний о контейнерах.
К счастью, в этом году Docker представила функцию, которая позволяет использовать конфигурацию Docker Swarm для развертывания Kubernetes, поэтому, как только Lympo станет больше, и мы будем более опытны с Docker, мы можем подумать о переходе на Kubernetes.
О облачных провайдерах
В настоящее время мы принимаем Docker Swarm на Digital Ocean(производственная среда) и Hetzner (промежуточная среда). Это позволяет нам оставаться осторожными.
Digital Ocean имеет очень легкую панель управления с большими возможностями, такими как балансировщик нагрузки, пространство (хранение блоков), плавающие IP-адреса, резервные копии, моментальные снимки и т. д. Hetzner — это менее дорогой вариант, чем Digital Ocean и единственная облачная функция, которую они предлагают, кроме вычислительные экземпляры — это плавающие IP-адреса. Это делает Хетзнера идеальным кандидатом для использования в качестве промежуточной среды. Как Digital Ocean, так и Hetzner имеют плагин Terraform. Дальше я объясню, что такое Terraform и почему это важно.
Обзор инфраструктуры
Автоматизация
В настоящее время мы используем 3 подхода к автоматизации инфраструктуры:
• Terraform позволяет нам безопасно и предсказуемо создавать, изменять и улучшать конфигурацию наших облачных юнитов.
• Ansible — очень надежный и явный механизм автоматизации, в основном используемый для создания облачных инстансов.
• Docker Compose + Makefile. Благодаря этой комбинации мы можем развернуть нашу конфигурацию контейнера в Docker Swarm. Мы используем Docker Compose, который позволяет нам сохранять конфигурацию в файлах YAML для каждого стека контейнеров. Makefile, тем временем, позволяет нам автоматизировать этот процесс еще больше.
В настоящее время мы прилагаем много усилий для внедрения Continuous Deployment, что даст нам полностью автоматическое развертывание, и это будет сделано в ближайшем будущем.
Регистрация и мониторинг
Для мониторинга узлов Docker Swarm и запущенных контейнеров мы решили использовать Dynatrace. Dynatrace имеет красивый интерфейс панели управления, а также отображает карту хоста на новом уровне, по сравнению с аналогичными службами.
Наш докерный стек
Как вы уже заметили на диаграмме, мы используем обратный прокси Traefik. Traefik позволяет нам указывать виртуальные хосты для каждой службы прямо в файле конфигурации Docker Compose, что является очень надежным способом настройки виртуальных хостов для наших сервисов Docker. BoltDB используется для установки Traefik Highly Available. Каждая конечная точка использует «Let’s Encrypt SSL- сертификаты», поэтому все наши входящие соединения зашифровываются. Traefik запрашивает SSL-сертификаты автоматически, как только мы добавим новую службу Docker в стек.
GitLab CI runners размещаются в среде Staging, потому что с Hetzner более высокие вычислительные ресурсы стоят меньше, чем на Digital Ocean.
Portainer позволяет развернуть новые изображения Docker всего за один клик, для всех наших мейнтейнеров. Это экономит время, поскольку разработчики могут быть полностью самоорганизованы и внедрять свои обновления в производство, не беспокоя парней DevOps.
Это все о SAAS
Наша диаграмма содержит множество услуг SAAS. SAAS означает «Программное обеспечение как услуга». Это позволяет нам сосредоточиться на доступности, а не на хостинге и обслуживании этих услуг.
• Например, создание нашего собственного кластера MySQL будет очень трудоемким и тяжелым в обслуживании. Поэтому мы решили использовать AWS RDS .
• Для кластера MongoDB есть MongoDB Atlas, решение SAAS от создателей MongoDB.
• Confluent Cloud дает вам целый кластер Apache Kafka из коробки.
• Sentry используется для поиска всех ошибок, возникающих в процессе производства, в режиме реального времени, а также незамедлительно уведомляет разработчиков через Slack и электронную почту. Он даже открывает новые билеты в Джире и Гитлабе, что экономит еще больше времени для нашей команды.
Окончательные слова
Я считаю, что за такой короткий промежуток времени результаты разработки действительно велики, так как инфраструктура становится более стабильной и автоматизированной каждый день. Мы планируем внедрить Continuous Deployment в ближайшей функции, которая полностью автоматизирует наше развертывание до производства.Например, все наши изображения Docker будут проверяться на наличие уязвимостей с помощью службы SonarQube перед развертыванием. Он также будет запускать сквозные тесты после обновления службы и отката в случае сбоя тестов. Существует также долгий путь для реализации гибридного облачного решения для хранения базы данных blockchain локально и с очень жесткой безопасностью.
На данный момент все, что мы представили здесь сегодня, является базой для максимально быстрого развертывания, перехода к самоподдерживаемой производственной среде и поддержания как можно более низких затрат на обслуживание, балансируя это с небольшим количеством часов обслуживания.
Быстрое развертывание является основным ключом к успеху в каждой ИТ-компании. Если вы случайно являетесь членом DevOps, я приглашаю вас ознакомиться с этим докладом об ИТ-исполнении от SRECon, Николь Форсгрен и Джез Хамбл.