└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Тестовое задание для DevOps Cloud.ru Camp 2025 2 | Результаты выполнения тестового задания следует опубликовать на GitHub или захостить на любой открытой платформе (например, Github Pages) и отправить на указанную в письме почту. Также следует указать свои контактные данные для получения обратной связи - e-mail, ФИО, телефон. 3 | 4 | Тестовое задание состоит из четырех задач. 5 | ## 1. Web приложение на Python/Golang 6 | ### Цель 7 | Написать простейший echo-server на Python или Go 8 | ### Задача 9 | Требуется написать простое веб-приложение на Python/Go, которое слушает входящие соединения на порту 8000 и предоставляет страницу с информацией: 10 | - имя хоста 11 | - ip адрес хоста 12 | - имя автора, которое передаётся через переменную окружения $AUTHOR 13 | 14 | Для приложения написать Dockerfile и запушить образ в докер хаб* (запушить в приватный регистри - пройти регистрацию в докер хаб, сделать регистри приватным). 15 | 16 | В ответе к задаче приложить: 17 | - исходный код 18 | - Dockerfile 19 | - команды, которые использовались для пуша образа в регистри 20 | 21 | Полученный артефакты положить в папку /01-application 22 | 23 | ## 2. Ansible playbook или роль 24 | ### Цель 25 | Автоматизация конфигурации на Ansible 26 | ### Задача 27 | Требуется поднять Виртуальную Машину (VM) с ОС Ubuntu 22.04. Возможные сценарии: локально через Virtual Box (или любое другое средство виртуализации), либо воспользовавшись Free-tier предложением от cloud.ru - https://cloud.ru/offers/free-tier. 28 | 29 | Выполнить следующие задачи, используя Ansible: 30 | 1. На VM установить пакет docker-ce; 31 | 2. Запустить на docker контейнеры c подготовленным Web-приложением из первой задачи в 3-х экземплярах. Для развёртывания использовать приватный регистри из первой задачи; 32 | 3. Настроить балансировщик на nginx, который будет отвечать при обращении к хосту и прокидывать запрос на запущенные контейнеры. Выбрать алгоритм балансировки для приложения и обосновать свой выбор. 33 | 34 | В ответе к задаче приложить: 35 | - исходный код Ansible 36 | - текстовое обоснование выбранного алгоритма балансировки 37 | 38 | Полученные артефакты положить в папку /02-ansible 39 | 40 | ## 3. Kubernetes manifest 41 | ### Цель 42 | Деплой приложения в Kubernetes 43 | ### Задача 44 | Требуется написать манифест для запуска приложения из первой задачи в Kubernetes в отдельном неймспейсе в виде Deployment с 3 репликами и сервиса с типом ClusterIP. 45 | 46 | Выполнить следующие задачи: 47 | 1. Для приложения организовать проброс значения переменной AUTHOR; 48 | 2. Реализовать readiness- и liveness- пробы; 49 | 3. Использовать образ из приватного регистри из задачи 1; 50 | 4. опционально: поднять ingress-controller и создать правило ingress; 51 | 5. опционально: использовать helm-chart, а не raw манифест. 52 | 53 | В ответе к задаче приложить: 54 | - исходный код всех манифестов 55 | 56 | Полученные артефакты положить в папку /03-kubernetes 57 | 58 | 59 | ## 4. Запереть контейнер изнутри* (дополнительное необязательное задание) 60 | ### Цель 61 | Проверить навыки администрирования *nix 62 | ### Задача 63 | 1. Создать ВМ с ОС Ubuntu 22.04; 64 | 2. Установить пакет docker-ce; 65 | 3. Выполнить команду docker run -it --rm ubuntu -- bash; 66 | 4. Не покидая контейнер, не меняя флаги запуска и настройки демона, выполнить задачи:\ 67 | 4.1. сделать apt-get update, показать, что команда выполняется успешно;\ 68 | 4.2. изнутри контейнера заблокировать ему выход в сеть интернет, команды блокировки с описанием приложить к задаче;\ 69 | 4.3. показать, что apt-get update больше не работает. 70 | 5. Доп. задача - найти ещё +1 способ выполнить подобную блокировку изнутри контейнера. 71 | 72 | В ответе к задаче приложить: 73 | - текстовое описание применённых конфигураций 74 | 75 | Полученные артефакты положить в папку /04-unix 76 | --------------------------------------------------------------------------------