Kubernetes 中的 Pod 探针:监控容器运行状态的核心机制
在 Kubernetes(简称 K8s)中,Pod 可以通过三种类型的探针(Probe)来监控容器的运行状态,确保应用程序的健康和服务稳定性。这三种探针分别是:
1. 存活探针(Liveness Probe)
- 功能:
检查容器是否仍然处于正常运行状态。如果 Liveness 探针多次失败(未通过健康检查),Kubernetes 会认为容器已经发生不可恢复的错误,并通过 kubelet 终止并重启该容器。 - 作用:
- 确保应用程序在卡死或进入不稳定状态时能够自动恢复。
- 防止无法自行恢复的容器持续占用系统资源。
- 典型场景:
- 服务因为死锁或逻辑错误导致不再响应。
- 应用程序在运行过程中出现无法修复的内部异常。
示例:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 5
2. 就绪探针(Readiness Probe)
- 功能:
检查容器是否已经准备好接收请求流量。如果探针未通过,Kubernetes 会将 Pod 从 Service 的负载均衡器(Endpoints 列表)中移除,确保流量不会路由到该 Pod。 - 作用:
- 确保只有成功完成初始化或满足特定条件的容器才能对外提供服务。
- 避免向未完全准备好的容器发送请求。
- 典型场景:
- 应用程序需要完成初始化过程(如加载配置、连接数据库)才能提供服务。
- 后台任务需要预热缓存或加载资源。
示例:
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
3. 启动探针(Startup Probe)
- 功能:
检测容器应用是否已完成启动过程。
如果配置了 Startup 探针,它会在应用完成启动之前替代 Liveness 和 Readiness 探针的功能。只有当 Startup 探针成功通过后,其他探针才会开始生效。 - 作用:
- 防止应用程序在长时间启动过程中被误判为健康检查失败。
- 提供更宽松的时间窗口,允许启动较慢的应用有足够时间完成初始化。
- 典型场景:
- 复杂的应用程序(如大型服务或遗留系统)需要较长时间完成初始化。
- 服务的启动时间可能受环境或负载影响。
示例:
startupProbe:
exec:
command:
- cat
- /tmp/ready
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 30
探针的检查方式
Kubernetes 的探针支持以下三种方式进行健康检查:
-
HTTP GET
通过 HTTP 请求检查服务的特定端点是否返回成功状态码(通常为 200)。
示例:httpGet: path: /healthz port: 8080
-
TCP Socket
通过尝试建立 TCP 连接检查容器是否响应。
示例:tcpSocket: port: 8080
-
命令执行(Exec)
在容器内执行命令,通过其退出码(0 为成功)判断健康状态。
示例:exec: command: - cat - /tmp/healthy
参数配置
探针的行为可以通过以下参数进行精确控制:
initialDelaySeconds
:容器启动后等待多久开始进行第一次探测。periodSeconds
:探测间隔的时间。timeoutSeconds
:每次探测的超时时间。successThreshold
:判断为成功所需的连续成功次数(适用于 Readiness 和 Startup)。failureThreshold
:判断为失败所需的连续失败次数。
探针的协同作用
- 启动探针优先级最高:
在 Startup 探针通过之前,Liveness 和 Readiness 探针不会生效。 - Liveness 和 Readiness 的区别:
- Liveness 关注应用是否“活着”并重启失败的容器。
- Readiness 关注应用是否“准备好”接收流量。
- 综合使用:
为复杂应用配置多个探针,可以确保应用的启动、运行和服务过程都受到有效监控。
总结
探针在 Kubernetes 中扮演重要角色:
- Liveness Probe 保证容器在故障时能够自动恢复。
- Readiness Probe 确保只有准备好的容器参与服务。
- Startup Probe 避免长时间初始化的容器被误判。
合理配置这些探针,可以有效提高应用的可用性和稳定性,确保 Kubernetes 集群中的工作负载始终按预期运行。
标签:容器,Liveness,Kubernetes,Readiness,区别,探针,Pod,Probe From: https://www.cnblogs.com/leojazz/p/18686416