Вопросы по Docker и Kubernetes на собеседовании
Контейнеры спрашивают почти на каждом собесе бэкендера, обычно с одного и того же места: чем контейнер отличается от виртуальной машины и что происходит при сборке образа. Дальше идут вопросы про то, что вы делали руками: логи, тома, переменные окружения, выкатка.
Из чего состоит тема
Так тема разложена в тренажёре: движок ведёт прогресс по каждой подтеме отдельно и возвращает те, где вы ошибаетесь.
- Docker для приложения12
- Kubernetes: основы12
- Observability и CI/CD12
- Брокеры сообщений и Kafka12
- Конфиг и 12-factor12
- Кэширование12
- Мониторинг и трейсинг12
- Объектное хранилище (S3)12
- Очереди задач (Celery)12
- Серверы приложений (gunicorn/uvicorn)12
Разборы подтем
Конспект по каждой: что это, как отвечать вслух, на чём валятся, плюс вопросы для самопроверки.
- Серверы приложений (gunicorn/uvicorn)12 вопросов
- Инфраструктура сервиса: кэширование12 вопросов
- Инфраструктура сервиса: конфиг и 12-factor12 вопросов
- Docker для приложения12 вопросов
- Kubernetes: основы12 вопросов
- Брокеры сообщений и Kafka12 вопросов
- Объектное хранилище (S3)12 вопросов
- Observability и CI/CD12 вопросов
- Инфраструктура сервиса: мониторинг и трейсинг12 вопросов
- Инфраструктура сервиса: очереди задач (Celery)12 вопросов
Примеры вопросов с разбором
- Зачем перед Python-приложением ставят gunicorn или uvicorn, а не dev-сервер?A)Прод-сервер держит нагрузку: воркеры, устойчивость, перезапускB)Только чтобы приложение могло отдавать статические файлы клиентамC)Без них Python-приложение вообще не умеет принимать HTTP-запросыD)Прод-серверы автоматически шифруют весь трафик до приложения
показать ответ и разбор
+A)Прод-сервер держит нагрузку: воркеры, устойчивость, перезапуск// разбор: Dev-серверы (flask run, uvicorn --reload) рассчитаны на отладку, а не нагрузку. Прод-серверы (gunicorn для WSGI, uvicorn для ASGI) держат пул воркеров, переживают падение воркера, дают graceful reload и конкурентность. Их ставят за реверс-прокси (nginx), который занимается TLS и статикой.
- Зачем перед базой ставят кэш (например Redis)?A)Чтобы полностью заменить базу данных и отказаться от неё совсемB)Снять нагрузку с БД и ускорить частые повторные чтенияC)Чтобы обеспечить сохранность данных при падении базы данныхD)Чтобы автоматически валидировать данные перед записью в базу
показать ответ и разбор
+B)Снять нагрузку с БД и ускорить частые повторные чтения// разбор: Кэш держит результат дорогого чтения (запрос к БД, вызов API, тяжёлый расчёт) в быстрой памяти, отдавая его повторным запросам без обращения к источнику. Это снижает задержку и нагрузку на БД. Но источник правды остаётся в БД: кэш летуч и может устаревать, что и порождает вопрос инвалидации.
- Где по подходу 12-factor держать конфигурацию приложения (URL БД, ключи)?A)Прямо в коде константами — так их удобнее видеть при чтении файлаB)В самом Docker-образе, зафиксированным на этапе его сборкиC)В отдельной ветке git на каждую среду с зашитыми значениямиD)В переменных окружения, отдельно от кода
показать ответ и разбор
+D)В переменных окружения, отдельно от кода// разбор: 12-factor: конфиг, различающийся между средами (адреса БД, ключи, флаги), хранят в переменных окружения, а не в коде или в VCS. Это отделяет код от среды: один и тот же артефакт запускается на dev/stage/prod, отличаясь лишь набором переменных. Хардкод и «ветка на среду» — антипаттерны.
- Зачем упаковывать Python-сервис в Docker-образ?A)Только ради того, чтобы скрыть исходный код от чужих глаз навсегдаB)Воспроизводимое окружение: одинаково у всех и на продеC)Docker сам по себе ускоряет исполнение Python-кода внутри контейнераD)Чтобы приложение могло работать вообще без установленного Python
показать ответ и разбор
+B)Воспроизводимое окружение: одинаково у всех и на проде// разбор: Образ фиксирует код, зависимости, версию Python и системные библиотеки в одном артефакте — он одинаково запускается на ноутбуке разработчика, в CI и на проде. Это лечит «у меня работало»: окружение перестаёт быть переменной. Ускорения исполнения контейнеризация не даёт.
- Что такое под (Pod) в Kubernetes с точки зрения разработчика Python-сервиса?A)Минимальная единица запуска: один-два контейнера с общей сетьюB)Это виртуальная машина с собственной ОС под каждый экземпляр приложенияC)Синоним Docker-образа: собранный артефакт сервиса, лежащий в реестреD)Постоянный сетевой адрес сервиса, по которому его находят остальные приложения кластера
показать ответ и разбор
+A)Минимальная единица запуска: один-два контейнера с общей сетью// разбор: Под — наименьшая деплой-единица k8s: обычно один контейнер приложения (иногда + сайдкар) с общим сетевым namespace и IP. Поды эфемерны: их создают и убивают, IP меняется — поэтому к ним не ходят напрямую, а через Service.
- Чем брокер событий Kafka отличается от обычной очереди задач?A)Это устойчивый лог: события хранятся, читаются по offset, перечитываютсяB)Kafka исполняет обработчики сама, потребителям код писать не нужноC)Ничем: Kafka — просто другое название для очереди задач CeleryD)Kafka удаляет сообщение сразу после первого прочтения потребителем
показать ответ и разбор
+A)Это устойчивый лог: события хранятся, читаются по offset, перечитываются// разбор: Очередь задач раздаёт работу воркерам (сообщение обычно исчезает после обработки). Kafka — устойчивый упорядоченный лог событий: записи хранятся по времени/размеру, каждый потребитель читает со своей позиции (offset) и может перечитать историю. Одно событие потребляют независимо несколько групп — это про потоки событий, а не про раздачу задач.
- Бэкенду нужно хранить загруженные пользователями файлы (аватары, PDF). Почему обычно берут S3-совместимое хранилище, а не кладут в PostgreSQL?A)Объектное хранилище дёшево тянет большие блобы и раздачуB)Postgres физически не умеет хранить бинарные данные никакого видаC)S3 автоматически проверяет содержимое файлов на вирусы перед сохранениемD)Файлы в S3 индексируются для полнотекстового поиска по их содержимому из коробки
показать ответ и разбор
+A)Объектное хранилище дёшево тянет большие блобы и раздачу// разбор: Блобы в БД раздувают её размер, бэкапы и кэш, а раздача файлов нагружает коннекты к БД. Объектное хранилище (S3/MinIO) дёшево держит большие объекты и отдаёт их напрямую (в т.ч. через CDN), а в БД остаётся лишь ключ объекта и метаданные.
- Почему в проде логируют через logging со структурой, а не print?A)print в Python вообще не выводит текст при запуске в контейнереB)print работает медленнее ровно в силу отсутствия у него буфераC)logging шифрует сообщения, а print оставляет их в открытом видеD)Уровни, формат и маршрутизация логов — print этого не даёт
показать ответ и разбор
+D)Уровни, формат и маршрутизация логов — print этого не даёт// разбор: logging даёт уровни (DEBUG/INFO/ERROR), настраиваемый формат (в т.ч. JSON для сбора), хендлеры (stdout, файл, внешние системы) и централизованную конфигурацию — можно приглушить шум и поднять детализацию без правки кода. print — неструктурированный поток без уровней и маршрутизации, который в проде не отфильтровать и не разобрать машиной.
- Сервис обрабатывает HTTP-запросы. Метод RED советует следить за тремя показателями — какими?A)Rate (запросы/с), Errors (доля ошибок), Duration (задержка)B)Reads, Edits, Deletes — три типа операций сервиса с даннымиC)Загрузка CPU, памяти и диска узла — основа дашборда сервисаD)Число активных пользователей, сессий и подписок в реальном времени
показать ответ и разбор
+A)Rate (запросы/с), Errors (доля ошибок), Duration (задержка)// разбор: RED — практичный набор для request-driven сервиса: Rate (сколько запросов в секунду), Errors (какая доля падает), Duration (распределение задержек, смотрят перцентили). Три показателя быстро отвечают «здоров ли сервис по запросам». Для ресурсов узла есть параллельный набор USE (Utilization, Saturation, Errors).
это 9 из 120
Ещё 111 вопросов по теме — в тренажёре, с движком повторения
Прочитать разбор и ответить самому — разные навыки. В Сеньорчике вопросы идут сессиями, а движок возвращает подтемы, где вы ошибаетесь, пока они не начнут отскакивать. Бесплатно, лимит по энергии.
Частые вопросы
Насколько глубоко спрашивают Kubernetes у разработчика?
Обычно до уровня пользователя: что такое под и сервис, как приложение попадает в кластер, как читать логи и настраивать пробы. Администрирование кластера остаётся инженерам платформы.
Что спрашивают про Docker чаще всего?
Разницу с виртуальной машиной, устройство слоёв образа и кеш сборки, работу с томами и сетями, а также как уменьшить размер образа и не тащить секреты внутрь.