Проектная работа по DevOps: Search Engine Infra
Заключительный модуль обучения на курсе «DevOps: практики и инструменты» посвящён выполнению проектной работы. Он помогает закрепить полученные знания и отработать навыки.
Один из последних проектов курса, который был выполнен выпускником, называется Search Engine Infra. Он представляет собой инфраструктурный репозиторий для проектов компании Экспресс 42:
- Search Engine Crawler — поисковый бот для сбора текстовой информации с веб-страниц и ссылок. Бот помещает в очередь url, переданный ему при запуске. Затем он начинает обрабатывать все url в очереди. Для каждого url бот загружает содержимое страницы, записывая в БД связи между сайтами и словами. Все url, найденные на странице, он помещает обратно в очередь.
- 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, причём эти исправления нужно внести по всему проекту (возможно, стоит использовать шаблонизацию при бутстрапе).
С более подробной информацией можно ознакомиться, перейдя по ссылке на соответствующий репозиторий. И, как всегда, ждём ваших комментариев!