【发布时间】:2021-06-07 09:01:40
【问题描述】:
我有以下python 代码:
import time
import os
import signal
from abc import abstractmethod
class Stopper:
stop = False
@staticmethod
def safe_stop(*args):
Stopper.stop = true
signal.signal(signal.SIGINT, Stopper.safe_stop)
signal.signal(signal.SIGTERM, Stopper.safe_stop)
while not Stopper.stop:
print("Running...")
time.sleep(1)
os.system("touch /mnt/pod/sig")
print("Done")
然后我创建了一个部署,其中包含带有上述 Python 代码的图像。
当我使用 kubectl delete -f sig.yaml 删除部署时,我的 Python 代码不会创建 sig 文件指示,也不会打印“完成”消息。
在此链接:https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-terminating-with-grace 我看到 k8s 发送 SIGINT、SIGTERM 信号,但我的应用程序没有任何反应。
如何让 k8s 向我的应用程序发送信号?我做错了什么?
【问题讨论】:
-
会不会是因为
signal.singal的拼写错误? -
哦,抱歉,错字 - 我已修复
-
如果你在 Kubernetes 之外运行它(使用
^C或 kill(1) 停止程序)它是否有效?@abstractmethod似乎不对,我怀疑您正确接收信号但函数调用失败。 -
@DavidMaze 是的,如果我运行它并停止程序 ^C 它对我来说很有效
标签: python kubernetes sigterm