Используются ли микросервисы в Docker и Kubernetes
Что проверяют
Понимаете ли вы, что Docker, Kubernetes и микросервисы это три разные вещи, которые часто идут вместе, но не обязаны. Следом обычно просят рассказать, как вы упаковывали и запускали свой Python-сервис и что происходит с ним при деплое и остановке пода.
Как отвечать
Начните с разведения понятий: микросервисы это способ резать систему на части, Docker упаковывает сервис вместе с зависимостями в образ, Kubernetes запускает эти образы и следит за ними. Монолит тоже прекрасно живёт в Kubernetes, а микросервисы можно запускать и без него.
Дальше конкретика по Python-сервису:
- образ: базовый
python:3.12-slim, многоэтапная сборка, зависимости ставятся отдельным слоем до копирования кода, чтобы кэш не сбрасывался на каждый коммит. Запуск от непривилегированного пользователя,PYTHONUNBUFFERED=1, чтобы логи сразу шли в stdout; - процесс: один процесс на контейнер,
CMDв exec-форме, иначеSIGTERMдостанется оболочке, а не приложению. Для ASGI этоuvicornилиgunicornс воркерамиuvicorn, число воркеров согласуют с лимитом CPU пода; - Kubernetes:
Deploymentсrequestsиlimits,Serviceдля доступа, настройки черезConfigMapиSecretв переменных окружения,HorizontalPodAutoscalerдля масштабирования; - пробы:
readinessProbeрешает, слать ли на под трафик,livenessProbeрешает, перезапускать ли контейнер; - остановка: Kubernetes шлёт
SIGTERMи ждётterminationGracePeriodSeconds, по умолчанию 30 секунд, потомSIGKILL. За это время сервис должен дообработать начатые запросы.
Между сервисами понадобятся таймауты, ретраи и трассировка, например OpenTelemetry.
Где спотыкаются
Отвечают «да, у нас всё в Docker, значит микросервисы». Контейнер не делает архитектуру микросервисной, а один большой сервис в двадцати подах остаётся монолитом.
Вешают в livenessProbe проверку базы данных. Стоит базе притормозить, и Kubernetes начинает перезапускать все поды разом, превращая короткий сбой в полный.
Не могут объяснить, куда деваются запросы при раскатке: нет обработки SIGTERM, нет readiness, и каждый деплой отдаёт пользователям пачку ошибок 502.