Проект CI/CD-системы курса «DevOps практики и инструменты» | OTUS

Проект CI/CD-системы курса «DevOps практики и инструменты»

DevOps_Deep_28.4-5020-f3c530.png

В конце курса «DevOps практики и инструменты» студентов ждёт выполнение проекта. Это самостоятельная работа, необходимая для закрепления полученных знаний. Предлагаем вашему вниманию проект CI/CD-системы одного из лучших выпускников курса, Максима Деменева.

Для создания CI/CD системы было выдано простое микросервисное приложение: — https://github.com/express42/search_engine_crawler; — https://github.com/express42/search_engine_ui.

На основании данного приложения был выстроен процесс развёртывания инфраструктуры, процесс CI, процесс CD.

Инструменты и технологии

В проекте в той или иной мере использовались: — GCP, в частности, GKE как платформа; — Terraform для развёртывания кластера Kubernetes; — Kubernetes для создания условий функционирования микросервисов; — Helm для деплоя некоторых инфраструктурных приложений; — Docker-compose для тестирования работы приложения в локальном окружении; — Docker; — Travis-CI + некоторая обёртка bash как основная CI/CD система; — EFK-stack (Elasticsearch, fluentd, Kibana) для создания системы логирования; — Prometheus + Grafana для сбора и визуализации метрик; — MongoDB как БД для хранения данных приложения search_engine; — RabbitMQ как менеджер очередей для приложения search_engine.

Схема работы проекта

После развёртывания инфраструктуры в GKE вы можете приступить к работе (доработке) с приложением. По умолчанию при создании Kubernetes-кластера создаётся namespace prod, в котором находится основная ветка приложения (master); при создании любых других веток в репозитории git и отправке изменений в git будет создаваться отдельное окружение (namespace) с названием ветки git. После слияния изменений с веткой master все изменения приложений переносятся в окружение prod. Все dev-окружения необходимо удалять вручную.

Требования к запуску проекта:

— аккаунт в GCP; — Google Cloud SDK; — Kubectl; — terraform; — docker (опционально, аккаунт на docker hub); — (опционально) установленный и настроенный docker-compose.

Как запустить проект

Создание инфраструктуры

Запустить файл cluster.sh с параметром create или recreate:

bash cluster.sh create

Если запустить скрипт cluster.sh без параметров, будет показана справка.

ВАЖНО: 1) перед запуском скрипта убедитесь, что у вас заданы переменные SLACKAPIURL и SLACKCHANNEL. SLACKAPIURL — переменная с URL для API slack, SLACKCHANNEL — название канала в slack. Эти переменные нужны для алертинга от alertmanager. Если вы не хотите использовать алертинг, закомментируйте строки в файле cluster.sh либо задайте переменным любое мусорное значение; 2) перед запуском скрипта убедитесь, что вы находитесь в ветке master.

Результаты работы скрипта cluster.sh: — создание кластера kubernetes из 2-х нод; — удаление (полностью!) ~/.kube/config; — создание нового ~/.kube/config с контекстом нового кластера; — создание неймспейсов prod, logging, monitoring; — деплой в неймспейс prod выданного приложения вместе с MongoDB и RabbitMQ; — установка и настройка helm; — деплой Grafana и Prometheus в неймспейс monitoring. Оба приложения уже настроены в связке. В Grafana есть нужные дашборды, в Prometheus настроен service discovery; — деплой EFK-stack в неймспейс logging; — вывод всех актуальных данных кластера: IP для доступа к web-интерфейсу приложения, готовые команды для port-forward приложений на локальный компьютер.

Работа с приложением

Доступ к приложению можно получить по указанному в предыдущем пункте IP. Если у вас есть необходимость изменить/доработать приложение, просто создайте новую ветку (в имени ветки из спецсимволов допустимо использовать только "-"). Внесите изменения в приложение, запуште новую ветку в Git-репозиторий. Исходный код приложения находится в: — docker/search_engine_crawler; — docker/search_engine_ui.

Travis-ci проведёт необходимые тесты, если всё в порядке, создаст новый namespace (именно с именованием namespace в Kubernetes связано ограничение используемых символов в названиях веток), в который задеплоит новую версию приложения. Также Travis-CI выведет IP, по которому можно посмотреть приложение. В противном случае можете посмотреть IP-адрес в разделе Services в GKE. После слияния feature-ветки в master вам нужно будет самостоятельно удалить feature-namespace в kubernetes. Иными словами, при пуше изменений в ветку master меняется приложение в namespace prod.

При пуше изменений в любую другую ветку создаётся/меняется приложение в namespace с названием этой ветки.

Локальная работа с приложением

Для теста приложения на локальном компьютере используйте docker_compose/docker-compose.yml.

Технические подробности реализации проекта вы можете найти по ссылке на репозиторий Максима Деменева в GitHub.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто