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

Заключительный модуль обучения на курсе «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, причём эти исправления нужно внести по всему проекту (возможно, стоит использовать шаблонизацию при бутстрапе).

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