Расскажи про graceful shutdown: что это, что происходит при нём, как вызывается? Какие процессы выполняет сервис в Kubernetes после получения SIGTERM?

Для корректной работы сервиса в Kubernetes важно реализовать:

Короткий ответ

Что ответить на собеседовании

Для корректной работы сервиса в Kubernetes важно реализовать:

Подробный разбор

Ответ с пояснениями

Для корректной работы сервиса в Kubernetes важно реализовать:

  • Graceful Shutdown — корректное завершение работы приложения при остановке контейнера. Это позволяет избежать потери данных и некорректных состояний. В Go это обычно делается через обработку сигналов ОС (SIGTERM), чтобы завершить текущие операции и освободить ресурсы перед выходом.

Пример обработки сигнала в Go:

import (
    "os"
    "os/signal"
    "syscall"
    "context"
    "time"
)

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        <-sigs
        // Начинаем graceful shutdown
        cancel()
    }()

    // Запуск сервиса с ctx
    runServer(ctx)
}
  • Readiness Probe — проверка готовности приложения принимать трафик. Kubernetes использует её, чтобы не направлять запросы на под, пока сервис не инициализирован. Обычно это HTTP endpoint, который возвращает успешный статус, когда сервис готов.

Пример readiness probe в манифесте Kubernetes:

readinessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10

Таким образом, сервис корректно стартует, работает и завершается в Kubernetes, обеспечивая стабильность и надёжность.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку