探针是 Kubernetes 中一种用于检查容器健康状况的机制。它可以定期检查容器是否存活、是否准备好接受流量,以及是否已启动成功。根据检查结果,探针可以采取相应的措施,例如重启容器、将容器从服务端点列表中移除等。
探针的三种化身:
Liveness 探针
如同一位尽职尽责的医生,Liveness 探针会定期检查容器的生命体征。如果容器连续几次检查都失败,Liveness 探针就会判定容器病危,并启动重启程序,让它恢复健康。
Readiness 探针
如同一位餐厅服务员,Readiness 探针会检查容器是否准备好接受服务请求。如果容器还没有准备好,Readiness 探针就会将其从服务列表中移除,避免它提供不佳的服务体验。
Startup 探针
如同一位慈祥的护士,Startup 探针会在容器出生后立即检查它是否健康。如果检查发现问题,Startup 探针会及时通知医生,避免问题进一步恶化。
探针的强大力量:
自动修复故障
当容器出现故障时,探针可以自动将其重启,确保服务始终可用。
精准控制流量
探针可以根据容器的健康状况,将流量路由到健康的容器,避免将流量分配给故障容器,影响用户体验。
保障服务可靠
探针可以帮助我们及早发现并解决容器问题,提高服务可靠性,为用户提供更加稳定的服务。
探针的应用场景:
探针可以应用于各种场景,例如:
Web 应用程序
我们可以使用 Liveness 探针来检查 Web 应用程序是否正常运行,并使用 Readiness 探针来检查应用程序是否已完成初始化并准备好接受请求。
数据库
我们可以使用 Liveness 探针来检查数据库是否正常运行,并使用 Readiness 探针来检查数据库是否已准备好接受连接。
缓存
我们可以使用 Liveness 探针来检查缓存是否正常运行,并使用 Readiness 探针来检查缓存是否已加载完成。
我们可以通过 Pod spec 中的 readinessProbe 和 livenessProbe 字段来配置探针。探针支持多种参数,例如超时时间、失败阈值等,需要根据实际情况进行设置。
探针实战演练:
为了更深入地理解探针的使用,我们来进行一个实战演练。假设我们有一个 Web 应用程序,部署在 Kubernetes 集群中。
我们可以使用以下配置来为应用程序配置 Liveness 和 Readiness 探针:
YAMLapiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: nginx
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: healthz
port: 80
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 1
livenessProbe:
exec:
command: ["/bin/sh", "-c", "curl -f http://localhost:80/healthz || exit 1"]
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 1
配置解析:
readinessProbe Readiness 探针配置,使用 HTTP GET 方法检查容器是否准备好接受请求。 httpGet HTTP GET 探针配置,指定要检查的 URL 路径、端口、超时时间等参数。 initialDelaySeconds 探针首次执行的延迟时间,单位为秒。 periodSeconds 探针执行的周期,单位为秒。 timeoutSeconds 探针执行的超时时间,单位为秒。 livenessProbe Liveness 探针配置,使用 exec 命令检查容器是否存活。 exec Exec 探针配置,指定要执行的命令、超时时间等参数。
实战效果:
当应用程序正常运行时,Readiness 探针和 Liveness 探针都会返回成功状态。

本文作者:李 震(上海新炬中北团队)
本文来源:“IT那活儿”公众号





