Skip to main content

Тестовое задание DevOps разработчик

Имеется приложение hello-world написанное на Python + FastAPI, которое отдает строку "Hello World <окружение>!".

Задача:

  1. Завести публичный репозиторий на GitHub или аналогах, в который скопировать весь проект из директории devops и продолжать работу в нем

  2. Завернуть это приложение в Dockerfile, в котором

    1. Установятся зависимости через poetry (установка через poetry)
    2. Будет запускаться приложение через web-сервер gunicorn (gunicorn.sh)
  3. Написать helm chart. в котором

    1. Configmap для переменных окружения (ENVIRONMENT)
      1. Переменная ENVIRONMENT должна иметь значения: devstageprod в зависимости от окружения
    2. Secret для секретных переменных окружения (ENVIRONMENT_FROM_SECRET)
      1. Секреты должны шифроваться любым способом доступным для k8s (например: helm-secrets)
      2. Секрет ENVIRONMENT_FROM_SECRET должен иметь значения: secret_devsecret_stagesecret_prod в зависимости от окружения
    3. Deployment, который будет
      1. Запускать 2 реплики приложения
      2. Работать на 8000 порте
      3. Прокидывать в контейнер ConfigMap и Secret
      4. Иметь readiness и liveness probes по эндпоинту /healthcheck
    4. Service типа ClusterIP
    5. Ingress для nginx сервера, который должен сконфигурирован для хостов
      1. dev - localhost
      2. stage - farforstaging.ru
      3. prod - farfor.ru
    6. CertManager в котором
      1. Issuer для выписывания сертификатов acme-letsencrypt через http01.ingess
      2. Certificate - соответствующий сертификат связанный с Issuer для доменов окружений stage и prod
      • P.S. Ествественно не нужно пытаться выписывать сертификаты, только написать манифесты
    7. HorizontalPodAutoscaler, который будет
      1. Скейлить реплики от 2 до 4
      2. Триггер для скейла будет использование CPU или ОЗУ в 80%
    8. _helpers.tpl, в котором определить шаблоны для
      1. selectorlabels, в котором определить селекторные метки app и release
      2. labels включающий в себя selectorLabels, в котором определить общие метки chart и version + selectorLabels и использовать шаблоны в нужных местах в чарте
    9. helmfile для трех (devstageprod) окружений
    10. Максимально использовать общие переменные и переиспользовать переменные окружений по необходимости
    11. Написать полную пошаговую инструкцию по сборке приложения и запуску через minikube

Результат:

Приложение должно:

  1. Собираться через Dockerfile
  2. Запускаться через minikube
  3. Работать по адресу http://0.0.0.0:8000/ и отображать значение переменной ENVIRONMENT в ответе
  4. По адресу http://0.0.0.0:8000/docs отображать значение переменной ENVIRONMENT_FROM_SECRET в заголовке страницы

Подготовлены файлы конфигураций для всех окружений

 

Срок выполнения:

5 рабочих дней (40 часов)


Исходный код:

assignments.zip