如何深入掌握SpringBoot-2.3的容器探针

发布时间:2021-10-12 13:49:22 作者:柒染
来源:亿速云 阅读:186

本篇文章给大家分享的是有关如何深入掌握SpringBoot-2.3的容器探针,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

  1. 当我们把应用部署到kubernetes环境时,这些知识让我们能配置出官方推荐的探针方案,如下图:

如何深入掌握SpringBoot-2.3的容器探针

  1. 尽管上述配置已经可以覆盖多数场景,依然有三个问题未解决:

为了解决上述问题而作,这些问题解决后才能用好探针技术,让它在容器环境带来更大价值;

关键知识点

解决上述问题的关键集中在以下几个知识点:

  1. SpringBoot对容器环境的判断;

  2. SpringBoot对状态定义;

  3. 获取状态;

  4. 监听状态;

  5. 修改状态;

接下来挨个学习这些知识点;

SpringBoot对容器环境的判断

  1. 官方文档如下图所示,SpringBoot判断是否是kubernetes环境的逻辑很简单:是否有<font color="blue">_SERVICE_HOST</font>和<font color="blue">_SERVICE_PORT</font>这两个环境变量: 如何深入掌握SpringBoot-2.3的容器探针

  2. 熟悉kubernetes的读者看到<font color="blue">_SERVICE_HOST"</font> 和<font color="blue">_SERVICE_PORT</font>,应该会想起<font color="red">KUBERNETES_SERVICE_HOST</font>和<font color="blue">KUBERNETES_SERVICE_PORT</font>,这是k8s给pod中配置的环境变量,看来SpringBoot也是针对k8s的这个规则来判定是否是容器环境的(如果将来k8s的某个版本不给pod设置这个环境变量,那些原本可以正常运行的pod岂不是有危险了?);

  3. 接下来通过实践来验证上述规则是否有效;

  4. 创建一个SpringBoot-2.3.0.RELEASE的应用,其pom.xml中的parent信息如下:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.3.0.RELEASE</version>
  <relativePath/>
</parent>
  1. 增加actuator依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 启动该应用,浏览器访问:<font color="blue">http://localhost:8080/actuator/health/liveness</font>,返回404错误:

如何深入掌握SpringBoot-2.3的容器探针

  1. 以上返回是符合预期的,因为此时并非在kubernetes环境,接下来将"<font color="blue">_SERVICE_HOST</font> 和<font color="blue">_SERVICE_PORT</font>这两个环境变量加入应用进程,看看是否有变化;

  2. 如下图,编辑启动类的配置信息:

如何深入掌握SpringBoot-2.3的容器探针

  1. 点击下图红框位置,即可进入编辑环境变量的窗口:

如何深入掌握SpringBoot-2.3的容器探针

  1. 新的窗口中,操作如下图红框中所示,新增了两个环境变量:

如何深入掌握SpringBoot-2.3的容器探针

  1. 再次运行程序,这次返回的状态码是200:

如何深入掌握SpringBoot-2.3的容器探针

  1. 至此,我们弄明白了SpringBoot是否开启探针的逻辑,即应用是否运行在容器环境,而是否是容器环境的判定逻辑则是<font color="blue">_SERVICE_HOST</font>和<font color="blue">_SERVICE_PORT</font>这两个环境变量是否存在;

非kubernetes环境开启探针

<font color="blue">/actuator/health/liveness</font>和<font color="blue">/actuator/health/readiness</font>在kubernetes环境才会开启,但是一般情况下,在开发阶段SpringBoot应用可能运行在自己的电脑上,此时如果想查看这两个接口的返回值有两种方式:

第一种,就是前面提到的添加<font color="blue">_SERVICE_HOST</font>和<font color="blue">_SERVICE_PORT</font>这两个环境变量,让SpringBoot以为当前环境是kubernetes环境;

第二种,是按照官方指导添加属性,如下图红框所示:

如何深入掌握SpringBoot-2.3的容器探针

SpringBoot对探针相关状态定义

  1. 首先要弄清楚有哪些状态,源码是最准确的;

  2. 如下图,存活探针一共有两种状态:<font color="blue">CORRECT</font>表示应用运行中并且内部状态正常,<font color="blue">BROKEN</font>表示应用运行中并且内部是BROKEN状态(请原谅我的英语水平)

如何深入掌握SpringBoot-2.3的容器探针

  1. 如下图,就绪探针一共有两种状态:<font color="blue">ACCEPTING_TRAFFIC</font>表示应用可以对外提供服务,<font color="blue">REFUSING_TRAFFIC</font>表示应用无法对外提供服务;

如何深入掌握SpringBoot-2.3的容器探针

  1. 另外,上图的since注解显示这两个枚举是从<font color="red">2.3.0</font>版本开始生效的;

  2. 小小八卦一下,上述两个枚举的作者<font color="blue">Brian Clozel</font>,坐标法国里昂,目前在sringboot的提交次数排第8名:

如何深入掌握SpringBoot-2.3的容器探针

  1. 在SpringBoot启动过程中,应用、存活探针、就绪探针三者状态对应关系如下图:

如何深入掌握SpringBoot-2.3的容器探针

  1. 在SpringBoot停止过程中,应用、存活探针、就绪探针三者状态对应关系如下图:

如何深入掌握SpringBoot-2.3的容器探针

获取状态

如果业务应用想获取当前的存活和就绪状态,将ApplicationAvailability接口autowire进来即可,下一篇《实战篇》会有详细的使用方式,这里看下关键代码:

如何深入掌握SpringBoot-2.3的容器探针

监听状态

得益于Spring完整的事件发布和订阅机制,业务应用通过EventListener注解就能监听到存活和就绪状态的变化,在EventListener注解修饰的方法中写入必要的业务代码即可实现状态监听,下一篇《实战篇》会有详细的使用方式,这里看下关键代码:

如何深入掌握SpringBoot-2.3的容器探针

修改状态

  1. 修改状态,尤其是就绪状态,这应该是我们最关注的功能了,在某些业务场景下,应用无法对外提供服务,这时候我们希望K8S不要将外部请求调度到这里,如果K8S通过就绪探针收到返回码非200,就不再将请求调度到这个pod上;

  2. 下一篇《实战篇》会有详细的代码介绍,这里给出关键代码作为参考:

如何深入掌握SpringBoot-2.3的容器探针

请注意

重要的事情一定要强调:咱们修改状态的最终目的,不是为了取得applicationAvailability.getReadinessState()返回新的枚举对象,而是要<font color="red">改变/actuator/health/readiness接口的返回码(就绪是200,未就绪是503)</font>,这是kubernetes的探针规则要用到的。

以上就是如何深入掌握SpringBoot-2.3的容器探针,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. 云计算人才需要掌握什么 怎么学好Docker容器
  2. 深入掌握MySQL的知识

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springboot

上一篇:file_get_contents函数为什么抓取内容失败

下一篇:2021最新版的Tomcat面试题有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》