[英]Kubernetes delete deployment signal
我有以下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 將信號發送到我的應用程序? 我究竟做錯了什么?
問題出在您的 Python 代碼中。 您需要調整 class arguments 並使用 Stopper.stop Stopper.stop = True
(大寫T
)。
以下代碼適用於 Python 3:
import time
import os
import signal
from abc import abstractmethod
class Stopper:
stop = False
@abstractmethod
def safe_stop(self, 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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.