欢迎访问个人GitHub
关于《SpringBoot-2.3容器化技术》系列
《SpringBoot-2.3容器化技术》系列,旨在和你们一块儿学习实践2.3版本带来的最新容器化技术,让我们的Java应用更加适应容器化环境,在云计算时代依旧紧跟主流,保持竞争力;
全系列文章分为主题和辅助两部分,主题部分以下:git
- 《体验SpringBoot(2.3)应用制做Docker镜像(官方方案)》;
- 《详解SpringBoot(2.3)应用制做Docker镜像(官方方案)》;
- 《掌握SpringBoot-2.3的容器探针:基础篇》;
- 《掌握SpringBoot-2.3的容器探针:深刻篇》;
- 《掌握SpringBoot-2.3的容器探针:实战篇》;
- 《SpringBoot-2.3镜像方案为何要作多个layer》;
- 《设置非root帐号不用sudo直接执行docker命令》;
- 《开发阶段,将SpringBoot应用快速部署到K8S》;
SpringBoot容器探针系列文章简介
为了让应用更适应容器化环境,SpringBoot2.3版本推出了新的探针技术,《掌握SpringBoot-2.3的容器探针》系列旨在与您一块儿学习和实践这些新技术,分为三个阶段:程序员
- 基础篇:即本文,对容器探针的相关知识点进行梳理和学习;
- 深刻篇:继续深刻学习探针相关的知识点;
- 实战篇:将springboot应用部署在kubernetes环境,并使用最新的探针技术;
探针特性的官方信息
- 以下图红框所示,2.3版本的容器探针特性早在预览版(v2.3.0.M4)就已经发布:

- 现在v2.3.0.RELEASE已发布,能够放心的学习和使用该特性了,首先把基础知识点列出来,确保准备工做OK;
知识点整理
下面是掌握探针技术所需的基础知识,也是本文的主要内容:github
- kubernetes的存活探针<font color="blue">livenessProbe</font>;
- kubernetes的就绪探针<font color="blue">readinessProbe</font>;
- SpringBoot的<font color="blue">actuator</font>;
接下来逐个学习,有了这些知识积累,咱们才能更好的阅读官方资料,开发适合本身业务场景的探针;spring
kubernetes的存活探针livenessProbe
- kubernetes的探针涉及的内容是不少的,这里只提和SpringBoot相关的部分;
- kubelet 使用存活探针<font color="blue">livenessProbe</font>来知道何时要重启容器;
- 下图是kubernetes官网的存活探针示例,几个关键参数已经作了详细说明:

- 可见若是咱们的SpringBoot应用发布到kubernetes环境,只要应用还健康,livenessProbe对应的地址就要能响应200-400的返回码;
kubernetes的就绪探针readinessProbe
- 有时候,应用程序会暂时性的不能提供通讯服务。例如,应用程序在启动时可能须要加载很大的数据或配置文件,或是启动后要依赖等待外部服务。在这种状况下,既不想杀死应用程序,也不想给它发送请求。Kubernetes 提供了就绪探测器来发现并缓解这些状况。容器所在 Pod 上报还未就绪的信息,而且不接受经过 Kubernetes Service 的流量。
- 就绪探测器的配置和存活探测器的配置类似,惟一区别就是要使用 <font color="blue">readinessProbe</font>字段,而不是 livenessProbe 字段;
- 简单的说,就绪探针正常的容器,k8s就认为是能够对外提供服务的,相应的请求也会被调度到该容器上来;
SpringBoot的actuator
- 简单来讲,actuator是用来帮助用户监控和操做SprinBoot应用的,这些监控和操做均可以经过http请求实现,以下图,http://localhost:8080/actuator/health 地址返回的是应用的健康状态:

- 下面是经常使用的actuator地址,访问不一样的地址能够获得不一样的信息:

- 在SpringBoot-2.3版本中,actuator新增了两个地址:<font color="red">/actuator/health/liveness</font>和<font color="red">/actuator/health/readiness</font>,前者用做kubernetes的<font color="blue">存活探针</font>,后者用做kubernetes的<font color="blue">就绪探针</font>;
画外音:SpringBoot的探针技术就这点东西?
- 文章看到这里,您可能以为索然无味:所谓的容器探针特性如此简单,新增两个actuator地址留给kubernetes的存活和就绪探针用,只要这两个地址响应正常,kubernetes就断定该容器正常;
- 大多数时候,上述结论并没有不妥,SpringBoot官方给出的推荐配置以下图,咱们只要照搬便可:

- 冷静下来仔细思考,有三个问题彷佛没有解决:
- 首先,SpringBoot为kubernetes提供了两个actuator项,可是那些并未部署在kubernetes的SringBoot应用呢?用不上这两项也要对外暴露这两个服务地址吗?
- 其次,就绪探针是何时开始返回200返回码的?应用启动阶段,业务服务可能须要一段时间才能正常工做,就绪探针要是提早返回了200,那k8s就认为容器能够正常工做了,这时候把外部请求调度过来是没法正常响应的,因此搞清楚就绪探针的状态变化逻辑很重要;
- 最后,也是最重要的一点:有的场景下,例如外部依赖服务异常、本地全局异常等状况下,业务不想对外提供服务,等到问题解决后业务又能够对外提供服务了,若是此时咱们能本身写代码控制就绪探针的返回码,那就作到了控制kubernetes是否将外部请求调度到此容器上,这但是个很实用的功能!
还须要继续深刻
面对上述三个问题您是否会感慨:看似简单的容器探针技术,想要用好还需掌握更多知识,接下来的文章中我们一块儿努力吧,从知识覆盖到实战操练,终究会掌握这门实用技术;docker
欢迎关注个人公众号:程序员欣宸

https://github.com/zq2599/blog_demosspringboot