Kubernetes:我应该在准备就绪探针的端点中检查哪些系统方面的内容

时间:2019-02-06 14:47:53

标签: kubernetes

我有一个简单的SpringBoot应用程序(实际上是一个基于REST的微服务),正在Kubernetes中进行部署。

它具有一个下游依赖性(另一种基于REST的Web服务)。 我知道对于REST端点提供 liveness 探针,如果我的下游依赖项不可用/不可访问,我不应返回失败(因为Kubernetes重新启动我的微服务Pod无法解决)依赖性!)。

但是在REST端点中,是否应该检查我的 准备就绪 探针?我宁愿做一些基本的事情,但是如果我需要做更多的检查,那我会的。

@RequestMapping("/health")
public String getHealth() {
    return "OK";
}

2 个答案:

答案 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://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#define-readiness-probes

一篇好文章:https://itnext.io/kubernetes-readiness-probe-83f8a06d33d3

答案 1 :(得分:-1)

理想情况下,您应该考虑所有参与请求处理的应用程序组件。它可以是后端,某些配置,作业状态等。目标非常简单,如果就绪探测成功,则您的应用程序已准备就绪,可以满足任何请求。

因此,设计就绪性探针会相应地进行,但始终使其尽可能轻便,并且不应消耗过多的资源。