Linux
Kubernetes 副本集關閉策略
Kubernetes 在倒計時副本集上使用 TERM 信號。
這對我的應用程序來說太危險了。
我使用 Tomcat 應用程序伺服器,這個應用程序伺服器有自己的關閉機制來終止應用程序伺服器。
當我向 jvm 發送作業系統 (Linux) 信號 (9,15,…) 時,JVM 不知道 jvm 內的執行緒如何處理,因此執行緒在成功完成之前被殺死。
Request -----> BackEnd API -----> [Process] -----> Response ^ Send TERM (Signal) while thread doing Process
有沒有辦法改變 kubernetes 容器關閉機制?
我希望 kubernetes 使用:
catalina.sh stop
Kubernetes 生命週期是解決此類問題的好方法:
一種方法是使用啞初始化。
建構容器,dumb-init 通常是一種很好的做法,可以處理殭屍等問題。在您的情況下,它還允許重新映射信號。
在你的 Dockerfile 中,你會有類似的東西
CMD ["dumb-init", "--rewrite", "15:28", "/app/start.sh"]
核對
kill -l
,SIGINT
應為數15
。然後,在您的啟動腳本中,您可以擷取
SIGWINCH
(28
) 信號:#!/bin/sh trap "cd /app ; catalina.sh stop" SIGWINCH [your startup script] exec $JAVA_HOME/bin/java ...
編輯,我可以看到另一個答案被接受:當然,容器生命週期掛鉤聽起來不錯。
一方面,它們已經存在了大約一年:可能無法使用,具體取決於您的集群版本。
然後,您會意識到它們僅在 API 驅動的終止時執行,這可能是一個問題。