Проект CI/CD-системы курса «DevOps практики и инструменты» | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
PHP Developer. Professional Алгоритмы и структуры данных Разработчик программных роботов (RPA) на базе UiPath и PIX
-27%
Scala-разработчик PHP Developer. Basic C# Developer. Professional
-23%
Архитектура и шаблоны проектирования iOS Developer. Professional MS SQL Server Developer Golang Developer. Professional Vue.js разработчик NoSQL Highload Architect Node.js Developer Web-разработчик на Python Android Developer. Professional Microservice Architecture Reverse-Engineering. Professional React.js Developer Flutter Mobile Developer Разработчик IoT Подготовка к сертификации Oracle Java Programmer (OCAJP) Java Developer. Basic Программист С Супер-интенсив "Tarantool" Специализация Java-разработчик
Инфраструктура
Разработчик программных роботов (RPA) на базе UiPath и PIX
-27%
Administrator Linux. Professional
-26%
Network engineer Разработчик чат-ботов и приложений для виртуальных ассистентов
-15%
Administrator Linux. Advanced Специализация Network engineer
-5%
Cloud Solution Architecture NoSQL Инфраструктурная платформа на основе Kubernetes Базы данных Microservice Architecture Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по использованию и настройке GIT Administrator Linux.Basic Экспресс-курс «IaC Ansible» Экспресс-курс по управлению миграциями (DBVC) Экспресс-курс "Версионирование и командная работа с помощью Git" Network engineer. Basic
Корпоративные курсы
Безопасность веб-приложений Разработчик программных роботов (RPA) на базе UiPath и PIX
-27%
Разработчик чат-ботов и приложений для виртуальных ассистентов
-15%
Agile Project Manager Руководитель поддержки пользователей в IT
-10%
Промышленный ML на больших данных Cloud Solution Architecture NoSQL Node.js Developer Reverse-Engineering. Basic Machine Learning. Professional Супер-практикум по работе с протоколом BGP Game QA Engineer Разработчик IoT Экcпресс-курс «ELK» Enterprise Architect Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Экспресс-курс «Введение в непрерывную поставку на базе Docker» Вебинар CERTIPORT
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Проект 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 комментариев
Для комментирования необходимо авторизоваться
🔥 Выгодные предложения
Подборка курсов, которые можно приобрести по выгодной цене только до конца июля!