请参考官方 Kubernetes 文档:
在 Kubernetes 中,健康检查(也称为探针)是确保应用高可用性和弹性的关键机制。Kubernetes 使用这些探针来判断 Pod 的健康状态和就绪状态,从而使系统能够采取适当的措施,例如重启容器或路由流量。没有适当的健康检查,Kubernetes 无法可靠地管理应用的生命周期,可能导致服务性能下降或中断。
Kubernetes 提供三种类型的探针:
livenessProbe
:检测容器是否仍在运行。如果存活探针失败,Kubernetes 会根据重启策略终止并重启 Pod。readinessProbe
:检测容器是否准备好提供服务。如果就绪探针失败,Endpoint Controller 会将该 Pod 从 Service 的 Endpoint 列表中移除,直到探针成功。startupProbe
:专门检查应用是否已成功启动。存活和就绪探针在启动探针成功之前不会执行。对于启动时间较长的应用非常有用。正确配置这些探针对于构建健壮且自愈的 Kubernetes 应用至关重要。
Kubernetes 支持三种实现探针的机制:
GET
操作对 Pod 的 IP 地址的指定端口和路径执行 HTTP
GET
请求。如果响应码在 200 到 399 之间,则探针视为成功。
使用场景:Web 服务器、REST API 或任何暴露 HTTP 端点的应用。
示例:
exec
操作在容器内执行指定命令。如果命令以状态码 0 退出,则探针成功。
使用场景:无 HTTP 端点的应用,检查内部应用状态,或执行需要特定工具的复杂健康检查。
示例:
Socket
操作尝试在容器的 IP 地址和指定端口打开 TCP 套接字。如果能建立 TCP 连接,则探针成功。
使用场景:数据库、消息队列或任何通过 TCP 端口通信但可能没有 HTTP 端点的应用。
示例:
参数 | 描述 |
---|---|
Initial Delay | initialDelaySeconds :探针开始前的宽限时间(秒)。默认值:300 。 |
Period | periodSeconds :探针间隔(1-120秒)。默认值:60 。 |
Timeout | timeoutSeconds :探针超时时长(1-300秒)。默认值:30 。 |
Success Threshold | successThreshold :标记健康所需的最小连续成功次数。默认值:0 。 |
Failure Threshold | failureThreshold :触发动作的最大连续失败次数:- 0 :禁用基于失败的动作- 默认: 5 次失败 → 容器重启。 |
参数 | 适用协议 | 描述 |
---|---|---|
Protocol | HTTP/HTTPS | 健康检查协议 |
Port | HTTP/HTTPS/TCP | 探测目标容器端口 |
Path | HTTP/HTTPS | 端点路径(例如 /healthz ) |
HTTP Headers | HTTP/HTTPS | 自定义头部(添加键值对) |
Command | EXEC | 容器内执行的检查命令(例如 sh -c "curl -I localhost:8080 | grep OK" )。注意:转义特殊字符并测试命令有效性。 |
当 Pod 状态显示与探针相关的问题时,可按以下步骤排查:
查找与 LivenessProbe failed、ReadinessProbe failed 或 StartupProbe failed 相关的事件。这些事件通常包含具体错误信息(如连接拒绝、HTTP 500 错误、命令退出码等)。
检查应用日志,查看探针失败时是否有错误或警告。应用可能记录了健康检查端点未正确响应的原因。
kubectl exec -it <pod-name> -- curl <probe-path>:<probe-port>
或容器内的 wget
查看实际响应。kubectl exec -it <pod-name> -- <command-from-probe>
,检查退出码和输出。nc
(netcat)或 telnet
测试 TCP 连接:kubectl exec -it <another-pod> -- nc -vz <pod-ip> <probe-port>
。kubectl top pod <pod-name>
),并考虑调整 resources
限制/请求。