2016-09-18 3 views
4

В нашем кластере Kuberenetes мы сталкиваемся с спорадическими ситуациями, когда у узла кластера заканчивается память, а Linux вызывает убийцу OOM. Глядя на журналы, кажется, что Pods, запланированные на узел, запрашивают больше памяти, чем могут быть выделены узлом.Как получить историю работы Pods на узле Kubernetes?

Проблема заключается в том, что при вызове OOM killer он распечатывает список процессов и их использование в памяти. Однако, поскольку все наши контейнеры Docker являются службами Java, «имя процесса» просто отображается как «java», не позволяя нам отслеживать, какой конкретный Pod вызывает проблемы.

Как я могу получить историю того, какие Pods планировалось запустить на определенном узле и когда?

+2

Одним из способов было бы проверить ' kubectl get events' и получить представление о создании/удалении различных контейнеров на разных узлах. –

ответ

1

Мы используем Prometheus для мониторинга событий OOM.

Это выражение должно сообщить количество раз, что использование памяти достигло пределов:

rate(container_memory_failcnt{pod_name!=""}[5m]) > 0 

FYI: это следующая лучшая вещь для соответствующей документации, the code

-1

Один из способов - показать вывод docker ps -a и сопоставить имена контейнеров с контейнерами вашего контейнера.

0

Я полагаю, что у ваших стручков нет requests and limits, или значения не идеальны.

Если вы настроили это правильно, когда стручок начинает использовать слишком много баранов, этот блок будет убит, и вы сможете узнать, что вызывает проблемы.

О просмотре всех контейнеров на узле, вы можете пойти с kubectl get events или docker ps -a на узле, как указано в других ответах/комментариях.

Смежные вопросы