K8s中的SpringBoot如何给应用配置健康检查?
1.健康检查的必要性
作为业务监控的首要目标,服务的存活性,也就是它的健康状况,成为了重中之重,容器云平台可以根据健康检查策略来对服务实例进行自动重启或从负载均衡中摘除。
2.K8s的健康检查探针
当使用 Kubernetes 作为编排平台时,每个节点中的 kubelet 负责保持该节点中的 pod 健康。例如有时应用程序可能需要一些时间才能接受请求。kubelet 可以确保应用程序仅在准备就绪时接收请求。此外,如果 Pod 的主进程因任何原因崩溃,kubelet 将重新启动容器。为了履行这些职责,Kubernetes 有三个探针:存活探针(livenessProbe)和就绪探针(readinessProbe)和启动探针(startupProbe)。
- 存活状态(liveness):
就应用程序而言,存活状态是指应用程序的状态是否正常。如果存活状态不正常,则意味着应用程序本身已损坏,无法恢复。在Kubernetes中,如果存活探针检测失败,则kubelet将杀死Container,并且Container将接受其重新启动策略。如果容器未提供存活探针,则默认状态为“ Success ”。 - 就绪状态(readiness):
就绪状态,指的是应用程序是否已准备好接受并处理客户端请求。出于任何原因,如果应用程序尚未准备好处理服务请求,则应将其声明为繁忙,直到能够正常响应请求为止。如果“Readiness”状态尚未就绪,则流量不应路由到该实例。
例如,在Kubernetes中,如果就绪探针失败,则 Endpoints 控制器将从与Endpoints中删除Pod的IP地址。设置就绪状态为“Failure”。如果容器未提供就绪探针,则默认状态为“Success”。
kubelet 将使用就绪探针来确定应用程序何时准备好接受请求。更具体地说,当 pod 的所有容器都准备就绪时,它就准备好了。类似地,kubelet 可以通过存活探针检查 pod 是否还活着,存活探针可以帮助 kubelet 知道何时应该重新启动容器。 - 启动探针(startupProbe):这期暂时不讲启动探针,后面再给大家讲解。
3.Springboot配置健康检查
SpringBoot可以通过简单的参数,来开启健康检查,并能够和主流的监控系统集成起来。今天重点说一下Actuator监控管理中的健康检查功能,随时能掌握线上应用的健康状况是非常重要的,尤其是现在流行的容器云平台下的应用,它们的自动恢复和扩容都依赖健康检查功能。
首先需要在pom文件中添加spring-boot-starter-actuator组件,如下图:
其次在配置文件中添加配置监控端点,默认情况下,这些端点是禁用的。
在浏览器或者postman中输入:服务ip:port/actuator/health,看有没有返回结果,如果返回结果为UP(状态码在200到400之间),服务正常;其余返回结果为DOWN,服务异常,如下图: