Как организован деплой: CI/CD, управление контейнерами и наличие даунтайма?
Что проверяют
Понимаете ли вы, как ваш код попадает в прод и что делает сам Go-сервис, чтобы выкладка прошла незаметно для пользователей. Следом спрашивают про откат и миграции базы. Тот же вопрос стоит задать и работодателю в конце интервью: ответ многое скажет о зрелости команды.
Как отвечать
Опишите конвейер своего проекта, с инструментами и своей ролью в нём. Типичный каркас:
- CI: на каждый merge request
golangci-lint,go test -race ./..., сборка образа. GitLab CI, GitHub Actions или Jenkins, здесь важнее этапы, чем название; - образ: multi-stage Dockerfile, бинарник собран с
CGO_ENABLED=0, финальный слойdistrolessилиscratch. Образ весит десятки мегабайт, и лишнего в нём почти нет; - доставка: Helm-чарт или манифесты, выкатка через Argo CD по модели GitOps или прямым шагом пайплайна;
- без даунтайма: rolling update в Kubernetes с
maxUnavailable: 0, readiness-проба пускает трафик только на готовый под. Для рискованных релизов canary или blue-green; - поведение сервиса: на
SIGTERMGo-процесс ловит сигнал черезsignal.NotifyContext, перестаёт принимать новые запросы и дожидается текущих черезhttp.Server.Shutdown(ctx). Kubernetes даёт на этоterminationGracePeriodSeconds, по умолчанию 30 секунд; - откат:
helm rollbackилиkubectl rollout undo, плюс миграции в стиле expand/contract, чтобы старая версия работала с новой схемой.
Если деплоем у вас занималась отдельная команда, скажите это прямо и расскажите то, что знаете со стороны сервиса: пробы, остановку, миграции.
Где спотыкаются
Перечисляют модные слова без своей роли. После вопроса «а что именно делали вы» ответ рассыпается.
Обещают нулевой даунтайм без graceful shutdown. При rolling update незавершённые запросы обрываются, и пользователи получают 502. Часто нужен ещё короткий preStop, потому что под исключается из балансировки не мгновенно.
Выкатывают миграцию, которая ломает старую версию, например переименовывают колонку одним шагом. Пока крутятся старые поды, они падают на каждом запросе.