簡體   English   中英

Kubernetes 刪除部署信號

[英]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 發送SIGINTSIGTERM信號,但在我的應用程序中沒有任何反應。

如何讓 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.

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