Выполнение домашнего задания по теме "11.3. Микросервисы: подходы"
Q/A
Вы работаете в крупной компанию, которая строит систему на основе микросервисной архитектуры. Вам как DevOps специалисту необходимо выдвинуть предложение по организации инфраструктуры, для разработки и эксплуатации.
Задание 1
Обеспечить разработку
Предложите решение для обеспечения процесса разработки: хранение исходного кода, непрерывная интеграция и непрерывная поставка. Решение может состоять из одного или нескольких программных продуктов и должно описывать способы и принципы их взаимодействия.
Решение должно соответствовать следующим требованиям:
- Облачная система;
- Система контроля версий Git;
- Репозиторий на каждый сервис;
- Запуск сборки по событию из системы контроля версий;
- Запуск сборки по кнопке с указанием параметров;
- Возможность привязать настройки к каждой сборке;
- Возможность создания шаблонов для различных конфигураций сборок;
- Возможность безопасного хранения секретных данных: пароли, ключи доступа;
- Несколько конфигураций для сборки из одного репозитория;
- Кастомные шаги при сборке;
- Собственные докер образы для сборки проектов;
- Возможность развернуть агентов сборки на собственных серверах;
- Возможность параллельного запуска нескольких сборок;
- Возможность параллельного запуска тестов;
Обоснуйте свой выбор.
В данном случае облачный gitlab подойдёт как нельзя хорошо. А именно:
gitи гибкое управление репозиториями- гибкая система настройки и управления
CI/CD, большие возможности по кастомизации шагов сборки - возможность хранить секреты в переменных репозитория
- присутствие приватного
docker-registryдля хранения собранных docker-образов
Дополнительно к gitlab необходимо будет развернуть несколько gitlab-runner, чтобы непосредственно запускать сборку.
В рамках конфигурации gitlab-runner можно указывать параметры параллельного выполнения.
Задание 2
Логи
Предложите решение для обеспечения сбора и анализа логов сервисов в микросервисной архитектуре. Решение может состоять из одного или нескольких программных продуктов и должно описывать способы и принципы их взаимодействия.
Решение должно соответствовать следующим требованиям:
- Сбор логов в центральное хранилище со всех хостов обслуживающих систему;
- Минимальные требования к приложениям, сбор логов из stdout;
- Гарантированная доставка логов до центрального хранилища;
- Обеспечение поиска и фильтрации по записям логов;
- Обеспечение пользовательского интерфейса с возможностью предоставления доступа разработчикам для поиска по записям логов;
- Возможность дать ссылку на сохраненный поиск по записям логов;
Обоснуйте свой выбор.
Для боевой среды может подойти решение fluentd + elk-стек. Таким образом:
fluentdбудет отвечать за сбор логов из stdout всех docker-контейнеров. Для сбора логов можно настроить для каждого контейнера лог-драйверfluentdи избежать различных проблем при работе с файловой системой.logstashбудет отвечать за приём логов со всех агентовfluentdи максимально преобразовывать логи к единому формату.- кластер
elasticsearchбудет отвечать за хранение логов. kibanaбудет выступать в качестве пользовательского интерфейса для просмотра логов. Из коробки в данной системе доступны сохранение и шаринг поисковых запросов по логам.
Задание 3
Мониторинг
Предложите решение для обеспечения сбора и анализа состояния хостов и сервисов в микросервисной архитектуре. Решение может состоять из одного или нескольких программных продуктов и должно описывать способы и принципы их взаимодействия.
Решение должно соответствовать следующим требованиям:
- Сбор метрик со всех хостов, обслуживающих систему;
- Сбор метрик состояния ресурсов хостов: CPU, RAM, HDD, Network;
- Сбор метрик потребляемых ресурсов для каждого сервиса: CPU, RAM, HDD, Network;
- Сбор метрик, специфичных для каждого сервиса;
- Пользовательский интерфейс с возможностью делать запросы и агрегировать информацию;
- Пользовательский интерфейс с возможностью настраивать различные панели для отслеживания состояния системы;
Обоснуйте свой выбор.
Для сбора метрик лучше всего использовать prometheus и его агенты. Например, для сбора метрик состояния ресурсов можно использовать node_exporter. Этого же агента можно использовать для сбора информации о docker-контейнерах, что покроет потребность в отслеживании потребляемых ресурсов каждым сервисом.
Специфичные метрики можно отправлять как непосредственно изнутри приложений, так и при помощи push gateway.
Для отображения всей информации идеально подойдёт grafana, в которой возможно построить огромное множество различных графиков и показателей на основе данных prometheus.