Sobes.tech
Middle
31

Kubernetes-те дұрыс жұмыс істеу үшін (Graceful Shutdown, Readiness Probe) қызметте не жасадыңыз?

Сұралған компаниялар
СБЕРСБЕР

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