Для корректной работы сервиса в Kubernetes важно реализовать:
Расскажи про graceful shutdown: что это, что происходит при нём, как вызывается? Какие процессы выполняет сервис в Kubernetes после получения SIGTERM?
Для корректной работы сервиса в 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, обеспечивая стабильность и надёжность.