Почему я не могу убить python3 процесс в модуле k8s? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытался убить один python процесс:

# ps aux | grep python
root           1 12.6  2.1 2234740 1332316 ?     Ssl  20:04  19:36 /usr/bin/python3 /batch/run.py
root         490  0.0  0.0  11472  1012 pts/0    S+   22:39   0:00 grep --color=auto python
# sudo kill -9 1
# ps aux | grep python
root           1 12.6  2.1 2234740 1333372 ?     Ssl  20:04  19:38 /usr/bin/python3 /batch/run.py
root         494  0.0  0.0  11472  1088 pts/0    S+   22:39   0:00 grep --color=auto python

Есть идеи почему? Спасибо. Любая другая информация, необходимая для отладки этого?

ОБНОВЛЕНИЕ

На самом деле, я не хотел бы убивать контейнер или модуль. Я изменил python коды в /usr/local/lib/python3.6/dist-packages/ напрямую. Если модуль перезапустится, мои изменения пропадут.

Мне нужно изменить сторонние коды (не мои собственные коды) в контейнерах и напрямую просмотреть результаты.

Обновление моих собственных кодов и повторное развертывание образа docker на самом деле не мой первый выбор. В противном случае, почему я задаю вопросы здесь.

Кроме того, мне любопытно, почему его нельзя убить?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Как уже упоминалось @coderanger, контейнер имеет концепцию неизменности. То, что вы пытаетесь сделать, не является хорошей практикой в ​​Kubernetes / контейнерных средах.

Но ...

Иногда это своего рода magi c требуется, чтобы держать самолет в полете ... Есть несколько вариантов, которые могут вам помочь:

1. Перестроить образ контейнера

Лучшее решение в этом случае - перестроить образ контейнера на основе текущего запущенного образа. Вы можете запустить этот образ отдельно от основной рабочей нагрузки, чтобы проверить изменения. Это лучший подход в этом случае, потому что вы сохраните изменения в изображении и хронологию для непрерывных обновлений.

2. Обходной путь для уничтожения pid

Я тестировал в контейнере, работающем flask с супервизором.

Вы можете использовать сигнал SIGHUP для перезапуска процесс внутри вашего контейнера:

SIGHUP - Сигнал SIGHUP отключает процесс от родительского процесса. Это также может быть использовано для перезапуска процессов. Например, «killall -SIGHUP compiz» перезапустит Compiz. Это полезно для демонов с утечками памяти. ... SIGHUP P1990 Обнаружение зависания термина на управляющем терминале или прекращение процесса управления

Внутри вашего контейнера запустите:

kill -SIGHUP <PID> или kill -1 <PID>

Источники: - http://man7.org/linux/man-pages/man7/signal.7.html https://www.linux.org/threads/kill-signals-and-commands-revised.11625/

0 голосов
/ 05 февраля 2020

Контейнеры, как правило, в основном неизменяемы. После запуска вы не можете изменить код, который выполняется, без особой обработки для него, которой у вас, вероятно, нет (и не должно быть). Как упоминалось в комментариях, вы редактируете код в Kubernetes, создавая новый образ контейнера и обновляя свой Deployment (или аналогичный), чтобы использовать этот образ. Затем он обновит все ваши модули.

...