Как я могу получить идентификатор хоста для процесса, работающего в контейнере?

мои контейнеры работают в kubernetes, и я видел много OOM из журнала kubernetes Node. Все журналы содержат только информацию об идентификаторе процесса. тяжело копать какие контейнеры OOM. Я не знаю, как найти идентификатор контейнера по идентификатору хост-процесса.

Есть ли способ получить идентификатор хост-процесса в контейнере, чтобы я мог получить сопоставление.

это журнал узла

2020-04-28 09:27:15.530 HKT
I0428 01:27:15.530763 1627 log_monitor.go:115] New status generated: &{Source:kernel-monitor Events:[{Severity:warn Timestamp:2020-04-28 01:27:08.060896434 +0000 UTC m=+89600.088785273 Reason:OOMKilling Message:Memory cgroup out of memory: Kill process 2493556 (node) score 1432 or sacrifice child

2020-04-28 09:29:15.000 HKT
Memory cgroup out of memory: Kill process 2493562 (node) score 1529 or sacrifice child Killed process 2493562 (node) total-vm:14009952kB, anon-rss:3146688kB, file-rss:28720kB, shmem-rss:0kB

2020-04-28 09:29:15.000 HKT
Memory cgroup out of memory: Kill process 2496433 (node) score 1275 or sacrifice child Killed process 2496433 (node) total-vm:7183684kB, anon-rss:1833580kB, file-rss:28804kB, shmem-rss:0kB

2020-04-28 09:29:15.309 HKT
I0428 01:29:15.309829 1627 log_monitor.go:115] New status generated: &{Source:kernel-monitor Events:[{Severity:warn Timestamp:2020-04-28 01:29:07.829961434 +0000 UTC m=+89719.857850273 Reason:OOMKilling Message:Memory cgroup out of memory: Kill process 2493562 (node) score 1529 or sacrifice child

2020-04-28 09:29:15.330 HKT
I0428 01:29:15.329925 1627 log_monitor.go:115] New status generated: &{Source:kernel-monitor Events:[{Severity:warn Timestamp:2020-04-28 01:29:07.849907434 +0000 UTC m=+89719.877796273 Reason:OOMKilling Message:Memory cgroup out of memory: Kill process 2496433 (node) score 1275 or sacrifice child

2020-04-28 09:48:29.000 HKT
Memory cgroup out of memory: Kill process 3086395 (monitor) score 237 or sacrifice child Killed process 3086395 (monitor) total-vm:130128kB, anon-rss:9204kB, file-rss:15488kB, shmem-rss:0kB


person Gabriel Wu    schedule 27.04.2020    source источник
comment
Вы запускаете более одного процесса в контейнере?   -  person Giorgio Cerruti    schedule 27.04.2020
comment
Где вы видите эти журналы? В самом узле или в подах? Можете ли вы отредактировать свой вопрос и добавить свои журналы?   -  person Mark Watney    schedule 27.04.2020
comment
@GiorgioCerruti да более одного процесса в контейнере   -  person Gabriel Wu    schedule 28.04.2020
comment
@mWatney добавил журналы   -  person Gabriel Wu    schedule 28.04.2020


Ответы (1)


Хорошо, это ошибка дизайна, которая кажется мне. Я бы предложил использовать 1 контейнер - 1 процесс и позволить процессу стать основным процессом (PID 1). Этот дизайн покажет вам, у какого модуля возникли проблемы, поскольку Kubernetes перезапустит модуль, как только процесс достигнет предела памяти. В любом случае, используя Kubernetes, вы должны увидеть, какой pod был перезапущен с помощью kubectl get pods, и увидеть либо pod с ошибкой запуска, либо увеличение счетчика перезапуска. Если вы хотите использовать только журналы узлов, которые я не рекомендую вам использовать, вы можете обнаружить, что это решение может помочь вам CoreOS - получить имя контейнера докера по PID?

person Giorgio Cerruti    schedule 28.04.2020
comment
Трудно убедиться, что только 1 процесс 1 контейнер. Внутри контейнера может быть много дочерних процессов. В конце концов, выясняется, что поиск сопоставления идентификатора хоста с идентификатором контейнера бессмысленен, поскольку может возникнуть проблема с дочерним процессом, например дочерним процессом OOM. И pid родительского процесса вообще не имеет ничего общего с OOM. Итак, в конце концов, я решил запустить ps aux --forest в узле по расписанию, а затем получить там снимок процессов. - person Gabriel Wu; 28.04.2020
comment
Я взглянул на CoreOS - получить имя контейнера докера по PID? Это не соответствует тому, что мне нужно. Мне нужно получить pid хоста в контейнере, когда контейнер запущен. Эта команда докера должна выполняться внутри хоста. Тем не менее спасибо @Giorgio ценю ваш ответ - person Gabriel Wu; 28.04.2020