Проект по курсу "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
- Произвести инициализацию helm установив серверную часть tiller:
- Дождаться выдачу внешнего 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