Kubernetes 中 Pod 的 livenessProbe 和 readinessProbe 详解

阅读时长 5 分钟读完

在 Kubernetes 中,Pod 是最小的部署单元,它包含一个或多个容器。在实际部署中,我们需要确保容器能够正常运行,以保证应用程序的稳定性。Kubernetes 提供了两个探测机制来确保容器的健康状态:livenessProbe 和 readinessProbe。

livenessProbe

livenessProbe 主要用于检测容器是否存活。如果容器未能通过 livenessProbe 的检测,Kubernetes 将会杀死该容器并重新启动它。livenessProbe 可以通过三种方式进行检测:

HTTP 探测

通过发送 HTTP 请求来检测容器是否存活。以下是一个示例:

在上面的示例中,容器的健康状态将通过发送一个 HTTP GET 请求到端口 8080 上的 /healthz 路径来进行检测。如果容器在初始延迟时间(initialDelaySeconds)之后未能响应请求,Kubernetes 将会认为容器失败,并根据 periodSeconds 指定的时间间隔进行重试。

TCP 探测

通过发送 TCP 请求来检测容器是否存活。以下是一个示例:

在上面的示例中,容器的健康状态将通过发送一个 TCP 请求到端口 8080 来进行检测。如果容器在初始延迟时间(initialDelaySeconds)之后未能响应请求,Kubernetes 将会认为容器失败,并根据 periodSeconds 指定的时间间隔进行重试。

执行命令

通过执行一个命令来检测容器是否存活。以下是一个示例:

在上面的示例中,容器的健康状态将通过执行 cat /tmp/healthy 命令来进行检测。如果命令执行成功,则容器被认为是健康的。如果命令执行失败,则容器被认为是不健康的。

readinessProbe

readinessProbe 主要用于检测容器是否准备好接受流量。如果容器未能通过 readinessProbe 的检测,Kubernetes 将不会将流量路由到该容器。readinessProbe 可以通过与 livenessProbe 相同的三种方式进行检测。

以下是一个示例:

在上面的示例中,容器将通过发送一个 HTTP GET 请求到端口 8080 上的 /ready 路径来进行检测。如果容器在初始延迟时间(initialDelaySeconds)之后未能响应请求,Kubernetes 将不会将流量路由到该容器,并根据 periodSeconds 指定的时间间隔进行重试。

总结

livenessProbe 和 readinessProbe 是 Kubernetes 中非常重要的机制,它们可以确保容器的健康状态,并控制流量的路由。在实际部署中,我们需要根据应用程序的实际情况来选择适当的探测方式,并设置合适的参数。在设置探测时,我们需要考虑容器的启动时间、健康检查的时间间隔、以及容器的重启策略等因素。只有合理地设置探测机制,才能保证应用程序的稳定性。

示例代码

以下是一个 Node.js 应用程序的示例代码,它包含一个 HTTP 服务器和一个 TCP 服务器,以及一个 livenessProbe 和一个 readinessProbe:

-- -------------------- ---- -------
----- ---- - ----------------
----- --- - ---------------

----- ---- - ---------------- -- -----

----- ------ - ----------------------- ---- -- -
  ------------------ - --------------- ------------ ---
  --------------- -----------
---

------------------- -- -- -
  ----------------- ------ --------- -- ---- ----------
---

----- --------- - ------------------------- -- -
  ------------------ -------------
  --------------------
---

---------------------- -- -- -
  ---------------- ------ --------- -- ---- -------
---

-- -------------
-------------- -- -
  -----------------------------
-- ------

-- --------------
--- ----- - ------
------------- -- -
  ----------------------
  ----- - -----
-- ------

----- --------------- - ----------------------- ---- -- -
  -- ------- -
    ------------------ - --------------- ------------ ---
    --------------------
  - ---- -
    ------------------ - --------------- ------------ ---
    ------------ -----------
  -
---

---------------------------- -- -- -
  --------------------------- ------ --------- -- ---- -------
---

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65754b16d2f5e1655de739c6

纠错
反馈