DevOps-инженер
80 задач, из них 12 на код с автопроверкой. Условие и варианты ответа открыты всем; проверка, подсказка и разбор — в клубе.
Linux и Bash
- Скрипт бэкапа работает руками, но из cron падает с command not found
- Permission denied при запуске скрипта деплоя с правами 644
- После перезагрузки сервера сервис не поднялся сам
- Скрипт продолжает деплой, хотя curl в конвейере упал
- Удалили гигантский лог, а свободное место на диске не появилось
- Незакавыченная переменная в rm -rf внутри скрипта очистки
- Скрипт сбора метрики падает именно в те сутки, когда ошибок не было
- Load average 42 при простаивающем процессоре
Docker и сборка образов
- Данные базы пропали после пересоздания контейнера
- EXPOSE в Dockerfile есть, а сервис снаружи недоступен
- Контейнер сразу переходит в Exited (0) после docker run
- Очистка пакетов отдельным слоем не уменьшила образ
- Сборка в CI ставит зависимости заново при правке одного файла
- Токен, переданный через ARG, считается скомпрометированным
- Контейнер игнорирует SIGTERM и умирает по таймауту
- x509 из образа на scratch при обращении к внешнему API
Kubernetes и Helm
- CrashLoopBackOff: где искать причину падения контейнера
- Удалённый вручную под сразу появился снова
- Под висит в Pending: 0/6 nodes are available
- Под перезапускается с Exit Code 137 и причиной OOMKilled
- Проба живости убивает приложение с долгим стартом
- helm upgrade прошёл, но поды работают со старым конфигом
- kubectl drain не может выселить под из-за PodDisruptionBudget
- HPA показывает unknown вместо процента утилизации CPU
CI/CD и инфраструктура как код
- Джоб деплоя не запустился после падения тестов
- Плейбук Ansible падает при повторном запуске
- Terraform plan показывает must be replaced для продовой базы
- Артефакт сборки не доехал до стадии деплоя
- Правка через kubectl edit откатилась через минуту
- Два инженера применяют Terraform с локальным состоянием
- ArgoCD показывает Synced, но новая версия не выкатывается
- Ресурс создали руками в инциденте — как вернуть его под Terraform
Мониторинг и алертинг: Prometheus, Grafana, SLO
- График запросов в Grafana только растёт и обваливается после рестарта подов
- Алерт на загрузку CPU будит дежурного каждую ночь в 03:00
- Сервис лежал 40 минут, а алерт на долю ошибок молчал
- Сколько бюджета ошибок осталось до конца окна SLO
- Средний p99 по десяти подам 180 мс, а пользователи жалуются на секундные ответы
- Prometheus съел 28 ГБ памяти после релиза с новыми метками
- Тридцать алертов за ночь, а падение оплаты никто не заметил
- Панель с rate за минуту рвётся на пустые куски
- Решение «будить или нет» по скорости сгорания бюджета в двух окнах
- Алерт по скорости сгорания бюджета висит ещё час после исправления
- SLO «99% запросов быстрее 300 мс» по гистограмме с корзинами 0.25 и 0.5
- Оценка квантиля по корзинам гистограммы, как в histogram_quantile
Логирование: сбор, разбор и хранение логов
- В Kibana не получается найти все записи по одному номеру заказа
- Fluent Bit на нодах работает, а логов нового сервиса в OpenSearch нет
- Ошибки в Kibana появляются на три часа позже, чем случились
- Разбивка access-лога nginx по классам кодов ответа
- Один стектрейс Java превращается в Kibana в сорок отдельных записей
- Логи перестали записываться: индексы Elasticsearch стали только для чтения
- В логах платёжного сервиса нашли номера карт и пароли из тел запросов
- После добавления метки request_id запросы в Loki стали идти минутами
- Медленные эндпоинты по 95-му перцентилю из JSON-логов
- Логи сервиса заказов пропадают только в некоторые дни
- Разбор инцидента с шестью сервисами занял день из-за несвязанных логов
- Склейка многострочных записей лога и отбор ошибок со стектрейсами
Nginx и балансировка: прокси, TLS, таймауты
- Выгрузка отчёта ровно через 60 секунд отдаёт 504 Gateway Timeout
- Загрузка сканов договоров на 5 МБ падает с кодом 413
- Защита от перебора паролей заблокировала всех пользователей разом
- Проверка адреса по списку разрешённых подсетей для админки
- После переезда за nginx бэкенд отвечает 404 на все запросы к /api/
- Сайт открывается в браузере, а мобильное приложение ругается на сертификат
- Внешний балансировщик сменил IP, а nginx продолжает слать трафик на старый
- Лимит 10 запросов в секунду отбивает 503 у обычных пользователей SPA
- Сколько запросов nginx повторял на другой бэкенд
- На пике nginx пишет «Cannot assign requested address» при подключении к бэкенду
- После правки proxy_next_upstream у клиентов начали появляться двойные заказы
- Порядок выбора бэкендов при взвешенном round robin, как в nginx
PostgreSQL в эксплуатации: репликация, бэкапы, HA
- Год ежедневных бэкапов, а восстановить базу не получилось ни из одного
- После масштабирования сервиса до 40 подов база отвечает «too many clients»
- Пользователь создал заказ, а в списке заказов его нет
- Отставание реплики в байтах по двум LSN
- Каталог pg_wal вырос до 400 ГБ через месяц после удаления реплики
- Реплика ушла на перезагрузку, и все записи в основную базу зависли
- Таблица сессий весит 40 ГБ при 2 ГБ живых данных, autovacuum не помогает
- DELETE без WHERE в 14:32, а последний дамп сделан в 03:00
- Окна, в которых архивация WAL нарушала RPO
- Упал один из двух узлов etcd, и Patroni перевёл лидера в режим только чтения
- После failover приложение пишет в бывшего лидера и получает ошибку read-only
- Какие бэкапы оставить по схеме «дневные плюс недельные»
