Spring Boot应用+ Kubernetes活动/就绪检查

问题描述 投票:5回答:3

我正在构建一些Spring Boot微服务,这些服务将部署在Kubernetes(专用于AKS)集群中。我打算为活泼和准备状态检查设置probePaths到执行器运行状况端点的两个点,但是我想知道这是否不是最佳选择。我最初的想法是检查路径将很有用(至少对于准备就绪而言),以便在Spring启动并能够处理请求之前,不向其发送流量。由于这些服务使用数据库连接,并且如果执行器运行状况指示器无法建立连接,则执行器运行状况指示器将报告状态为关闭,这不是一个好主意吗?

[以活泼的态度,我想它可能会一遍又一遍地回收豆荚/容器,即使(在数据库关闭的情况下,它可能无法解决任何问题。

准备就绪,我想如果数据库关闭,这可能会导致可用应用程序池为0。如果数据库关闭,该应用程序本身很有可能不是很有用,但是我想某些部件可能仍然可以工作。

是否有针对此类事情的推荐最佳实践?

spring-boot kubernetes spring-boot-actuator
3个回答
1
投票

ReadinessProbe-应用已准备好处理请求吗?

使用运行状况检查来检查该应用是否已准备好处理新请求。可以在/actuator/health中实现。另请参见下面的[[StartupProbe。

在高负载下?

如果您的应用程序处于

高负载

下,请考虑使用Horizontal Pod Autoscaler获取更多副本以处理负载。LivenessProbe-应用是否死锁了?

如果您的应用处于不可恢复的状态,则最好能够自行终止,例如,使用java.lang.System.exit(1)。如果应用程序可能出现死锁,无法继续运行,请考虑为LivenessProbe实现端点,此

may

ReadinessProbe相同。

长时间未响应准备就绪

如果您的应用长时间没有响应

ReadinessProbe

,例如很多分钟,可能是有问题(除非您期望应用会发生这种情况),然后您可能还应该将/actuator/health用作LivenessProbe,但具有较高的failureThresholdhigh [ C0](例如几分钟)[StartupProbe-Kubernetes 1.16+上的更好替代方案

ReadinessProbe

在应用启动过程中最有用,因为它可能需要加载例如准备好接收请求之前的数据-在Pod生命周期中定期执行but ReadinessProbeStartupProbe initialDelaySeconds,用于与LivenessProbe组合使用的缓慢启动的应用程序,该应用程序仅在startupProbe之后才有效。使用管理服务器端口

它是发送探测请求的同一节点上的

kubelet

。考虑将is now a better alternative用于探头。您无需将此端口暴露给Management Server Port,最好将一个端口用于http,将另一个端口用于management入口健康检查

取决于您使用的是哪个Ingress Controller或Cloud Provider,您可能还需要配置其在其上发送运行状况检查的路径,例如Service默认为Google Cloud Platform


0
投票
我们已将Spring boot Actuator自定义运行状况检查用于活动性和就绪状态检查。您可以使用自定义逻辑来确定您是否能够满足请求。如果您能够处理请求,则保持Pod处于活动状态,否则重新启动它。对于数据库连接问题,仅当您的连接被卡住且未释放时,重启才有帮助。

0
投票
我们正在将标准/ actuator / health端点用于活动和就绪状态,并且已经使用了将近一年。积极的一面是,除非所有应用程序的连接都已启动并正在运行,否则该应用程序未标记为可使用。不利方面是由于某些情况下的连接错误,导致停机/重启。

在我看来,不与其数据库(或其他重要基础结构)保持连接的应用程序就像无用一样好。由于它可能无法正常运行,因此您最好报告它不可用。因此,除非您遇到与数据库的连接不良或其他问题,否则我真的看不到使用/ actuator / health既活泼又准备就绪的危害。另外,这是一种检查应用程序是否已启动并运行的廉价方法,只需很少的手动工作即可进行设置。

© www.soinside.com 2019 - 2024. All rights reserved.