实战指南:在 Kubernetes 上部署 Spring Boot 微服务并实施健康检查

1.引言

在云原生应用开发中,健康检查是确保微服务可靠性和稳定性的关键环节。特别是在 Kubernetes 这样的容器编排平台上,健康检查可以有效地监控和管理应用程序的状态,及时发现并处理潜在的故障情况,从而确保整个系统的正常运行。

而 Spring Boot 作为一种流行的 Java 微服务框架,其在 Kubernetes 上的部署和健康检查配置也是开发者们关注的焦点。本文将针对这一问题,提供一套完整的实战指南,帮助读者深入了解在 Kubernetes 环境中部署 Spring Boot 微服务并实施健康检查的步骤和方法。

2.原理

2.1.Kubernetes健康检查机制

Kubernetes中的健康检查主要使用 就绪性探针`readinessProbe` 、存活性探针 `livenessProbe` 和启动探针 `startupProbe` 来实现,service即为负载均衡,k8s保证 service 后面的 pod 都可用,是k8s中自愈能力的主要手段,基于这两种探测机制,可以实现如下需求:

  • 异常实例自动剔除,并重启新实例。
  • 多种类型探针检测,保证异常pod不接入流量。
  • 不停机部署,更安全的滚动升级。

2.1.1探针类型

针对运行中的容器,`kubelet` 可以选择是否执行以下三种探针,以及如何针对探测结果作出反应:

  • livenessProbe:指示容器是否正在运行。如果存活态探测失败,则 kubelet 会杀死容器, 并且容器将根据其`重启策略`进行重启。如果容器不提供存活探针,则默认状态为 Success。
  • readinessProbe:指示容器是否准备好为请求提供服务。如果就绪态探测失败, 端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址。初始延迟之前的就绪态的状态值默认为 `Failure`。 如果容器不提供就绪态探针,则默认状态为 `Success。`
  • startupProbe:指示容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被 禁用,直到此探针成功为止。如果启动探测失败,kubelet 将杀死容器,而容器依其`重启策略`进行重启。 如果容器没有提供启动探测,则默认状态为 `Success`。

2.1.2.探针结果

每次探测都将获得以下三种结果之一:

  • Success(成功): 容器通过了诊断。
  • Failure(失败): 容器未通过诊断。
  • Unknown(未知): 诊断失败,因此不会采取任何行动。

2.2.Spring Boot对Kubernetes容器探针的支持

Spring Boot 2.3 版本引入了容器探针功能,其中包括了 `/actuator/health/liveness` 和 `/actuator/health/readiness` 这两个健康检查路径。这些路径是为了更好地支持部署在 Kubernetes 等容器环境中的应用程序。

  • `/actuator/health/liveness` 用于存活性检查,确定应用程序是否仍然在运行。
  • `/actuator/health/readiness` 用于就绪性检查,确定应用程序是否准备好接收流量。

Spring Boot Actuator 会自动将这两个路径暴露出来,并通过它们来执行相应的健康检查。这样,当你在 Kubernetes 中部署 Spring Boot 应用程序时,Kubernetes 可以利用这些路径来确定容器是否健康和准备好接收流量。

这种集成简化了在 Kubernetes 中部署 Spring Boot 应用程序的流程,并提高了应用程序的可靠性和可用性。

2.2.1.Spring Boot如何识别k8s环境

Spring Boot 通过检查环境中的 `"*_SERVICE_HOST"` 和 `"*_SERVICE_PORT"` 变量来自动检测 Kubernetes 部署环境。也可以使用 `spring.main.cloud-platform` 配置属性覆盖此检测。Spring Boot 识别到 Kubernetes 环境后,Spring Boot Actuator 会自动将`/actuator/health/liveness` 和 `/actuator/health/readiness`这两个端点暴露出来。

小技巧:本地验证这一特性可以通过手动设置 *KUBERNETES_SERVICE_HOST* 和 *KUBERNETES_SERVICE_PORT* 这两个环境变量来开启存活和就绪检查。访问 *http://localhost:8080/actuator/health/liveness* 响应200状态码时代表已开启。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道一云黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值