tomcat - Kubernetes 正常关闭 Spring Boot Tomcat 应用程序

标签 tomcat kubernetes

我在 Kubernetes 集群中的 Tomcat 上运行 Java Spring Boot 引导应用程序,我使用生命周期 Hook 在容器终止之前关闭 Tomcat。还定义了 30 秒的终止宽限期。

预期行为:当我终止 pod 或删除部署时,tomcat 正常关闭。

实际行为:tomcat 突然关闭。

lifecycle:
          preStop:
            exec:
              command:
              - /usr/local/tomcat/bin/catalina.sh

有人可以帮忙吗?

最佳答案

在 Kubernetes 中,preStop Hook 在 pod 终止之前执行。

对于上述用例,当删除 pod/deployment 时,必须在 pod 终止之前正常关闭 tomcat 进程。

通过在 pod 终止之前正常关闭 tomcat 服务器,以下示例 pod 定义有效。 注意:这个定义中的容器是FROM tomcat:9.0.19-jre8

apiVersion: v1 
kind: Pod 
metadata:
  name: demopod
spec:
  containers:
  - image: demo:web
    name: demo-container
    ports:
    - containerPort: 8080
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/bin/sh", "-c", "echo Stopping server > /usr/share/message1; sleep 10; sh /usr/local/tomcat/bin/catalina.sh stop"]

在上面的定义文件中,我们运行三个命令(根据需要更改)。

  1. 将关机信息写入/usr/share/message1

  2. sleep 10(只是为了给时间查看 pod/容器日志)

  3. 运行 Catalina.sh stop停止 tomcat 服务器的脚本。

调试: 对于 PreStop,如果处理程序失败,则会广播一个事件,即 FailedPreStopHook 事件。您可以通过运行 kubectl describe pod <pod_name> 查看这些事件

请参阅下面的帖子以获取更详细的说明: http://muralitechblog.com/kubernetes-graceful-shutdown-of-pods/

关机日志: Valid shutdown logs

关于tomcat - Kubernetes 正常关闭 Spring Boot Tomcat 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58337233/

相关文章:

kubernetes - 将动态命令注入(inject)部署

java - 连接池 : is it appropriate

tomcat - 我应该在 Tomcat 中的什么地方放置跨域 XML?

hibernate - Flex Hibernate - 使用 Flex/Mate/和 BlazeDS 设置 EntityManager 和 SessionFactory

java - apache axis 2 网络服务的用户身份验证

openstack - 如何通过 API 从 Kubernetes 中的 Node 检索 CPU 使用率?

tomcat - 我如何找到 Sesame 存储库的位置?

ldap - 如何使用企业 ldap 配置 kubernetes 集群以进行身份​​验证?

azure - 使用 CSI 驱动程序获取 secret 后,未在 AKS 中创建 secret

kubernetes - 初始化 token 过期后加入集群?