Проект по курсу "DevOps практики и инструменты"

Этапы работ, которые удалось успеть воплотить:

  • Создание тестового окружения средствами Terraform: написан манифест для получения интсанса в GCP с провижинерами установки docker, docker-compose
  • Получение исходников микросервисного приложения, обзор кода
  • Написание Dockerfile'ов, создание образов контейнеров
  • Написание docker-compose.yml для запуска микросервисного приложения в тестовой среде GCP.
  • Тестирование запуска приложения, БД и очереди сообщений и их взаимодействия. Всё ок.
  • Создание ресурсов кластера k8s средствами Terraform
  • Написание chart'ов приложение
  • Деплой приложения в среде k8s средствами helm
  • Подключение мониторинга Prometheus к метрикам приложения
  • Создание среды GitLab, перенос репозитория, настройка среды
  • Настроить процесс CI/CD для билда изменений приложения, тестирования и деплоя приложения в рабочей среде

Запуск приложения в тестовой среде:

  • Предварительно сгенерировать пару из приватного и публичного ключей
  • Открыть в GCP файрволе SSH и 8001 порты
  • Создание среды командами terraform из директории infra/terraform/docker/:
    • На основании terraform.tfvars.example создать файл terraform.tfvars и задать значения переменных проекта GCP и пути к ключам
    • terraform init
    • terraform plan
    • terraform apply
  • Залогинившись на инстансе получить репозиторий
  • Переименовать src/.env.example в src/.env и задать значения переменных
  • Выполнить из директории src (впоследствии вынесется в отдельную директорию):
    • docker-compose up -d
  • Открыть в браузере http://EXT-IP:8001, где EXT-IP - внешний адрес инстанса GCP

Запуск приложения в среде kubernetes:

  • Из директории infra/terraform/gke-cluster/ установить среду kubernetes:
    • На основании terraform.tfvars.example создать файл terraform.tfvars и задать значения переменных проекта GCP
    • Произвести инициализацию terraform: terraform init
    • Проанализировать изменения применяемых terraform'ом: terraform plan
    • Создать кластер: terraform apply
  • Подключить кластер в качестве основного контекста kubectl: gcloud container clusters get-credentials my-gke-cluster --zone europe-west4-c --project %имя проекта%
  • Установить приложение в кластер из директории kubernetes/charts/:
    • Произвести инициализацию helm установив серверную часть tiller: helm init
    • Установить приложение: helm install app/ --name app-1
  • Дождаться выдачу внешнего ip-адреса балансировщику searcher: kubectl get svc app-1-searcher
  • Открыть в браузере http://EXT-IP:8000, где EXT-IP - внешний адрес присвоенный балансировщику

GitlabCI в среде kubernetes:

  • Выделить средствами GCP статический адрес регионального уровня
  • В файл kubernetes/charts/gitlab-omnibus/values.yaml внести изменения для статического адреса и соответствующего ему домена:
    • baseDomain: 34-90-166-65.sslip.io
    • baseIP: 34.90.166.65
    • legoEmail: sv@example.com
  • Из директории kubernetes/charts/gitlab-omnibus/ установить Gitlab средствами helm: helm install --name gitlab . -f values.yaml
  • Зайти на https://gitlab.34-90-166-65.sslip.io, зарегистрироваться, создать группу, проект (test)
  • Создать удаленный репозиторий для kubernetes/charts/:
    • cd kubernetes/charts/
    • git init
    • git remote add origin http://gitlab.34-90-166-65.sslip.io/svitru/test.git
    • git add .
    • git commit -m "Initial commit"
    • git push -u origin master
  • В корне репозитория kubernetes/charts/ находится файл .gitlab-ci.yml, который является файлом настроек pipeline для GitlabCi. При коммите репозитория срабатывает триггер на выполнение пайплайна для тестирования, сборки и деплоя приложения в окружение staging автоматически и в production по нажатию кнопки.
  • Работу задеплоенного приложения можно проверить по ссылке http://searcher.34-90-166-65.sslip.io. Ingress приложения указывает на тот же балансировщик nginx, что и Gitlab, соответственно на тот же домен и ip, но используется поддомен searcher.

Changelog:

  • Создание репозитория
  • Создание манифестов terraform для тестовой среды GCP
  • Добавление провижинеров в манифест для установки docker, docker-compose в тестовой среде
  • Создание docker-compose.yml файла с mongo и rabbitmq
  • Вставка искодных кодов приложения searcher_crawler в репозиторий
  • Создание Dockerfile для приложения searcher_crawler
  • Вставка искодных кодов приложения ui в репозиторий
  • Создание Dockerfile для приложения ui
  • Запуск контейнеров приложений в docker-compose
  • Параметризация приложений в docker-compose.yml
  • Добавление инфраструктуры GKE средствами terraform
  • Добавление описание использования инструмента IaC - terraform
  • Создание chart'ов приложения в kubernetes/
  • Запуск приложения через helm install
  • Добавление chart'а Prometheus'а, настройка метрик
  • Статический IP для балансировщика nginx
  • Развёртывание Gitlab из Helm chart'а, настройка проекта
  • Перенос репозитория charts в gitlab
  • Создание пайплайнов
  • Отработанные пайплайны можно посмотреть по адресу https://gitlab.34-90-166-65.sslip.io/svitru/searcher-deploy/pipelines