Pod 的健康检查是如何实现的?

· 约 4 分钟读完 · 第 33 / 192 章

推荐答案

在 Kubernetes 中,Pod 的健康检查是通过 探针(Probes) 实现的。Kubernetes 提供了三种类型的探针:

  1. Liveness Probe(存活探针):用于检测容器是否仍在运行。如果探针失败,Kubernetes 会杀死容器并重新启动它。
  2. Readiness Probe(就绪探针):用于检测容器是否准备好接收流量。如果探针失败,Kubernetes 会从服务的端点中移除该 Pod,直到探针成功。
  3. Startup Probe(启动探针):用于检测容器是否已经启动完成。如果探针失败,Kubernetes 会延迟其他探针的执行,直到启动探针成功。

探针可以通过以下三种方式定义:

  • HTTP GET:向容器的指定端口和路径发送 HTTP GET 请求,根据响应状态码判断健康状态。
  • TCP Socket:尝试与容器的指定端口建立 TCP 连接,成功则视为健康。
  • Exec:在容器内执行指定的命令,根据命令的退出状态码判断健康状态。

本题详细解读

1. Liveness Probe(存活探针)

存活探针用于检测容器是否仍在正常运行。如果容器内的应用程序崩溃或进入死锁状态,存活探针会失败,Kubernetes 会杀死该容器并重新启动它。

示例:

  • httpGet:通过 HTTP GET 请求检查容器的健康状态。
  • path:HTTP 请求的路径。
  • port:HTTP 请求的端口。
  • initialDelaySeconds:容器启动后,探针开始执行前的延迟时间。
  • periodSeconds:探针的执行间隔时间。

2. Readiness Probe(就绪探针)

就绪探针用于检测容器是否准备好接收流量。如果容器内的应用程序需要加载大量数据或执行初始化操作,就绪探针可以确保在容器完全准备好之前不会接收流量。

示例:

  • exec:通过执行命令检查容器的健康状态。
  • command:要执行的命令。
  • initialDelaySeconds:容器启动后,探针开始执行前的延迟时间。
  • periodSeconds:探针的执行间隔时间。

3. Startup Probe(启动探针)

启动探针用于检测容器是否已经启动完成。对于启动时间较长的应用程序,启动探针可以确保在容器完全启动之前不会执行其他探针。

示例:

  • tcpSocket:通过 TCP 连接检查容器的健康状态。
  • port:TCP 连接的端口。
  • failureThreshold:探针失败的最大次数。
  • periodSeconds:探针的执行间隔时间。

4. 探针的通用参数

所有探针都支持以下通用参数:

  • initialDelaySeconds:容器启动后,探针开始执行前的延迟时间。
  • periodSeconds:探针的执行间隔时间。
  • timeoutSeconds:探针的超时时间。
  • successThreshold:探针成功的最小连续成功次数。
  • failureThreshold:探针失败的最大连续失败次数。

通过合理配置这些探针,可以确保 Kubernetes 集群中的 Pod 能够健康运行,并在出现问题时自动恢复。