Linux

Kubernetes 副本集關閉策略

  • April 23, 2021

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 生命週期是解決此類問題的好方法:

Container Lifecycle Hooks

一種方法是使用啞初始化。

建構容器,dumb-init 通常是一種很好的做法,可以處理殭屍等問題。在您的情況下,它還允許重新映射信號。

在你的 Dockerfile 中,你會有類似的東西

CMD ["dumb-init", "--rewrite", "15:28", "/app/start.sh"]

核對kill -lSIGINT應為數15

然後,在您的啟動腳本中,您可以擷取SIGWINCH( 28) 信號:

#!/bin/sh

trap "cd /app ; catalina.sh stop" SIGWINCH

[your startup script]
exec $JAVA_HOME/bin/java ...

編輯,我可以看到另一個答案被接受:當然,容器生命週期掛鉤聽起來不錯。

一方面,它們已經存在了大約一年:可能無法使用,具體取決於您的集群版本。

然後,您會意識到它們僅在 API 驅動的終止時執行,這可能是一個問題。

引用自:https://unix.stackexchange.com/questions/631772