Kubernetes 中 Liveness Probe 和 Readiness Probe 详解

本文主要介绍 Kubernetes 中 Liveness Probe 和 Readiness Probe 的概念、用途及配置方法,并给出示例代码。

什么是 Liveness Probe 和 Readiness Probe?

在 Kubernetes 中,Liveness Probe 和 Readiness Probe 都是用于监控应用程序健康状态的机制。两者的区别在于:

  • Liveness Probe:用于判断应用程序是否处于运行状态,即判断容器内的进程是否存活。如果 Liveness Probe 探测失败,则 Kubernetes 认为容器内的应用程序已经不可用,会杀掉该 Pod,并重新拉起一个新的 Pod。
  • Readiness Probe:用于判断应用程序是否已准备好接收客户端请求,即判断容器内的进程是否已经启动并正常运行。如果 Readiness Probe 探测失败,则 Kubernetes 认为容器内的应用程序还不能提供服务,会将该 Pod 从 Service 的 Endpoint 列表中移除,直到应用程序再次准备好接收请求。

通过 Liveness Probe 和 Readiness Probe 机制,Kubernetes 可以自动检测并处理异常情况,提高了应用程序的可用性和稳定性。

如何配置 Liveness Probe 和 Readiness Probe?

在 Kubernetes 的 Deployment 或 StatefulSet 中,可以通过配置 Pod 的 spec.containers[].livenessProbe 和 spec.containers[].readinessProbe 属性来设置 Liveness Probe 和 Readiness Probe。具体的配置参数包括:

  • type:探测方式,支持三种类型:
    • httpGet:通过向容器内的 HTTP 服务发送 GET 请求来探测应用程序的运行状态;需要指定 HTTP 请求的 path、port 和 scheme 等参数。
    • tcpSocket:通过 TCP 连接来探测应用程序的运行状态;需要指定连接的 port 参数。
    • exec:通过执行容器内的命令来探测应用程序的运行状态;需要指定要执行的命令参数。
  • initialDelaySeconds:Pod 启动后多少秒开始进行探测,默认为 0。
  • timeoutSeconds:探测超时时间,如果在该时间内没有响应,则认为探测失败,默认为 1。
  • periodSeconds:探测间隔时间,默认为 10。
  • successThreshold:连续成功探测多少次后认为应用程序已成功运行,默认为 1。
  • failureThreshold:连续失败探测多少次后认为应用程序已经停止运行,默认为 3。

下面给出一个示例,通过 httpGet 方式探测一个 Web 应用的 Liveness Probe 和 Readiness Probe。

在上述示例中,通过 httpGet 方式对根路径进行探测,间隔时间为 10s,探测超时时间为 1s,连续探测 3 次失败后认为应用程序已经停止运行。对于 Readiness Probe,设定了连续成功探测 1 次后即认为应用程序已经准备好接收客户端请求。

总结

通过 Liveness Probe 和 Readiness Probe 机制,Kubernetes 可以自动监控并处理容器内应用程序的健康状态,提高了应用程序的可用性和稳定性。掌握 Liveness Probe 和 Readiness Probe 的用途和配置方法,对于开发和运维人员都具有重要的指导意义。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6530c6387d4982a6eb255f14


纠错
反馈