Kubernetes 集群中的 Pod 健康检查方式详解

阅读时长 8 分钟读完

在 Kubernetes 集群中,Pod 是最小的部署单元。为了确保 Pod 在运行时能够保持健康状态,我们需要对其进行健康检查。本文将详细介绍 Kubernetes 集群中的 Pod 健康检查方式,包括 Liveness Probe 和 Readiness Probe。

Liveness Probe

Liveness Probe 是 Kubernetes 集群中的一种健康检查机制,用于检测 Pod 是否处于运行状态。如果 Liveness Probe 检测到 Pod 处于错误状态,Kubernetes 将会自动重启该 Pod。

Liveness Probe 可以通过三种方式进行检测:

HTTP 探针

HTTP 探针可以检测 Pod 是否能够成功响应 HTTP 请求。如果 Pod 无法响应 HTTP 请求,Kubernetes 将会认为该 Pod 处于错误状态,并自动重启该 Pod。

下面是一个 HTTP 探针的示例代码:

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

在上面的示例代码中,我们定义了一个名为 my-pod 的 Pod,其中包含一个名为 my-container 的容器。该容器会监听 80 端口,并且定义了一个 HTTP 探针,用于检测 /healthz 路径是否能够成功响应 HTTP 请求。该探针的 initialDelaySeconds 属性表示在容器启动后等待 30 秒后开始进行检测,periodSeconds 属性表示每隔 10 秒进行一次检测。

TCP 探针

TCP 探针可以检测 Pod 是否能够成功建立 TCP 连接。如果 Pod 无法建立 TCP 连接,Kubernetes 将会认为该 Pod 处于错误状态,并自动重启该 Pod。

下面是一个 TCP 探针的示例代码:

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

在上面的示例代码中,我们定义了一个名为 my-pod 的 Pod,其中包含一个名为 my-container 的容器。该容器会监听 80 端口,并且定义了一个 TCP 探针,用于检测是否能够成功建立 TCP 连接。该探针的 initialDelaySeconds 属性表示在容器启动后等待 30 秒后开始进行检测,periodSeconds 属性表示每隔 10 秒进行一次检测。

Exec 探针

Exec 探针可以通过执行命令来检测 Pod 是否处于运行状态。如果 Pod 无法执行指定的命令,Kubernetes 将会认为该 Pod 处于错误状态,并自动重启该 Pod。

下面是一个 Exec 探针的示例代码:

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

在上面的示例代码中,我们定义了一个名为 my-pod 的 Pod,其中包含一个名为 my-container 的容器。该容器会监听 80 端口,并且定义了一个 Exec 探针,用于检测是否能够成功执行 cat /tmp/health 命令。该探针的 initialDelaySeconds 属性表示在容器启动后等待 30 秒后开始进行检测,periodSeconds 属性表示每隔 10 秒进行一次检测。

Readiness Probe

Readiness Probe 是 Kubernetes 集群中的另一种健康检查机制,用于检测 Pod 是否准备好接收流量。如果 Readiness Probe 检测到 Pod 尚未准备好接收流量,Kubernetes 将会停止将流量发送到该 Pod。

Readiness Probe 可以通过三种方式进行检测,与 Liveness Probe 相同:

HTTP 探针

HTTP 探针可以检测 Pod 是否能够成功响应 HTTP 请求。如果 Pod 无法响应 HTTP 请求,Kubernetes 将会停止将流量发送到该 Pod。

下面是一个 HTTP 探针的示例代码:

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

在上面的示例代码中,我们定义了一个名为 my-pod 的 Pod,其中包含一个名为 my-container 的容器。该容器会监听 80 端口,并且定义了一个 HTTP 探针,用于检测 /healthz 路径是否能够成功响应 HTTP 请求。该探针的 initialDelaySeconds 属性表示在容器启动后等待 30 秒后开始进行检测,periodSeconds 属性表示每隔 10 秒进行一次检测。

TCP 探针

TCP 探针可以检测 Pod 是否能够成功建立 TCP 连接。如果 Pod 无法建立 TCP 连接,Kubernetes 将会停止将流量发送到该 Pod。

下面是一个 TCP 探针的示例代码:

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

在上面的示例代码中,我们定义了一个名为 my-pod 的 Pod,其中包含一个名为 my-container 的容器。该容器会监听 80 端口,并且定义了一个 TCP 探针,用于检测是否能够成功建立 TCP 连接。该探针的 initialDelaySeconds 属性表示在容器启动后等待 30 秒后开始进行检测,periodSeconds 属性表示每隔 10 秒进行一次检测。

Exec 探针

Exec 探针可以通过执行命令来检测 Pod 是否准备好接收流量。如果 Pod 无法执行指定的命令,Kubernetes 将会停止将流量发送到该 Pod。

下面是一个 Exec 探针的示例代码:

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

在上面的示例代码中,我们定义了一个名为 my-pod 的 Pod,其中包含一个名为 my-container 的容器。该容器会监听 80 端口,并且定义了一个 Exec 探针,用于检测是否能够成功执行 cat /tmp/ready 命令。该探针的 initialDelaySeconds 属性表示在容器启动后等待 30 秒后开始进行检测,periodSeconds 属性表示每隔 10 秒进行一次检测。

结论

在本文中,我们详细介绍了 Kubernetes 集群中的 Pod 健康检查方式,包括 Liveness Probe 和 Readiness Probe。通过对 Pod 的健康状态进行检测,我们可以确保 Pod 在运行时能够保持健康状态,并且在出现错误时能够自动重启。希望本文能够对读者在实践中使用 Kubernetes 时有所帮助。

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

纠错
反馈