Sobes.tech
Back to questions
Middle
4

Что делали в сервисе для корректной работы в Kubernetes (Graceful Shutdown, Readiness Probe)?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Для корректной работы сервиса в 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, обеспечивая стабильность и надёжность.