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

Проектная работа по 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 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто