簡體   English   中英

為什么我不能在 k8s pod 中殺死 python3 進程?

[英]Why I cannot kill python3 process in k8s pod?

我試圖殺死一個 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

知道為什么嗎? 謝謝。 調試這個需要任何其他信息嗎?

更新

事實上,我不想殺死容器或 pod。 我直接修改了/usr/local/lib/python3.6/dist-packages/的python代碼。 如果 pod 重新啟動,我的更改將消失。

我需要在容器中修改第三方代碼(不是我自己的代碼)並直接查看結果。

事實上,更新我自己的代碼並重新部署 docker 鏡像並不是我的第一選擇。 否則,我為什么在這里提問。

另外,我很好奇為什么它不能被殺死?

謝謝

正如@coderanger 所提到的,容器具有不可變的概念。 您嘗試做的事情在 Kubernetes/容器環境中不是一個好習慣。

但...

有時需要一種魔法才能讓飛機保持飛行狀態……有一些選項可以幫助您:

1. 重建容器鏡像

在這種情況下,最好的解決方案是基於當前運行的鏡像重建容器鏡像。 您可以與主要工作負載分開運行此映像以測試更改。 在這種情況下,這是最好的方法,因為您將保留圖像中的更改和滾動更新的歷史記錄。

2.解決方法殺死pid

我已經在運行帶有 supervisord 的燒瓶的容器中進行了測試。

您可以使用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/

容器通常是不可變的。 一旦開始,您就無法更改正在運行的代碼,除非對其進行非常特殊的處理,而您可能沒有(也不應該)。 如評論中所述,您可以通過構建新的容器映像並更新您的部署(或類似)以使用該映像來編輯 Kubernetes 中的代碼。 然后它將更新您的所有 pod。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM