Kubernetes 中的 Liveness 和 Readiness Probe:健康检查指南

阅读时长 6 分钟读完

在 Kubernetes 中,Liveness 和 Readiness Probe 是两种非常重要的健康检查方式。这两种方式可以帮助我们检测容器是否健康,并且根据检测结果来做出相应的操作。本文将详细介绍 Kubernetes 中的 Liveness 和 Readiness Probe,包括它们的定义、使用场景、配置方法以及示例代码。

Liveness Probe

Liveness Probe 是指在容器运行时检测容器是否存活的一种机制。如果容器不存活,Kubernetes 会自动重启容器。Liveness Probe 通常用于检测容器内部的应用程序是否正常运行。

使用场景

Liveness Probe 适用于以下场景:

  1. 容器内部的应用程序可能会出现崩溃或死锁,需要及时检测容器是否存活,并进行相应的操作。
  2. 容器内部的应用程序需要一些时间来启动,需要等待一段时间后才能进行健康检查。

配置方法

在 Kubernetes 中,我们可以通过在 Pod 的配置文件中添加 Liveness Probe 来启用容器的健康检查。下面是一个示例:

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

在上面的示例中,我们在容器中添加了一个 Liveness Probe。这个 Probe 会每隔 30 秒向容器发送一个 HTTP GET 请求,检查容器的健康状态。如果容器在 10 秒内无法响应请求,Kubernetes 就会认为容器已经死亡,并自动重启容器。

在 Liveness Probe 的配置中,我们可以通过以下参数来自定义 Probe 的行为:

  • httpGet:发送 HTTP GET 请求进行健康检查。
  • exec:执行命令进行健康检查。
  • tcpSocket:检查容器的 TCP 连接是否正常。
  • initialDelaySeconds:容器启动后多少秒开始进行健康检查。
  • periodSeconds:多少秒进行一次健康检查。
  • timeoutSeconds:等待健康检查响应的超时时间。
  • successThreshold:连续多少次健康检查成功后认为容器已经存活。
  • failureThreshold:连续多少次健康检查失败后认为容器已经死亡。

示例代码

下面是一个使用 Liveness Probe 的示例代码:

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

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

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

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

在上面的示例中,我们启动了一个 HTTP 服务器,并且每隔 5 秒输出一条日志作为 Liveness Probe。

Readiness Probe

Readiness Probe 是指在容器启动后检测容器是否准备好接收流量的一种机制。如果容器没有准备好接收流量,Kubernetes 就不会将流量发送到这个容器。Readiness Probe 通常用于检测容器内部的应用程序是否已经完成初始化。

使用场景

Readiness Probe 适用于以下场景:

  1. 容器内部的应用程序需要一些时间来初始化,需要等待一段时间后才能接收流量。
  2. 容器内部的应用程序需要加载一些数据或配置,需要等待数据或配置加载完成后才能接收流量。

配置方法

在 Kubernetes 中,我们可以通过在 Pod 的配置文件中添加 Readiness Probe 来启用容器的健康检查。下面是一个示例:

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

在上面的示例中,我们在容器中添加了一个 Readiness Probe。这个 Probe 会每隔 30 秒向容器发送一个 HTTP GET 请求,检查容器是否准备好接收流量。如果容器在 10 秒内无法响应请求,Kubernetes 就会认为容器没有准备好接收流量,并暂停将流量发送到这个容器。

在 Readiness Probe 的配置中,我们可以通过以下参数来自定义 Probe 的行为:

  • httpGet:发送 HTTP GET 请求进行健康检查。
  • exec:执行命令进行健康检查。
  • tcpSocket:检查容器的 TCP 连接是否正常。
  • initialDelaySeconds:容器启动后多少秒开始进行健康检查。
  • periodSeconds:多少秒进行一次健康检查。
  • timeoutSeconds:等待健康检查响应的超时时间。
  • successThreshold:连续多少次健康检查成功后认为容器已经准备好接收流量。
  • failureThreshold:连续多少次健康检查失败后认为容器没有准备好接收流量。

示例代码

下面是一个使用 Readiness Probe 的示例代码:

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

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

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

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

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

在上面的示例中,我们启动了一个 HTTP 服务器,并且在 10 秒后将 ready 变量设置为 true,表示容器已经准备好接收流量。在接收到请求时,如果 ready 变量为 false,就返回 503 状态码,表示服务不可用。如果 ready 变量为 true,就返回 200 状态码,表示服务可用。在 10 秒后,输出一条日志作为 Readiness Probe。

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

纠错
反馈