探针介绍
在 Kubernetes 中,探针是一种用于检测容器运行状态和健康状况的机制。有三种类型的探针:存活探针(Liveness Probe)、就绪探针(Readiness Probe)和启动探针(Startup Probe)。这三种探针可以根据应用程序的需要进行配置,以提高容器的可靠性和稳定性。例如,可以根据应用程序的特点选择不同的探针类型、检测方式和超时时间,从而确保应用程序始终处于健康状态。
探针类型
startupProbe
在K8s1.16+版本之后引入的新的探测机制;startupProbe 是一种用于检测容器是否已经启动并准备好接收流量的探针。与就绪探针不同,startupProbe 只会在容器启动时运行一次。
如果容器无法响应 startupProbe,则 Kubernetes 将认为该容器启动失败,将停止该容器的运行并进行重启。startupProbe 通常通过发送 HTTP 请求或执行命令的方式进行检测,并根据返回结果来判断容器的状态。
使用 startupProbe 可以帮助用户确保容器启动后可以正常运行,并及时发现和处理启动过程中可能出现的问题。例如,在容器启动时可能需要进行一些初始化操作、加载配置文件等,如果这些操作失败,则可能导致后续的应用程序故障。通过使用 startupProbe,用户可以及时检测到这些问题,并进行相应的修复和调整,从而提高容器的可靠性和稳定性。
需要注意的是,startupProbe 不适用于长时间运行的容器,因为它只会在容器启动时运行一次。对于长时间运行的容器,应该使用存活探针(liveness probe)和就绪探针(readiness probe)来确保容器的健康状态。
readinessProbe
readinessProbe 是一种用于检测容器是否已经准备好接收流量的探针。如果容器无法响应 readinessProbe,则 Kubernetes 将等待容器变为可用状态后再将流量转发到该容器。
readinessProbe 通常通过发送 HTTP 请求或执行命令的方式进行检测,并根据返回结果来判断容器的状态。例如,可以向容器发送一个 HTTP GET 请求,并检查返回的状态码是否为 200,以确保容器已经成功启动并准备好接收流量。
使用 readinessProbe 可以帮助用户确保容器已经充分准备好接收流量,并避免将流量转发到尚未准备好的容器。这对于提高应用程序的可靠性和稳定性非常重要,尤其是在容器扩展和缩小、节点故障和网络问题等情况下。
需要注意的是,readinessProbe 应该与存活探针(liveness probe)配合使用,以确保容器始终处于健康状态。例如,如果容器在接收流量时出现故障,则应该立即停止容器的运行并进行重启,从而避免可能的数据损失和服务中断。
livenessProbe
livenessProbe 是一种用于检测容器是否处于正常运行状态的探针。如果容器无法响应 livenessProbe,则 Kubernetes 将自动重启容器。
livenessProbe 通常通过发送 HTTP 请求或执行命令的方式进行检测,并根据返回结果来判断容器的状态。例如,可以向容器发送一个 HTTP GET 请求,并检查返回的状态码是否为 200,以确保容器正在正常运行。
使用 livenessProbe 可以帮助用户及时发现和处理容器运行中可能出现的问题,从而避免整个应用程序因为某个容器故障而中断。例如,如果容器因为内存泄漏、死锁等问题导致无法响应请求,则 livenessProbe 可以检测到这些问题并自动重启容器,从而恢复容器功能并提高整个应用程序的可靠性和稳定性。
需要注意的是,livenessProbe 应该与就绪探针(readiness probe)配合使用,以确保容器不仅处于正常运行状态,还已经准备好接收流量。如果容器虽然处于正常运行状态
问题抛出:在一个 Pod 中,如果只配置 livenessProbe 或只配置 readinessProbe,可能会发生什么情况?
如果在一个Pod中只配置了 livenessProbe,而
相反地,如果在一个 Pod 中只配置了 readinessProbe,而没有配置 livenessProbe,则 Kubernetes 将在 Pod 启动后立即将其标记为 ready。这意味着 Pod 可以接收网络流量,并正常工作,但是如果 Pod 运行时出现故障或无响应,Kubernetes 不会自动重启或替换该 Pod。
因此,最佳实践是同时配置 livenessProbe 和 readinessProbe,以确保 Kubernetes及时检测和处理任何运行问题,并维护集群的健康状态。
检测方式
ExecAction
ExecAction 是 Kubernetes 中 livenessProbe、readinessProbe 和 startupProbe 的一种执行操作方式。当 Probe 检测到容器需要重启或者不可用时,可以通过 ExecAction 执行一条命令来尝试修复容器。
ExecAction 可以在 Pod 运行时执行一个命令,并且可以将命令的输出写入到容器日志中。例如,可以使用 ExecAction 来检查容器内部某个服务是否正在运行,或者检查容器的某些配置是否正确。如果该命令返回 0 ,则认为探针成功,否则探针失败,并根据 Probe 的配置将容器重启或标记为不可用。
- 以下是一个使用 ExecAction 的示例 yaml 配置:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx
image: nginx
readinessProbe:
exec:
command:
- cat
- /var/www/html/index.html
initialDelaySeconds: 10
periodSeconds: 5
在上面的配置中,readinessProbe 使用了 ExecAction 命令
cat /var/www/html/index.html来检查容器是否已经准备好接收流量。如果该命令返回 0,则认为容器已经准备好,否则容器将被标记为不可用
TCPSocketAction
TCPSocketAction 是 Kubernetes 中 livenessProbe、readinessProbe 和 startupProbe 的一种执行操作方式。当 Probe 检测到容器需要重启或者不可用时,可以通过 TCPSocketAction 尝试连接容器的 TCP 端口来检查容器是否正常。
TCPSocketAction 会尝试在容器内部建立一个 TCP 连接,并等待一段时间来检查连接是否成功。如果连接成功,则认为探针成功,否则探针失败,并根据 Probe 的配置将容器重启或标记为不可用。
- 以下是一个使用 TCPSocketAction 的示例 yaml 配置:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
在上面的配置中,readinessProbe 使用了 TCPSocketAction 来检查容器的 8080 端口是否已经准备好接收流量。如果尝试连接成功,则认为容器已经准备好,否则容器将被标记为不可用。
HTTPGetAction
HTTPGetAction 是 Kubernetes 中 livenessProbe、readinessProbe 和 startupProbe 的一种执行操作方式。当 Probe 检测到容器需要重启或者不可用时,可以通过 HTTPGetAction 发送一个 HTTP GET 请求来检查容器是否正常。
HTTPGetAction 会尝试在容器内部向指定的 URL 发送一个 HTTP GET 请求,并等待一段时间来检查响应是否成功。如果响应的状态码在 successThreshold 范围内,则认为探针成功,否则探针失败,并根据 Probe 的配置将容器重启或标记为不可用。
- 以下是一个使用 HTTPGetAction 的示例 yaml 配置:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
readinessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
successThreshold: 1
在上面的配置中,readinessProbe 使用了 HTTPGetAction 来检查容器的 /healthz 路径是否已经准备好接收流量。如果响应的状态码在 successThreshold 范围内,则认为容器已经准备好,否则容器将被标记为不可用。
说明:SpringCloud2原生支持TCPSocket和HTTPGet
探针检测参数
| 参数 | 介绍 |
| initialDelaySeconds | 初始化时间,单位秒 |
| periodSeconds | 检测间隔,单位秒 |
| successThreshold | 检测成功为多少次表示就绪 |
| failureThreshold | 检测失败多少次表示未就绪 |
| timeoutSeconds | 超时时间,单位秒 |
如果本文对您有所帮助,请点赞并留言支持,这将是对我们最大的鼓励和肯定!感谢您的阅读。

必须 注册 为本站用户, 登录 后才可以发表评论!