'Why I cannot kill python3 process in k8s pod?

I tried to kill one python process:

# 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

Any idea why? Thanks. Any other information needed to debug this?

UPDATE

In fact, I would not like to kill the container or pod. I modified the python codes in /usr/local/lib/python3.6/dist-packages/ directly. If pod restarted, my changes will be gone.

I need to modify third party codes (not my own codes) in the containers and see the results directly.

Updating my own codes and redeploying the docker image is not my first choice in fact. Otherwise, why I ask questions here.

Also, I am curious why it cannot be killed?

Thanks



Solution 1:[1]

As mentioned by @coderanger, container has the concept to be immutable. What you trying to do isn't a good practice in Kubernetes/container environments.

But...

Sometimes a kind of magic is required keep the airplane in flight... There are some options that could help you:

1. Rebuild container image

The best solution in this case is rebuild your container image based in the current running image. You could run this image separately from your main workload to test the changes. That is the best approach in this case, because you'll persist the changes in the image and the historical for rolling updates.

2. Workaround to kill the pid

I've tested in a container running flask with supervisord.

You could use the SIGHUP signal to restart the process inside your container:

SIGHUP - The SIGHUP signal disconnects a process from the parent process. This an also be used to restart processes. For example, "killall -SIGHUP compiz" will restart Compiz. This is useful for daemons with memory leaks. ... SIGHUP P1990 Term Hangup detected on controlling terminal or death of controlling process

Inside your container, run:

kill -SIGHUP <PID> or kill -1 <PID>

Sources: - http://man7.org/linux/man-pages/man7/signal.7.html https://www.linux.org/threads/kill-signals-and-commands-revised.11625/

Solution 2:[2]

Containers are generally mostly immutable. Once started, you can't change the code that is running without very special handling for it which you probably don't have (and shouldn't). As mentioned in the comments, you edit code in Kubernetes by building a new container image and updating your Deployment (or similar) to use that image. It will then update all your pods.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Mr.KoopaKiller
Solution 2 coderanger