龙空技术网

如何让Spring Boot提供K8s的就绪状态探测和活动状态探测

爱科学的卫斯理 365

前言:

现在各位老铁们对“kubernetes readiness probe”大概比较关注,我们都需要剖析一些“kubernetes readiness probe”的相关内容。那么小编也在网摘上搜集了一些关于“kubernetes readiness probe””的相关资讯,希望同学们能喜欢,大家一起来学习一下吧!

使用Kubernetes的主要好处之一是它能够管理和维护在集群中运行的容器,且能保证几乎没有停机时间。

而这个功能主要是k8s通过探测程序的就绪状态(readiness)和活动状态(liveness)来实现对程序的健康进行管理的。

在本文中,我们将使用Spring Boot Actuator为我们提供的端点来为K8s提供活动状态(liveness)和就绪状态(readiness)的探测,我们将探讨如何使用k8s内置的活动状态和就绪状态探测来管理和控制应用程序的运行状况。Spring Boot自2.3版本开始提供了此功能。

什么是就绪状态探测(Readiness Probe)

在 Kubernetes 中,“就绪状态”探测是一种机制,用于确定容器是否准备好接受流量并处理请求。 “就绪状态”探测用于确保一个容器已经准备好可以开始接收请求,通常用于在容器启动后执行一些额外的操作(例如预热缓存、加载配置文件等)。

在 Kubernetes 中,如果所有容器都在正常运行并通过了其各自的“就绪状态”探测,Pod 会被标记为“就绪”。如果一个容器的就绪状态探测失败,它将被标记为“未就绪”,并且 Kubernetes将不会将流量路由到该容器。这可以确保Pod只有在所有容器都准备好处理流量时才能被视为“就绪”,从而提高应用程序的可用性和稳定性。

什么是活动状态探测(Liveness Probe)

在 Kubernetes 中,“活动状态”探测是一种用于检测应用程序是否正在运行的机制。它通过定时向容器发送HTTP请求或执行命令来检查容器内的应用程序是否仍然处于运行状态。如果应用程序没有响应或者返回了错误的响应,那么Kubernetes将视为该容器已经死亡,并且将自动重启容器,以确保应用程序始终处于运行状态。

如何让Spring Boot提供就绪状态和活动状态

Spring Boot Actuator为我们提供的端点来为K8s提供活动状态(liveness)和就绪状态(readiness)的探测。

Spring Boot和K8s

我们只需要在我们的程序里添加依赖:

Gradle:

implementation 'org.springframework.boot:spring-boot-starter-actuator'

Maven:

<dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-actuator</artifactId></dependency>

在application.properties 里开启两个状态:

management.endpoint.health.probes.enabled=true

当使用这个配置后,Spring Boot将会暴露“就绪状态”和“使用状态”两个端点:

/actuator/health/liveness/actuator/health/readiness

本地启动可以访问:

liveness

readiness

修改k8s的deployment.yml :

apiVersion: apps/v1kind: Deploymentmetadata:  name: spring-boot-actuator-endpointspec:  selector:    matchLabels:      app: spring-boot-actuator-endpoint  replicas: 1  template:    metadata:      labels:        app: spring-boot-actuator-endpoint    spec:      containers:        - name: spring-boot-actuator-endpoint          image: spring-boot-actuator-endpoint:0.0.2          imagePullPolicy: IfNotPresent          ports:            - containerPort: 8080          livenessProbe:            httpGet:              path: /actuator/health/liveness # 1              port: 8080            initialDelaySeconds: 20            periodSeconds: 3          readinessProbe:            httpGet:              path: /actuator/health/readiness # 2              port: 8080            initialDelaySeconds: 20 # 3            periodSeconds: 3 # 4
将Spring Boot Actuator的liveness端口填写在此处。将Spring Boot Actuator的readiness端口填写在此处。initialDelaySeconds 在执行第一次探测前应该等待 20秒。periodSeconds 每隔3秒执行一次探测。

当使用新的deployment.yml部署或者更新项目时,k8s就会使用这两个端点对程序的就绪状态和活动状态进行检测。

标签: #kubernetes readiness probe