我有一个简单的SpringBoot应用程序(实际上是一个基于REST的微服务),正在Kubernetes中进行部署。
它具有一个下游依赖性(另一种基于REST的Web服务)。 我知道对于REST端点提供 liveness 探针,如果我的下游依赖项不可用/不可访问,我不应返回失败(因为Kubernetes重新启动我的微服务Pod无法解决)依赖性!)。
但是在REST端点中,是否应该检查我的 准备就绪 探针?我宁愿做一些基本的事情,但是如果我需要做更多的检查,那我会的。
@RequestMapping("/health")
public String getHealth() {
return "OK";
}
答案 0 :(得分:1)
假设,您的spring-boot应用程序的活跃度(从用户的角度来看)不需要依赖服务,那么检查“就绪探针”状态的想法是正确的。
由于从属应用程序是REST服务,因此您可以公开一个HTTP / HTTPS端点,以供 readiness probe 检查。并保留活动探针的spring-boot应用程序的运行状况检查(或类似)端点。
但是,请注意,如果从属服务没有响应,则运行第一个微服务(Spring-boot应用程序)的pod可能会变得无响应。
因此,提供正确的超时(initialDelays和periodDelay)以及成功和失败阈值可帮助您缓解这种无响应状态。例如;
readinessProbe:
httpGet: # make an HTTP request to dependent's health/readiness endpoint
port: <port>
path: /health
scheme: HTTP
initialDelaySeconds: 10 # how long to wait before checking
periodSeconds: 10 # how long to wait between checks
successThreshold: 1 # how many successes to hit before accepting
failureThreshold: 3 # how many failures to accept before failing
timeoutSeconds: 15
一篇好文章:https://itnext.io/kubernetes-readiness-probe-83f8a06d33d3
答案 1 :(得分:-1)
理想情况下,您应该考虑所有参与请求处理的应用程序组件。它可以是后端,某些配置,作业状态等。目标非常简单,如果就绪探测成功,则您的应用程序已准备就绪,可以满足任何请求。
因此,设计就绪性探针会相应地进行,但始终使其尽可能轻便,并且不应消耗过多的资源。