Команда проверки внутри контейнера не уложилась в таймаут
События «Readiness probe failed: command "..." timed out» и «Liveness probe failed: command timed out» в Kubernetes: проверка через команду внутри контейнера выполняется дольше timeoutSeconds, по умолчанию одна секунда. Под перезапускается или выпадает из балансировки, хотя приложение живо.
Что это значит
Проверка типа exec запускает команду внутри контейнера и ждёт её завершения не дольше timeoutSeconds. По умолчанию это одна секунда. Многие команды проверки, например диагностические утилиты брокеров и баз, на нагруженном узле работают дольше, и проверка считается проваленной, хотя приложение работает. Проваленная проверка жизни перезапускает контейнер, проверка готовности убирает под из балансировки.
Похожее событие probe errored: rpc error ... container is in CONTAINER_EXITED state значит, что контейнер уже завершился, и запустить в нём команду нельзя: это следствие падения, а не причина.
Как проверить
kubectl get pod <под> -n <namespace> -o yaml | grep -A10 -E "livenessProbe|readinessProbe"
time kubectl exec <под> -n <namespace> -- <команда проверки>
Вторая команда покажет, сколько проверка выполняется на самом деле.
Что сделать
- Поднять
timeoutSecondsс запасом относительно реального времени команды. - Заменить тяжёлую команду лёгкой: проверка порта или HTTP-адреса здоровья вместо полной диагностики.
- Проверку жизни делать проще и терпимее проверки готовности: ложный перезапуск под нагрузкой только усиливает аварию.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать