Тестовое задание DevOps разработчик
Имеется приложение hello-world написанное на Python + FastAPI, которое отдает строку "Hello World <окружение>!".
Задача:
-
Завести публичный репозиторий на GitHub или аналогах, в который скопировать весь проект из директории
devopsи продолжать работу в нем -
Завернуть это приложение в Dockerfile, в котором
- Установятся зависимости через poetry (установка через poetry)
- Будет запускаться приложение через web-сервер
gunicorn(gunicorn.sh)
-
Написать helm chart. в котором
- Configmap для переменных окружения (ENVIRONMENT)
- Переменная
ENVIRONMENTдолжна иметь значения:dev,stage,prodв зависимости от окружения
- Переменная
- Secret для секретных переменных окружения (ENVIRONMENT_FROM_SECRET)
- Секреты должны шифроваться любым способом доступным для k8s (например:
helm-secrets) - Секрет
ENVIRONMENT_FROM_SECRETдолжен иметь значения:secret_dev,secret_stage,secret_prodв зависимости от окружения
- Секреты должны шифроваться любым способом доступным для k8s (например:
- Deployment, который будет
- Запускать 2 реплики приложения
- Работать на
8000порте - Прокидывать в контейнер
ConfigMapиSecret - Иметь readiness и liveness probes по эндпоинту
/healthcheck
- Service типа ClusterIP
- Ingress для nginx сервера, который должен сконфигурирован для хостов
- dev - localhost
- stage - farforstaging.ru
- prod - farfor.ru
- CertManager в котором
Issuerдля выписывания сертификатов acme-letsencrypt черезhttp01.ingessCertificate- соответствующий сертификат связанный сIssuerдля доменов окруженийstageиprod
- P.S. Ествественно не нужно пытаться выписывать сертификаты, только написать манифесты
- HorizontalPodAutoscaler, который будет
- Скейлить реплики от 2 до 4
- Триггер для скейла будет использование CPU или ОЗУ в 80%
- _helpers.tpl, в котором определить шаблоны для
selectorlabels, в котором определить селекторные меткиappиreleaselabelsвключающий в себяselectorLabels, в котором определить общие меткиchartиversion+selectorLabelsи использовать шаблоны в нужных местах в чарте
- helmfile для трех (
dev,stage,prod) окружений - Максимально использовать общие переменные и переиспользовать переменные окружений по необходимости
- Написать полную пошаговую инструкцию по сборке приложения и запуску через minikube
- Configmap для переменных окружения (ENVIRONMENT)
Результат:
Приложение должно:
- Собираться через Dockerfile
- Запускаться через minikube
- Работать по адресу http://0.0.0.0:8000/ и отображать значение переменной
ENVIRONMENTв ответе - По адресу http://0.0.0.0:8000/docs отображать значение переменной
ENVIRONMENT_FROM_SECRETв заголовке страницы
Подготовлены файлы конфигураций для всех окружений
Срок выполнения:
5 рабочих дней (40 часов)
No Comments