Проектная работа по DevOps: Search Engine Infra | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Backend-разработчик на PHP Алгоритмы и структуры данных Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Symfony Framework Unity Game Developer. Basic JavaScript Developer. Professional Android Developer. Basic JavaScript Developer. Basic Java Developer. Professional Highload Architect Reverse-Engineering. Professional Java Developer. Basic Web-разработчик на Python Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Administrator Linux. Professional Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Microservice Architecture Highload Architect MS SQL Server Developer Разработчик программных роботов (RPA) на базе UiPath и PIX Разработчик голосовых ассистентов и чат-ботов Administrator Linux. Advanced Infrastructure as a code Супер-практикум по использованию и настройке GIT Administrator Linux.Basic Экспресс-курс «IaC Ansible» Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Основы Windows Server
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Проектная работа по DevOps: Search Engine Infra

DevOps_Deep_14.2_site-5020-57ecdf.png

Заключительный модуль обучения на курсе «DevOps: практики и инструменты» посвящён выполнению проектной работы. Он помогает закрепить полученные знания и отработать навыки. А ещё становится отличным кейсом в портфолио и помогает при трудоустройстве в том случае, если практического опыта немного.

Один из последних проектов курса, который был выполнен выпускником, называется Search Engine Infra. Он представляет собой инфраструктурный репозиторий для проектов компании Экспресс 42:

  1. Search Engine Crawlerпоисковый бот для сбора текстовой информации с веб-страниц и ссылок. Бот помещает в очередь url, переданный ему при запуске. Затем он начинает обрабатывать все url в очереди. Для каждого url бот загружает содержимое страницы, записывая в БД связи между сайтами и словами. Все url, найденные на странице, он помещает обратно в очередь.
  2. Search Engine UIвеб-интерфейс поиска слов и фраз на проиндексированных ботом сайтах. Веб-интерфейс минимален: предоставляет пользователю строку для запроса и результаты. Поиск происходит только по индексированным сайтам. Результат содержит только те страницы, на которых были найдены все слова из запроса. Рядом с каждой записью результата отображается оценка полезности ссылки (чем больше, тем лучше).

Особенности запуска Search Engine Infra на локальной машине

Необходимые компоненты — docker engine, make. Для запуска необходимо:

1. Клонировать подмодули:
git submodule init
git submodule update
2. Настроить docker/.env, monitoring/alertmanager/alertmanager.secrets.
3. Запустить проект:
make up

После запуска будут доступны следующие веб-интерфейсы: — crawler_ui; — grafana; — prometheus; — kibana.

Особенности запуска в GCP

1. Первоначальная настройка управляющего хоста.

Предполагается, что в GCP уже создан проект docker-12345, и приложение нужно установить на stage. Для работы надо сгенерировать пару ssh-ключей и загрузить открытый ключ в список метаданных проекта (подробнее см. здесь).

ssh-keygen -b 2048 -t rsa -f ~/.ssh/docker-user  -q -N ""

Далее запускаем scripts/bootstrap.sh из корня проекта. Скрипт установит и настроит нужные приложения (gcloud, ansible, packer, terraform), создаст из шаблонов конфигурационные файлы, настроит динамический inventory и т. д.

export GCP_PROJECT=docker-12345
bash scripts/bootstrap.sh -p $GCP_PROJECT

Следующий шаг — настройка конфигурационных файлов (частично они уже настроены с помощью скриптов бутстрапа):

~/.docker/search_engine/docker/.env
~/.docker/search_engine/monitoring/alertmanager/alertmanager.secrets
infra/terraform/stage/terraform.tfvars
infra/terraform/prod/terraform.tfvars
2. Установка без использования kubernetes.

Приложение разворачивается с помощью терраформа:

source infra/ansible/.venv/bin/activate
cd infra/terraform
terraform init
terraform  apply -auto-approve
cd stage/
terraform init
terraform  apply -auto-approve

Адрес приложения можно получить командой:

terraform output

По этому адресу будут доступны: — веб-интерфейс crawler_ui (порт 8000); — веб-интерфес grafana (порт 3000); — веб-интерфейс prometheus (порт 9090); — веб-интерфейс kibana (порт 5601).

3. Установка с использованием kubernetes (предпочтительно).

Развернуть kubernetes с помощью терраформа:

source infra/ansible/.venv/bin/activate
cd kubernetes/terraform
terraform init
terraform  apply -auto-approve
cd gke/
terraform init
terraform  apply -auto-approve

Просмотреть информацию о созданном кластере можно командой:

gcloud container clusters list
NAME       LOCATION        MASTER_VERSION  MASTER_IP    MACHINE_TYPE  NODE_VERSION  NUM_NODES  STATUS
cluster-1  europe-west1-b  1.9.7-gke.6  xx.xx.xx.xx  g1-small      1.9.7-gke.6   4          RUNNING

После этого будут доступны следующие ресурсы: — gitlab; — grafana; — kibana.

Настройка Gitlab и запуск проекта Search Engine Infra

Для этого необходимо выполнить следующие шаги: — создать группу search-engine; — в группе search-engine создать проекты crawler, ui, charts, infra и загрузить соответствующие репозитории; — для проекта charts в Settings->CI/CD создать Pipeline triggers; — в группе search-engine в Settings->CI/CD->Variables добавить переменные:

CI_REGISTRY_PASSWORD
CI_REGISTRY_USER
SEARCH_ENGINE_DEPLOY_TOKEN

— собрать docker-образы и развернуть приложение. Для проектов crawler, ui в CI/CD->Pipelines выполнить Run Pipeline для ветки master.

После этого будет развернут staging:

crawler_ui_staging

Чтобы развернуть приложение в производственную среду, нужно вручную подтвердить развёртывание в search-engine->CI/CD->Pipelines->production:

crawler_ui_production

После пуша коммита в ветку микросервиса будут выполнены: — тестирование кода; — сборка образа докер контейнера:

loktionovam/search_engine_crawler:feature-xxx-feature-name
loktionovam/search_engine_ui:feature-xxx-feature-name

— пуш образа в dockerhub; — запуск review приложения через gitlab environments с ручным удалением.

При изменениях в мастер ветке микросервиса будут выполнены: — тестирование кода; — сборка образа докер-контейнера; — пуш образа в dockerhub; — запуск приложения на stage из master ветки charts репозитория с ручным подтверждением развёртывания в производственную среду.

Примечание: проект создавался с использованием DNS. Чтобы он заработал где-то ещё, нужно исправить доменную зону loktionovam.com, причём эти исправления нужно внести по всему проекту (возможно, стоит использовать шаблонизацию при бутстрапе).

С более подробной информацией можно ознакомиться, перейдя по ссылке на соответствующий репозиторий. И, как всегда, ждём ваших комментариев!

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

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

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

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