Как узнать причину падения стручка?
Есть ли способ узнать, почему модуль kubernetes выходит из строя со статусом "craskLoopBackOff" при большой нагрузке?
У меня есть HorizontalPodAutoscaler, который никогда не срабатывает. В своем статусе он всегда показывает низкое (менее 50%) использование процессора и памяти.
Отслеживание журналов приложений внутри модулей также не дает никаких сведений.
3 ответа
Попробуйте посмотреть события Kubernetes kubectl get events --sort-by='.lastTimestamp'
Если вы не получаете ничего значимого из событий, перейдите на конкретный узел и посмотрите логи kubelet. journalctl -u kubelet
Чтобы получить журналы из модуля, вы должны использовать:
kubectl logs [podname] -p
Вы также можете сделать kubelet logs
но это в основном для журналов кластера.
Если журналов нет, это означает, что ваше приложение не создавало журналов до сбоя. Вам нужно будет переписать приложение и, например, добавить дамп памяти при удалении.
Вы упомянули, что pod
умирает под большой нагрузкой, но статистика показывает использование только 50%. Вам следует войти в модуль и проверить загрузку, возможно, проверить, сколько файлов открыто, потому что, возможно, вы достигли лимита.
Вы можете прочитать документы Kubernetes о Application самоанализа и отладки и перейти Debugging CrashLoopBackoffs с Init-контейнеров.
Вы также можете попробовать запустить свой образ в Docker и проверить там логи. Доступна хорошая документация о журналах и устранении неполадок.
Если вы предоставите более подробную информацию, мы будем более полезны.
Ниже приведены некоторые очевидные причины, которые я заметил:
- ожидание выполнения некоторых условий, например, некоторых секретов, сбоя проверки работоспособности и т. д.
- pod работает с пакетным или оптимальным QoS и прекращает работу из-за недоступности ресурсов на узле
Вы можете запустить этот скрипт, чтобы найти возможные проблемы для модулей в пространстве имен: https://github.com/dguyhasnoname/k8s-day2-ops/blob/master/namespace_scripts/debug_app_namespace.sh