Как работает readiness vs liveness probe?

Middle
724 просмотров
AFK Offer AI

В Kubernetes есть два типа проверок. Liveness probe отвечает на вопрос: "сервис ещё жив или завис?". Если не отвечает — Kubernetes убивает и перезапускает под. Readiness probe: "сервис готов принимать трафик?". Если не ready — под убирается из балансировщика, но не перезапускается.

На практике это разные эндпоинты с разной логикой:

// liveness — сервис работает, не завис
http.HandleFunc("/livez", func(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK) // если ответил — жив
})

// readiness — готов к трафику http.HandleFunc("/readyz", func(w http.ResponseWriter, r *http.Request) { if !dbReady || !cacheReady { w.WriteHeader(http.StatusServiceUnavailable) return } w.WriteHeader(http.StatusOK) })

Типичный сценарий: при старте сервис liveness-ready сразу, а readiness — только после прогрева кеша и проверки коннекта к БД. Ошибка новичков — делать liveness слишком умным, проверяя БД. Если БД лежит — перезапуск пода не поможет, а только добавит нагрузку.

Следующий вопрос

Что такое составной индекс?