在 Kubernetes (K8s) 中,Pod 的健康检查主要通过两种类型的探针实现:Liveness Probe 和 Readiness Probe。
- Liveness Probe(存活探针):
- 用于检测容器是否处于正常运行状态。如果Liveness Probe失败,则表明容器已不再健康,并且kubelet会采取相应行动,通常是重启容器。
- Liveness Probe可以通过以下几种方式执行:
ExecAction
:在容器内执行指定的命令,根据命令的退出码判断容器是否健康。HTTPGetAction
:向容器暴露的HTTP端点发送GET请求,根据响应的状态码和延迟判断容器是否健康。TCPSocketAction
:尝试连接到容器监听的特定TCP端口,根据连接成功与否来判断容器是否仍在提供服务。
- Readiness Probe(就绪探针):
- 用于确定容器是否准备好为流量提供服务。只有当Readiness Probe成功时,容器才会被视为“Ready”状态,并由Service等资源开始路由流量给该Pod。
- Readiness Probe同样支持与Liveness Probe相同的执行方式:
ExecAction
HTTPGetAction
TCPSocketAction
此外,还有一个不太常用的启动Probe:
- Startup Probe(启动探针):
- 从Kubernetes v1.16版本开始引入,用于探测容器应用启动初期是否已经准备就绪,以便于减少因应用程序初始化时间过长导致的不必要的重启。
- 启动探针也支持上述三种执行方式,一旦启动探针成功,kubelet将停止执行Liveness和Readiness探针,直到启动探针失败。
综上所述,配置这些探针时,需要在Pod的定义中为每个容器设置相应的livenessProbe
、readinessProbe
和/或startupProbe
字段,并详细指定其执行动作类型、路径、端口、超时时间、重试次数等参数。