76 практических задач по DevOps
Чини сервисы, настраивай инфраструктуру и расследуй проблемы в настоящем терминале прямо в браузере.
10 задач доступны бесплатно· остальные — с буткемпом

Открыто бесплатно

Linux
Права после выкатки
Скрипт релиза закрутил права до chmod 000, и сервис опросов anketa падает по кругу с Permission denied. Верните доступ так, чтобы сервис читал свои файлы, а посторонний не добрался до ключа.

Docker
Контейнер сразу падает
Подняли контейнер сервиса podpiska, а он мгновенно уходит в Exited и наружу не отвечает. Прочитайте логи, поймите, чего сервису не хватает на старте, и поднимите контейнер правильно.

Ansible
Разберись с парком ad-hoc-командами
Тебе выдали доступ к паре узлов сервиса storozh. Плейбуки писать не надо: проверь связь, сними факт про узел и внеси мелкие правки одними ad-hoc-командами ansible.

Nginx
Сайт отдает чужую страницу
Хостинг-агентство webpark держит на одном сервере сайты двух клиентов. После добавления второго сайта из кофейни звонят: по их домену открывается страница стоматологии. Разберитесь, как nginx выбирает server-блок, и верните каждому клиенту его сайт.

Linux
Сто тысяч мелких файлов
Диск по df свободен, а сервис еле дышит и ls в кеше висит намертво. Кто-то насыпал в каталог десятки тысяч файлов – и продолжает сыпать прямо сейчас.

Базы данных
Запрос на тридцать секунд
Месячная сводка бухгалтерии schetovod строится полминуты. Менеджеры жмут F5 и добивают базу. Текст запроса трогать нельзя – ускорьте на стороне базы, не сдвинув ни одной цифры.

Git
Кто сломал сборку
Тесты svodka падают, а виновник прячется среди 28 коммитов с невинными сообщениями. Найди его бисекцией, почини main и не тронь историю.

CI/CD
Пайплайн красный с утра
Вчерашний мерж покрасил main сервиса smena: install падает на рассинхроне lock-файла, за ним прячутся линт и сломанный тест. Доведите пайплайн до зеленого, не выбрасывая фичу.

Linux
Сломанное окружение
После ночного деплоя терминал перестал находить привычные команды, а новый агент по-разному ведет себя при ручном и автоматическом запуске. Найдите источник поломки и верните обоим режимам рабочее окружение.

Kubernetes
Релиз не взлетел
Платежный шлюз schet не поднялся после ночного релиза: сначала pod остается в Pending, а после исправлений вскрываются падение приложения и рестарты. Откатываться нельзя — сохраните правку чека под 54-ФЗ и снимите три причины по очереди.
Каталог задач
Kubernetes, Docker, Linux, CI/CD, Ansible, базы данных и другие направления.
Найдено: 66
502 после ночного деплоя
Сайт отдает 502 после утреннего деплоя, в котором по описанию менялся только код. Пройдите цепочку nginx → сервис → права и верните сайт до начала рабочего дня.
Nginx
Helm-релиз завис между версиями
Обновление mailwave оборвали на середине: релиз завис в pending-upgrade, поды вперемешку. Разблокируйте релиз, найдите дефект обновления и доведите его до deployed.
Kubernetes
Сервис есть, трафика нет
Под каталога зеленый, а витрина пустая и заказы в сбоях. Докажите, на каком звене обрывается путь запроса, и восстановите трафик – не снимая защиту.
Kubernetes
Выкатить сервис в пустой кластер
Кластер только что выдали – он пуст. Есть код сервиса фичефлагов tumbler, упакованный в ConfigMap, и список того, что платформенная команда хочет увидеть на ревью. Выкатите сервис так, чтобы приняли с первого раза: Deployment с пробами, PDB, HPA и живучесть, проверенная руками.
Kubernetes
Статус-пейдж в пустом кластере
Кластер пуст, образа нет – только код на Go и ТЗ. Разверните статус-страницу getpulse, которая вживую пингует сервисы клиентов: Deployment с пробой, конфиг в ConfigMap, токен в Secret, NodePort и самовосстановление.
Kubernetes
Нода под давлением
Ночью нода задыхалась от нехватки памяти, kubelet выселял поды волнами, а к утру алерты затихли сами. Восстановите хронологию, найдите и ограничьте виновника, верните к жизни соседа и напишите честный постмортем.
Kubernetes
Из манифестов – в чарт
Планировщик cronhub катится копипастой из двух каталогов YAML, которые уже разъехались, а пароль лежит прямо в манифесте. Упакуйте все в один Helm-чарт, где окружения отличаются только values.
Kubernetes
Переезд, который сломал все
После переноса docker-хоста api отдает 500, старых заявок нет в списке, а ребут уложит остальное. Восстановите связку контейнеров: сеть, данные, автозапуск.
Docker
Пайплайн для сервиса с нуля
Соберите конвейер нового микросервиса: проверки на MR, образ на тег, деплой по кнопке – и чтобы токен деплоя не оказался в YAML.
CI/CD
Деплой уехал не туда
Ночью хотфикс-ветка сама выкатилась в прод. Найдите дыру в правилах пайплайна, закройте ее и докажите, что стейджинг и релизы не пострадали.
CI/CD
Пайплайн на сорок минут
Ускорьте прогон MR с сорока виртуальных минут до пятнадцати, ничего не выключая: постройте DAG, прогрейте кэш и научите тяжелые джобы не бегать на чужие изменения.
CI/CD
Прометей ослеп
Сервис пропал с радаров после переезда на новый порт, и сутки этого никто не замечал. Верните сбор метрик и закройте слепоту алертом.
Observability
Алерт, который молчал
Сайт клиента лежал всю ночь, а уведомление так и не пришло. Пройдите путь алерта от метрики до получателя и докажите, что теперь дойдет.
Observability
Дашборд, по которому дежурят
Дежурные отказались брать сервис доставки kurier на поддержку: дежурить по сырому прометеусу они не станут. Соберите дашборд-как-код по методу RED, каждый запрос обязан работать в живом Prometheus.
Observability
Куда утекает память
API корзины пухнет по памяти весь день, под утро его прибивает OOM, и рестарт как будто все чинит. Докажите утечку метриками, найдите виновника в коде и остановите пилу.
Observability
Сертификат истек в пятницу вечером
Личный кабинет Волна Телеком перестал открываться: браузеры ругаются на истекший сертификат, а админ уехал за город. Выпустите новый сертификат от внутреннего CA, соберите полную цепочку и верните HTTPS, не останавливая nginx.
Nginx
Сервер тормозит, найди виновника
Сервер сборки buildbox задыхается: очередь стоит, панель красная, на машине крутятся сервисы трех разных команд. Найдите, кто ест CPU, докажите это инструментами и обезвредьте так, чтобы не вернулось после ребута. Рабочие сервисы при этом должны остаться живыми.
Linux
Боевой веб-узел с нуля
Маркетинг купил домен под лендинг Промо, а сервер выделили голый. Доведите его до боевого: сервис не под root, юнит systemd с харденингом, файрвол, ротация логов. Проверка будет честной – техдир придет вечером и попробует его сломать.
Linux
Реплика отстала и не догоняет
Аналитики магазина orbita читают данные двухчасовой давности, лаг реплики растет, а на основной базе тает диск. Верните отставание к секундам – не пересоздавая реплику.
Базы данных
Восстановить базу к утру
Вечером стажер дропнул таблицу заказов на проде. Есть дневной базовый бэкап и WAL-архив: восстанови базу на секунды до DROP – вместе с вечерними заказами, которых в бэкапе нет.
Базы данных
terraform plan хочет снести полстенда
Коллега перед отпуском навел порядок в инфра-репозитории, и теперь план предлагает уничтожить том с контентом и половину живого дев-стенда. Приведите план к нулю изменений, не потеряв ни одного ресурса.
Terraform
Плейбук, который можно запускать дважды
Наследный плейбук работает только на свежей машине: повторный запуск дублирует конфиги и рестартит все подряд. Сделайте его честно идемпотентным.
Ansible
Модуль окружения с нуля
Дев-стенды компании клепают копипастой .tf-файлов, и они разъезжаются. Соберите переиспользуемый модуль и поднимите из него два окружения параллельно.
Terraform
Коммит пропал
Стажер сделал git reset --hard HEAD~2 и потерял два коммита: свою фичу и фикс коллеги. Файлов нет, в git log пусто, паника. Спаси работу через reflog.
Git
Секрет в истории
Боевой API-токен закоммитили, потом файл удалили - но git помнит все. Вычисти секрет из всей истории, не разрушив ее, и доведи инцидент до конца.
Git
Место утекает, а файлов нет
Каталог логов по du почти пуст, а мониторинг видит сотни мегабайт записи и место тает. Найди процесс-призрак без lsof – голыми руками через /proc.
Linux
Процесс-обжора
Сервер фотопечати воет вентиляторами: кто-то выедает ядро CPU, заказы стоят. Убить процесс мало – он тут же вернется и продолжит.
Linux
Скрипт бэкапа врет
backup.sh месяц отчитывался об успехе, а в архивах полторы статьи. Найди классические мины шелл-скриптов и почини его по-настоящему.
Linux
Разбор боевых логов
Ночью на билетном сервисе afisha был всплеск трафика, а оплата падала. В access.log 175 тысяч строк – выясните, кто это был, сколько выкачал и когда был пик, и оформите ответы отчетом.
Linux
Место купили, а его нет
Сервис третьи сутки не может записать выгрузку: No space left on device. Второй диск давно оплачен и подключен к серверу, а места на томе так и не прибавилось.
Linux
Файловая система ушла в режим только чтение
Приемник телеметрии не записал за ночь ни одной пачки, touch в каталоге данных отбивается с Read-only file system, а ядро в dmesg ругается на ext4. Перезапуск сервиса тут не поможет.
Linux
Кого убьет OOM
Третью ночь подряд ядро снимает прием платежей, а ночной отчетный пакет остается жив. Разберись, по какому правилу выбирается жертва, и поменяй расклад.
Linux
Слишком много открытых файлов
Каждый вечер сервис отзывов перестает отдавать карточки, а CPU и память при этом спокойны. В логе одна и та же строка про открытые файлы, и поднятие лимита помогает только до следующего вечера.
Linux
Зомби расплодились
Число процессов на узле растет сутки напролет, в ps десятки записей defunct, и kill -9 по ним не действует вообще. Надо понять природу этих записей и убрать источник.
Linux
Ключ подрядчика утек
Ключ подрядчика ушел в публичный репозиторий, и им уже успели воспользоваться. Отзовите доступ на узле планировщика маршрутов так, чтобы он не вернулся через минуту, и не отрежьте при этом свою же команду.
Linux
Sudo раздали всем
Аудит перед сертификацией нашел полный root без пароля у половины команды склада, включая стажера и сервисную учетную запись. Сузьте права до минимума и не сломайте автоматику выкладки.
Linux
Сервис не пережил перезагрузку
Витрина заказов lavka руками стартует за секунду, а после каждой перезагрузки узла лежит. Дежурный поднимает ее вручную третью неделю – пора закончить этот сериал.
Linux
Cron молчит
Выгрузка отчетов tabel руками отрабатывает за секунду, а по расписанию не сработала ни разу за неделю. Ни файлов, ни ошибок – полная тишина.
Linux
DNS отдает старый адрес
Партнер переехал неделю назад, но сверка платежей упрямо стучится на выведенный из эксплуатации узел и получает 403. У партнера все правильно – значит, кривой ответ рождается на нашем хосте.
Linux
Ping идет, а страница висит
После переключения на новый канал короткие запросы летают, а выгрузка отчета встает намертво. Ping без потерь, порт открыт, ошибок нет – сеть выглядит здоровой ровно до того момента, пока не попросишь много данных.
Linux
Порт занят призраком
После аварийного рестарта telemetr не поднимается: bind 0.0.0.0:9310 address already in use. Дежурный божится, что все прибил ночью, и ps его подтверждает – процессов сервиса не видно. Порт при этом кто-то держит.
Linux
Собери инфраструктуру с нуля
Дев-стенд доски мероприятий поднимали руками по памяти и один раз потеряли данные. Опиши его как terraform-конфигурацию с нуля: сеть, том, база и веб-морда, которая реально ходит в базу.
Terraform
Стенд поменяли руками
Ночью дежурный включил веб-контейнеру автоперезапуск через docker update, но в код это не попало. Теперь terraform plan хочет откатить нужную правку. Сведи код и стенд без пересоздания контейнера.
Terraform
Секреты торчат в state и выводе
Пароль базы сервиса промо-кодов передается обычной переменной и печатается в output открытым текстом. Аудит требует навести порядок: sensitive, вынос значения в gitignored tfvars, чистый вывод.
Terraform
Роль веб-сервера с нуля
Веб-узлы доски афиш пока настраивает монолитный плейбук с захардкоженным конфигом. Соберите переиспользуемую роль по всем правилам: шаблоны, defaults, handlers, идемпотентность.
Ansible
Секреты лежат в плейбуке открытым текстом
Аудит нашел пароль базы и токен API прямо в переменных плейбука. Спрячьте их в ansible-vault так, чтобы сервис по-прежнему получал верные секреты, а открытого текста в репозитории не осталось.
Ansible
Обнови парк без простоя
Плейбук выкатывает новую версию на весь парк разом – на время рестарта сервис лежит везде, а битый узел уезжает в продакшн незамеченным. Сделайте выкат поочередным и безопасным.
Ansible
Соберите production-образ
Сервис citatnik катится образом на 1.1 ГБ, от root, с тестами и .git внутри. Перепишите Dockerfile так, как не стыдно катить в прод.
Docker
Стек из трех сервисов с нуля
Опросник opros гоняли тремя docker run по памяти. После ребута собрать стек обратно никто не смог. Соберите docker-compose.yml, который поднимает web + postgres + redis одной командой.
Docker
Образ на два гигабайта
Сервис миниатюр minifoto собирается в образ больше гигабайта: полный python, компилятор в комплекте, кэши по слоям. Ужмите его ниже 300 МБ, не сломав работу.
Docker
Контейнер не может писать в том
Сервис zametki работает под пользователем uid 1000, но при записи в подключенный том падает с Permission denied. Почините так, чтобы приложение писало данные, и без chmod 777.
Docker
docker stop висит десять секунд
Сервис bufer не останавливается по docker stop: команда ждет 10 секунд и добивает контейнер по SIGKILL, теряя несброшенный буфер. Сделайте так, чтобы приложение получало SIGTERM и завершалось чисто.
Docker
Собери reverse-proxy с нуля
Приложение афиши уже работает как внутренний апстрим на 127.0.0.1:9000, но наружу его никто не проксирует. Собери перед ним nginx с нуля: TLS от внутреннего CA, проксирование, редирект 80 на 443, ограничение частоты на бронь и проброс заголовков клиента.
Nginx
Спроектируй схему под нагрузку
Сервису аренды нужна схема БД под конкретный профиль запросов: поиск заказов по клиенту, выборка за период, отчет по статусам. Дана пустая база и ТЗ. Спроектируй таблицы с ключами и ограничениями, создай индексы под запросы и докажи, что они идут по индексу.
Базы данных
Настрой бэкап как процесс
У сервиса реестра договоров нет ни одного бэкапа, и недавно чуть не потеряли базу. Настрой рутину резервного копирования: скрипт, расписание, ротацию - и, главное, проверь восстановление, развернув свежий бэкап во вторую базу.
Базы данных
Собери алертинг по SLO
У API-шлюза shlyuz есть метрики в Prometheus, но нет ни одного осмысленного алерта. Собери алертинг по SLO с нуля: SLI и пороги, правила на долю ошибок и латентность с разумными for, и доставку до приемника - и проверь на деле, что при всплеске ошибок алерт горит и доезжает.
Observability
Перенеси ветку на обновленный main
Пока ты пилил скидки в ветке, в main влили ндс, и ветки разошлись по одним и тем же строкам. Перенеси фичу на свежий main через rebase, разреши конфликты и получи линейную историю.
Git
Историю переписали силой
Коллега сделал git push --force и снес из общего main коммиты команды. Работа Димы и Кати исчезла, но объекты git еще живы. Найди потерянные коммиты и верни целостную историю в удаленный репозиторий.
Git
Разбей огромный коммит
В один коммит свалили сразу три вещи: фичу, багфикс и правку доков. Ревьюер не примет такой мерж. Разбей последний коммит на три осмысленных, ничего не потеряв.
Git
Секрет светится в логах пайплайна
Джоба деплоя сервиса rassylka печатает боевой токен провайдера прямо в лог сборки, а сам токен захардкожен в .gitlab-ci.yml. Вынесите его в защищенную переменную, уберите печать и докажите, что деплой цел, а секрета в логе больше нет.
CI/CD
Сборка есть, а деплою нечего катить
Пайплайн сервиса tsennik разбит на build, test и deploy, но test и deploy падают: они не видят результат сборки. Настройте передачу артефактов между джобами, чтобы дистрибутив доезжал и пайплайн проходил целиком.
CI/CD
Приложению запрещен доступ к API
Наблюдатель dozor поднялся, но витрина красная: 403 Forbidden на каждый запрос к kube API. Разберите, каких прав не хватает его ServiceAccount, и выдайте ровно столько, сколько нужно.
Kubernetes
База в StatefulSet теряет данные
Хранилище ambar забывает все записи при каждом пересоздании пода. Разберитесь, почему данные эфемерны, и разверните базу так, чтобы они переживали рестарт.
Kubernetes
Задание не доходит до конца
Ночная выгрузка vygruzka оформлена как Job, но никогда не завершается: apply манифеста падает, а когда Job все же создается, под висит и отчета нет. Найдите обе причины и доведите задание до Complete.
Kubernetes
Плейбук бьет не по тем хостам
После выката на db-узле оказался веб-конфиг, а на web-узле настройки базы. Виноват таргетинг: hosts: all в плее и узел сразу в двух группах. Наведи порядок, чтобы каждый узел получил только свою роль.
Ansible
Плейбук упал на середине
Выкат nakat валится посреди процесса и бросает узел в полуготовом виде: служба лежит, блокировка висит. Сделай деплой надежным через block/rescue/always с откатом и почини причину сбоя.
Ansible