Skip to content

hokum83 microservices repository

License

Notifications You must be signed in to change notification settings

Otus-DevOps-2022-05/hokum83_microservices

Repository files navigation

hokum83_microservices

hokum83 microservices repository

ДЗ-21

  • кластер kubernetes, на котором выполнялось ДЗ развертывался в yandex облаке с помощью terraform
  • установлен helm 3, создан Chart для приложения ui, манифесты перенесены в папку templates, установлено приложение c помощью helm
  • манифесты шаблонизированы, определены переменные, выполнена установка нескольких релизов, собраны пакеты остальных приложений
  • создан единый Chart приложения для управления зависимостями
  • т.к. omnibus больше не поддерживается установлена рекомендованная конфигурация Gitlab с помощью helm 3:
helm install gitlab gitlab/gitlab \
  --set global.hosts.domain=84.201.134.164.sslip.io \
  --set global.hosts.externalIP=84.201.134.164 \
  --set certmanager-issuer.email=hokum83@gmail.com \
  --set gitlab-runner.runners.privileged=true \
  --set certmanager.install=true \
  --set global.kas.enabled=true
  • после развертывания и создания ingress контроллера ip адрес менялся на правильный командой helm upgrade
  • создана группа и проекты, в группу добавлены переменные докер хаба
  • перенесены исходные коды приложений в репозитории, настроен CI и выполнены пайплайны сборки и релиза образов. Все пайпланы переделаны на использование helm 3
  • обновлен пайплан для запуска отдельных окружений при создании и изменении фича-бранчей
  • создан пайплайн для приложения reddit, который деплоит приложения на статичные окружения, выполнен деплой
  • пайплайны приложений переделаны в соответствии с задачей отказа от auto_devops

ДЗ-20

  • проверена работа kube-dns (coredns)
  • проверена работа сервисов типа LoadBalancer
  • установлен Ingress контроллер nginx, создан Ingress для сервиса ui, проверена работа приложения
  • создан сертификат, создан секрет tls в кластере, использование секрета настроено в ингрессе приложения ui
  • создание секрета описано манифестом kubernetes/reddit/ui-secret.yml
  • применена сетевая политика для ограничения доступа к mongodb только приложениями reddit
  • создан диск в яндекс облаке, создан persistent volume и запрос, запрос добавлен в конфиг деплоя mongodb, выполнен редеплой mongodb

ДЗ-19

  • развернут локальный кластер minikube, запущено приложение
  • создан отдельный namespace, приложение запущено в нем
  • вручную развернут кластер и группа узлов в яндекс облаке, развернуто приложение. Адрес приложения: http://178.154.207.247:30437/
  • в директории kubernetes/terraform/yc-k8s-cluster подготовлена конфигурация terraform для создания кластера в яндекс облаке
  • в директории kubernetes/reddit создан манифест dashboard-adminuser.yml для создания пользователя для запуска дашборда

ДЗ-18

  • созданы манифесты деплоя приложений в директории kubernetes/reddit
  • подготовлено развертывание 2-х серверов с помощью terraform, создан модуль k8s для развертывания нод кластера, в котором с помощью провиженера запускаются плейбуки ansible для установки докера и компонентов k8s
  • выполнена установка кластера k8s, добавлена worker нода, установлен сетевой плагин Calico, применены созданные ранее манифесты, поды запустились
  • модуль k8s в терраформе разбит на 2 - для worker и master нод, определены зависимости (запуск модуля worker после успешного завершения модуля master)
  • на основе найденного в сети решение по деплою кластера k8s с помощью ansible подготовлены плейбуки для master и worker нод, запуск плейбуков добавлен в провиженер для соответствующих модулей в terraform

ДЗ-17

  • обновлен код приложения в директории /src, собраны новые образы, подготовлено новое окружение
  • создан отдельный compose файл для запуска систем логирования, создан докер файл и конфиг для fluentd, собран образ fluentd (пришлось добавить установку конкретных версий некоторых пакетов на основе рекомендаций вывода)
  • выполнена настройка отправки логов во fluentd, запущена система логирования, запущено приложение
  • исправлен докер файл fluentd, т.к. в эластик не попадали данные с fluentd (добавил установку пакета gem install elasticsearch -v 7.4.0)
  • создан индекс в kibana, просмотрены логи, настроены фильтры для парсинга json во fluentd сервиса post
  • настроена отправка логов сервиса ui, добавлен фильтр для парсинга логов сервиса ui с помощью регулярного выражения
  • изменен фильтр логов сервиса на использование grok шаблонов, добавлен свой фильтр для нераспарсенных данных
  • добавлен сервис zipkin в compose файл сервисов логирования, включена передача данных сервисами в трейсинг
  • выполнен перезапуск сервисов, просмотрены данные трейсинга после некоторых операций на странице приложения
  • склонировано приложение с багами, выполнена его сборка и запуск
  • страница выдавала ошибку запуска, трейсинг показал что приложение ui пытается достучаться до приложения post по адресу 127.0.0.1:4567, хотя для приложения post задан запуск на порту 5000. выполнена проверка всех докер файлов и добавлены необходимые переменные окружения для приложения ui на правильные порты и имена контейнеров сервисов, для сервисов post и comment на имя контейнера сервиса БД. После пересборки образов и перезапуска контейнеров приложение заработало без проблем

ДЗ-16

  • развернут докер хост, запущен контейнер с prometheus, проверена работа, контейнер остановлен
  • переупорядочена структура директорий, создан докер-файл, создан конфиг сервиса prometheus, собран образ
  • выполнена сборка образов приложений на основе файлов docker-build.sh, в docker-compose.yml добавлен запуск сервиса мониторинга, исправлен файл .env, выполнен запуск контейнеров, выполнена проверка работы приложения и системы мониторинга
  • выполнены тестовые остановки сервисов, которые отразились в доступность сервисов на графиках
  • добавлен node exporter в конфиг prometheus, образ пересобран, compose перезапущен, включена тестовая нагрузка, загрузка отражена на графике
  • образы запушены в docker hub
  • в конфиг Prometheus добавлен джоб с экспортером mongodb, пересобран контейнер, в docker-compose добавлен сервис запуска контейнера с экспортером, выполнен перезапуск docker-compose, проверена работа экспортера - появились метрики mongodb
  • в конфиг Prometheus добавлен джоб с экспортером blackbox, пересобран контейнер, в docker-compose добавлен сервис запуска контейнера с экспортером, выполнен перезапуск docker-compose, проверена работа экспортера - появились метрики проверки портов сервисов
  • создан Makefile который умеет стартовать, рестартовать, останавливать, билдить, пушить контейнеры

ДЗ-15

  • развернут сервер для установки GitLab с установленным докером
  • запущен контейнер с GitLab
  • установлен пароль админа, запущена админка, отключена регистрация
  • создана группа и тестовый проект
  • добавлен remote к локальному репозитарию, файлы запушены не гитлаб
  • создан пайплайн проекта
  • в докере запущен и зарегистрирован раннер
  • добавлен исходный код reddit в проект, добавлен файл тестирования проекта, добавлен джоб тестирования в пайплайн
  • добавлены окружения, добавлены условия для запуска джобов production и staging в ручном режиме и с наличием тегов
  • добавлена задача с определением динамического окружения
  • этап build изменен на запуск контейнера с приложением reddit в динамическое окружение
  • в папке gitlab-ci/install-gitlab-runner создан файл docker-compose.yml для запуска GitLab раннера в контейнере, создан скрипт gitlab-ci/install-gitlab-runner/register-runner.sh для регистрации раннера в интсансе
  • настроены оповещения в слак в канал #aleksey_gultyaev из GitLab

ДЗ-14

  • выполнен запуск контейнера с разными типами сети
  • запущен проект с использованием bridge сети
  • запущен проект с использованием 2-х bridge сетей
  • выполнен запуск проекта с помощью docker-compose
  • файл docker-compose изменен под использование 2-х сетей
  • выполнена параметризация через переменные окружения некоторых параметров, параметры записаны в .env
  • базовое имя берется из названия каталога, откуда запускается docker-compose, изменить можно через переменную окружения COMPOSE_PROJECT_NAME
  • создан docker-compose.override.yml с подключением к каждому контейнеру волюма из хоста с возможностью подменить код из образа, запуск puma дополнен флагами --debug и -w 2

ДЗ-13

Что сделано:

  • установлен линтер hadolint
  • скачен и распакован архив с исходниками приложений
  • созданы докерфайлы для каждого приложения, сделаны оптимизации согласно рекомендаций линтера, собраны образы
  • запущены контейнеры, выполнена проверка работы приложения
  • запущены контейнеры с переопределением переменных окружения через опцию -e:
docker run -d --network=reddit --network-alias=mypost_db --network-alias=mycomment_db mongo:latest
docker run -d --network=reddit -e POST_DATABASE_HOST=mypost_db --network-alias=mypost hokum83/post:1.0
docker run -d --network=reddit -e COMMENT_DATABASE_HOST=mycomment_db --network-alias=mycomment hokum83/comment:1.0
docker run -d --network=reddit -e POST_SERVICE_HOST=mypost -e COMMENT_SERVICE_HOST=mycomment -p 9292:9292 hokum83/ui:1.0
  • образ приложения ui переделан, выполнены рекомендации линтера, образ существенно уменьшился (до 411Мб против 762Мб в первой версии)
  • образ приложения ui пересобран на основе alpine linux - размер сократился до 148Мб
  • образ приложения comment так же был переведен на alpine и оптимизирован, размер стал 146Мб против 759Мб изначально
  • выполнен запуск приложения
  • создан docker volume, подключен к контейнеру БД
  • выполнен запуск контейнеров, написан пост, контейнеры были перезапущены - пост остался на месте

ДЗ-12

Что сделано:

  • установлен docker и необходимое ПО, запущен первый контейнер
  • создан образ на основе запущенного контейнера
  • создан докер хост в облаке yandex
  • собран образ и запущен контейнер на его основе для запуска приложения reddit
  • образ загружен на docker hub, выполнен запуск контейнера с загрузкой образа из docker hub
  • создан шаблон пакера с установленным докером, подготовлен конфиг терраформ для поднятия инстансов на его основе, подготовлен плейбук для запуска контейнера с приложением