当前位置: 首页 > 知识库问答 >
问题:

Spring Boot 2.3活性探针功能在优雅关机时失败

郎伟兆
2023-03-14

我正在使用KubernetesTerminationGracePeriodSeconds字段测试Spring Boot2.3(server.shutdown=graceful和Tomcat Web server)中的新功能graceful shutdown。当正常关闭阶段开始时,新的HTTP请求会被拒绝,在此期间,应该详细说明当前的请求,直到可配置的超时(spring.lifecycle.timeout-per-shutdown-phase)。奇怪的行为是Spring boot Actuctor活性结果,因为在此场景中,活性endpoint不可达。

所以kubelet无法知道微服务在关机期间是否还活着,或者因为其他事情而卡死。由于K8s活跃度探测不依赖于TerminationGracePeriodSeconds字段,因此POD将根据其K8s活跃度配置重新启动,而Spring boot微服务由于粗暴的重新启动而无法执行优雅的关机。

我是不是漏掉了什么?我该如何处理这种情况呢?

共有1个答案

羊柏
2023-03-14

同时,我采用了另一种解决方案,通过使用RMI协议的JMX调用spring boot的活跃度探测。在这种情况下,活性在优雅的关机期间给出“向上”的响应。为此:启用JMX,将属性spring.JMX.enabled设置为true,并使用JMX客户机调用JMX健康指示器。

 类似资料:
  • 如何为我的spring boot应用程序编写kubernetes Readision probe(启动大约需要20秒)?我试着从配置活跃度、就绪和启动探测中学习,但我不知道Kubernetes是如何将状态代码200计算为成功的

  • 当我执行部署并描述pod时,我看到在输出底部的'Events'下列出了以下内容: (这是令人困惑的,因为它将年龄声明为2m1s-但大于这个值-所以我不确定它为什么将这个值报告为年龄) 就绪探测随后以相同错误失败。IP号与我的pod的IP匹配,我在pod描述中的下看到了这一点: 活性和就绪探针的失败导致pod不断终止和重新启动。 该应用程序有一个默认的页面,所以我相信如果健康探测能够连接,它应该会收

  • 我用的是spring kafka 1.2.2。释放目前,我已经为没有BackOffPolicy和AlwaysRetryPolicy的容器配置了重试模板。确认模式为手动或立即。 当一个SIGTERM出现时,我会让当前消息被处理,当@KafkaListener再次被调用时,我会在容器上抛出RuntimeException,该容器会无限期重试并持续抛出异常。一段时间后,SIGKILL被发出,容器被停止(

  • 作为自动缩放presto集群工作的一部分,我们喜欢在EC2终止presto worker之前优雅地关闭它。以下命令后 curl-v-xput--data'“shutting_down”'-h“content-type:application/json”http://250.0.46.167:8081/v1/info/state worker日志立即指示“com.facebook.presto.se

  • 我正在开发一个由嵌入式Tomcat支持的Spring Boot应用程序,我需要通过以下步骤开发一个优雅的关机: 停止处理新的HTTP请求(停止web容器) 处理所有已接受的请求 关闭Spring ApplicationContext 附注。Spring Boot 1.5.20版本,Java 8

  • 我正在尝试了解Spring Boot如何关闭分布式Hazelcast缓存。当我连接然后关闭第二个实例时,我会得到以下日志: 似乎当我关闭它时,第二个实例并没有向第一个实例报告它正在正确关闭。我们在它无法连接到它几秒钟后收到警告,因此从集群中删除。 它表示它正在尝试运行一个关闭挂钩,但它所做的最后一个报告仍然是“活动的”,并且它从来没有像本文中提到的那样转到“关机”或“关机”。 pom。xml 只是