在 Kubernetes 中,主要有三种类型的探针(Probes),用于检测容器的状态:
1.存活探针(Liveness Probes):
用来检测容器是否存活,即容器是否仍在运行。如果存活探针失败,Kubernetes 会根据容器的重启策略来重启容器。
2.就绪探针(Readiness Probes):
用来检测容器是否已经准备好接收流量。如果就绪探针失败,Kubernetes 会阻止将新的流量发送到该容器,但不会重启容器。
3.启动探针(Startup Probes):
用来检测容器内的应用程序是否在启动期间已经可用。这是 Kubernetes 1.12 版本引入的特性。如果启动探针失败,Kubernetes 会认为容器没有成功启动,并根据重启策略来重启容器。
三者结合使用的顺序是:启动探针——>存活探针——>就绪探针
每种探针都可以通过以下三种方式来实现:
ExecAction:
在容器内执行一个命令,根据命令的退出状态码来判断容器状态。
TCPSocketAction:
对容器的 IP 地址和端口进行 TCP 检查,如果能够建立连接,则认为容器状态正常。
HTTPGetAction:
向容器的 IP 地址和端口发送 HTTP GET 请求,根据响应状态码来判断容器状态。
每种探针都可以配置以下探针配置参数:
initialDelaySeconds:容器启动后等待多少秒再开始执行探针。
periodSeconds:探针的执行频率。
timeoutSeconds:探针超时时间。
successThreshold:探测成功时的阈值。
failureThreshold:探测失败时的阈值。
各个探针示例:
启动探针(Startup Probes)
应用场景:
检测应用程序是否在启动过程中已经可用。
例如,应用程序可能需要较长时间来初始化,在此期间不应接收流量。
startupProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 30
periodSeconds: 10
这个配置表示在容器启动后,每 10 秒发送一次 HTTP GET 请求到 http://:8080/health。如果在连续 30 次尝试中都失败,Kubernetes 将重启容器。这个探针可以防止在应用程序完全启动之前接收流量。
存活探针(Liveness Probes)
应用场景:
检测应用程序是否仍在运行,但未响应。
例如,应用程序可能因为某些错误而挂起或停止响应请求。
livenessProbe:
exec:
command: ["cat", "/tmp/health"]
initialDelaySeconds: 15
periodSeconds: 20
这个配置表示在容器启动 15 秒后,每 20 秒执行一次 cat /tmp/health 命令。如果命令返回非 0 状态码,Kubernetes 将重启容器。
就绪探针(Readiness Probes)
应用场景:
确定应用程序是否已经完全启动并准备好接收请求。
例如,应用程序可能需要加载大量数据或完成初始化操作。
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
这个配置表示在容器启动 5 秒后,每 10 秒发送一次 HTTP GET 请求到 http://:8080/ready。如果请求返回的 HTTP 状态码不是 200-399 范围内的值,Kubernetes 将不会向该容器发送流量。