Kubernetes 中的探针(Probes)用于检测容器的健康状态或就绪状态,确保应用在运行时的可靠性。Kubernetes 提供三种探针类型,它们的核心区别在于用途和失败后的处理逻辑。以下是它们的详细说明和对比:
1. 启动探针(Startup Probe)
-
用途
检测容器是否成功启动。- 适用于启动时间较长的应用(如 Java 服务、复杂初始化逻辑的应用)。
- 防止存活探针(Liveness Probe)在应用启动完成前误判容器为不健康。
-
关键行为
- 仅在容器启动阶段运行,成功后不再执行。
- 如果失败,容器会被重启(类似 Liveness Probe)。
-
典型场景
startupProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 30 # 允许最多 30 次探测失败
periodSeconds: 5 # 每 5 秒探测一次
2. 存活探针(Liveness Probe)
-
用途
检测容器是否仍在正常运行。- 如果探针失败,Kubernetes 会重启容器(通过
kubelet
)。 - 用于处理运行时死锁、内存泄漏等问题。
- 如果探针失败,Kubernetes 会重启容器(通过
-
关键行为
- 在容器整个生命周期中周期性执行。
- 失败后触发容器重启(可能伴随 Pod 重新调度)。
-
典型场景
livenessProbe: httpGet: path: /health port: 8080 periodSeconds: 10
3. 就绪探针(Readiness Probe)
-
用途
检测容器是否已准备好接收流量。- 如果探针失败,Kubernetes 会从 Service 的 Endpoints 中移除该 Pod,停止向其发送请求。
- 用于等待依赖项(如数据库连接、缓存初始化)完成后再接收流量。
-
关键行为
- 在容器整个生命周期中周期性执行。
- 失败后不会重启容器,仅停止流量转发。
-
典型场景
readinessProbe: tcpSocket: port: 8080
三者的核心差异对比
探针类型 | 设计目的 | 执行阶段 | 失败后果 | 适用场景 |
---|---|---|---|---|
Startup | 确保容器成功启动 | 仅在启动阶段运行一次 | 重启容器 | 启动耗时的应用 |
Liveness | 检测容器是否存活 | 启动后周期性执行 | 重启容器 | 处理运行时崩溃或僵死 |
Readiness | 检测容器是否准备好接收流量 | 启动后周期性执行 | 从 Service 移除流量转发 | 依赖项未就绪时暂停服务流量 |
协作关系
- 启动探针 的优先级最高:
它确保在容器启动期间,存活探针和就绪探针不会生效(直到 StartupProbe 成功)。 - 存活探针和就绪探针并行运行:
- 存活探针负责修复不健康的容器。
- 就绪探针负责流量控制。