Собеседование DevOps в 2026-м редко проваливается из-за «не назвал все 40 инструментов из вакансии». Чаще ломается другое: человек помнит команды kubectl, но не может рассказать инцидент: что упало, как поняли, что сделали, что изменили в пайплайне после. Нанимающий покупает вероятность, что вы не сделаете из релиза лотерею и не будете героем в одиночку в три часа ночи.

Ниже — блоки экрана, полные ответы про Linux, CI, контейнеры и инцидент, и как готовить истории, а не только шпаргалку команд. Общий каркас — вопросы на собеседовании. Карта без культа бейджей — в что должен знать DevOps. Слоты: вакансии DevOps.

Коротко:

  • Linux, сети и «почему сервис не слушает порт» важнее десятого пункта в списке Helm-чартов.
  • CI спрашивают как поставку: что ломает пайплайн, кто откатывает, где секреты.
  • Контейнеры — образ, слои, почему «works on my machine» умер, не «docker run как магия».
  • Инцидент готовьте как STAR: сигнал, гипотеза, действие, постмортем без яда.
  • Junior не обязан быть platform lead. Честная граница сильнее выдуманного Kubernetes-космоса.

Как читать вакансию: не готовить не тот контур

Выпишите: облако или свои серверы, CI-система, Kubernetes да/нет, онкол, размер команды. Если в тексте Docker Compose и Jenkins на паре сервисов — не учите неделю операторы Kubernetes «на всякий случай». Если слот platform/SRE — будут SLO и инциденты, это уже соседняя роль. Сверьтесь с резюме DevOps: что написали в стеке, то и будут копать.

Junior: один пайплайн, один сервис в контейнере, базовый Linux, простой инцидент «диск забился / сертификат истёк». Middle: несколько сервисов, откат, секреты, наблюдение. Senior: границы ответственности, стоимость простоя, как не стать единственным человеком на контур.

Не готовьте Terraform-модуль на всю компанию, если в вакансии «допилить Jenkins и Docker». Не готовьте только bash, если в тексте Kubernetes и онкол. Вторая ошибка — список из 40 логотипов в CV: вас попросят любой, и пустой ответ по Helm после «эксперт Kubernetes» закрывает экран. Лучше три инструмента с историей, чем музей бейджей. Облако: один контур, который поднимали руками — сеть, ВМ или managed k8s, секрет, бэкап мысли на уровне «как восстановим» — сильнее курса с слайдами.

Linux и сети: сценарий, не man page

Типовой вопрос: «сервис не открывается снаружи, на машине вроде запущен. Куда смотрите?»

Сначала: слушает ли процесс порт, тот ли порт, localhost или 0.0.0.0. ss или netstat, потом локальный curl на порт. Если локально живо, а снаружи нет — файрвол, security group, неправильный upstream в балансировщике, DNS на старый IP. Смотрю логи юнита: упал сразу после старта из-за нехватки файла конфигурации — это не «сеть сломалась».

Диск и inode: сервис пишет логи в /var и диск 100% — процесс жив, писать некуда, внешне «тупит». Память: OOM, рестарт в цикле. Не начинаю с tcpdump, пока не закрыл слушает / не слушает. tcpdump — когда уже ясно, что пакет доходит или не доходит.

Граница: тонкости conntrack в NAT могу нарисовать на пальцах, но на этом слоте сначала порт, юнит, диск, группа безопасности. Не обещаю «сейчас найду в ядре», если не смотрел.

Follow-up: DNS TTL, TLS-сертификат, time skew для Kerberos/JWT — держите по одной фразе, если это в вакансии.

CI/CD: поставка, не зелёная галочка

Спросят: что у вас в пайплайне, кто жмёт prod, как откатываете, где секреты.

Типичный контур, который я закрывал: линт и тесты на PR, сборка образа по git sha, деплой на стейдж автоматически, на прод — руками или по тегу с approval. Секреты не в репозитории: в хранилище CI или в менеджере секретов, в лог не печатаем. Артефакт неизменяемый: тот же digest, который прошёл стейдж, уезжает на прод, не «ещё раз соберём на проде, вдруг повезёт».

Откат: предыдущий известный digest, не «починим вперёд на горячую», если нет миграции, которую нельзя откатить. Если миграция вперёд-only — это отдельно в README и в критерии релиза, не сюрприз в три часа. Флаки: карантин теста с тикетом, не mute навсегда без хозяина.

Что ломает пайплайн чаще, чем Kubernetes: протухший токен в registry, зависимость от «latest», ручной шаг, который один человек помнит. Это я и чинил: убрали latest, повесили digest, добавили проверку, что образ существует, до деплоя.

Не рисуйте идеальный GitOps, если у вас был Jenkins с двумя джобами. Честный маленький контур сильнее чужой схемы из блога.

Спросят про IaC. Если Terraform/Ansible в резюме — один модуль: что создаёт, как не храните стейт в git, как накатываете на стейдж. Если нет — «конфиг в репозитории манифестов, руками не правим прод». Не стыдно. Стыдно «я кликаю в консоли и как-то живём» без плана, как это менять. Баш на экране: прочитайте чужой скрипт, найдите set -e, незакавыченный путь, curl без -f. Это ближе к работе, чем написать fizzbuzz.

Контейнеры и оркестрация по факту резюме

Docker: зачем multi-stage, почему не root в проде, что даёт HEALTHCHECK, чем COPY . опасен без dockerignore. Compose — зависимость, сеть, volume для разработки, не «прод на одной ВМ навсегда». Kubernetes — только если он в вакансии: под, проба, лимиты, зачем не latest, чем rolling отличается от recreate на одном реплике.

Образ собираю от не-root, зависимости отдельно от кода, чтобы слой кэша жил. В прод не тащу компилятор и .git. Тег — git sha. Если в Kubernetes: requests/limits по памяти, иначе соседи съедят ноду; liveness не должен бить тяжёлый запрос к базе каждую секунду — это уже самоDDoS. Рестарт из-за пробы, которая ходит в зависимость, которая ещё поднимается — классика, initialDelay или раздельные readiness/liveness.

Чего не делаю на junior-слоте: не проектирую service mesh «потому что модно». Если в вакансии два сервиса и Compose — так и готовлю.

Инцидент: главная история экрана

Без истории вы останетесь человеком, который «знал команды». Готовьте одну, лучше с постмортемом.

Ситуация: после деплоя API отдавал 502, а пайплайн был зелёный. Сигнал: алерт по 5xx и сообщение поддержки, что кабинет не логинится. Гипотеза 1: новый образ. Гипотеза 2: миграция. Гипотеза 3: конфиг, секреты не подхватились. Действие: откатили на предыдущий digest — 502 ушёл. Потом смотрели: в новом образе поменяли имя переменной DATABASE_URL, в манифесте осталось старое, контейнер стартовал, к базе не коннектился, проба была только на процесс, не на зависимость.

Постмортем: readiness на реальный /health, который чекает БД; пайплайн сравнивает обязательные env с манифестом; деплой не считается успешным без среза 5xx. Я писал черновик постмортема без фамилий в разделе «виноват». Онкол в ту ночь был мой, эскалацию к разработке сделал через 15 минут, не геройствовал час в одиночку.

Ограничение честно: трафик был скромный, не «миллион RPS». Зато цепочка сигнал → откат → причина → защита от повтора закрыта. На следующем слоте готов разобрать логи и манифест, не только рассказ.

Цифры скромные нормальны. Враньё про масштаб всплывает на «как шардировали алертинг».

Онкол, границы, «единственный человек»

Спросят. Отвечайте как на HR, только с деталью: ротация, рунбук, кто второй. Если вы единственный на контур — это объём, его надо назвать в вилке и в решении принимать оффер. Не геройствуйте на интервью «я всегда на связи». Это сигнал выгорания и риск для них же.

Наблюдение и «откуда вы узнали, что упало»

Спросят не «какие есть в мире Prometheus-экспортеры», а откуда сигнал. Метрика 5xx, лог ошибки коннекта к БД, жалоба поддержки, диск. Алерт не должен требовать человека, который «просто знал, что так бывает». Рунбук: первая гипотеза, откат или нет, кого звать. Если алертов не было и вы узнали от клиента — это тоже ответ, плюс что бы повесили после.

На том 502 мы узнали сразу: алерт по доле 5xx за минуту и падение логинов. Если бы алерта не было, первым пришла бы поддержка — это хуже на 20 минут. После инцидента добавили readiness на /health с проверкой БД и алерт на рестарты пода. Логи: correlation id с запроса, не простыня без запроса. Не обещаю полный tracing «как в большой корпорации»: на нашем объёме хватило id и метрики. Дашборд без порога — картинка, не сигнал.

Секреты и доступ: как выдаёте новому человеку, как отзываете ушедшему, почему ключ не в общем чате. Даже на junior это один абзац зрелости. Не рассказывайте, как обходить чужую сеть. Расскажите, как не залить .env в git — и что делали, если уже залили: ротация, а не «ну репозиторий приватный».

Две недели подготовки

  1. Дни 1–4. Linux: порт, юнит, диск, логи. На своей ВМ сломайте и почините.
  2. Дни 5–8. Пайплайн своего проекта: тесты, образ, деплой на стейдж. README: как откатить.
  3. Дни 9–11. Инцидент на бумаге, затем вслух 3 минуты. Диктофон.
  4. Дни 12–14. Mock: самопрезентация, инцидент, вилка, вопрос про онкол. Подготовка к интервью.

Частые вопросы

Нужны ли сертификаты AWS?

Не вместо контура. Если в вакансии облако — один сервис, который вы поднимали руками, сильнее бейджа без истории. Гонка сертификатов сама по себе слот не закрывает.

Спросят ли алгоритмы?

Редко на классическом DevOps. Иногда bash/python на коленке: распарсить лог, не написать дерево. Смотрите объявление.

Что, если не было прод-инцидента?

Учебный: уронили диск, сломали env, восстановили. Честно пометьте, что не прод. Ход мысли всё равно видно.

Как говорить, если автотестов в пайплайне почти нет?

«Сейчас только сборка и деплой, тесты — дыра, вот как бы вставил smoke на /health». Не притворяйтесь Google SRE.

Большое тестовое «поднимите нам кластер за выходные»?

Это объём работы. Лимит часов и отказ — в отказе от тестового.

Нужно ли письмо?

Короткое: пайплайн, инцидент, ссылка. Сопроводительное, короткая версия — здесь.

Что сделать сейчас

Напишите один инцидент на полстраницы по схеме выше. На своей машине проверьте: процесс, порт, юнит. Соберите в резюме один пайплайн, не список из 40 логотипов. Затем смотрите DevOps-вакансии и готовьте экран под их контур, не под чужой чеклист из чата.

Если слот уже завтра: нарисуйте свой пайплайн на одном листе — PR, тесты, образ, стейдж, прод, откат. Скажите это вслух за две минуты. Второй лист — инцидент: сигнал, гипотеза, действие, что изменили. Без этих двух листов команды kubectl на экране не спасут. С ними можно не знать третий чарт из вакансии и всё равно выглядеть человеком, которому можно отдать ночь. После экрана запишите, где плавали: порт, секреты, откат — и закройте одну дыру до следующего слота, не все сразу.