Назад к вопросам
СБЕР
Middle
3
Что делали в сервисе для корректной работы в Kubernetes (Graceful Shutdown, Readiness Probe)?
Компании, где спрашивали
Ответ от нейросети
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, обеспечивая стабильность и надёжность.