Kubernetes 中使用 Pod 的 Probe 进行应用程序的健康检查

随着 Kubernetes 越来越成为云原生应用构建的首选平台,对于应用程序的健康检查成为越来越重要的一环。在这篇文章中,我们将介绍 Kubernetes 中使用 Pod 的 Probe 进行应用程序健康检查的基本原理和操作方法及其相应的示例代码。

什么是 Probe?

在 Kubernetes 中,一个 Pod 代表一个正在运行的应用程序实例。Probe 就是 Pod 中的一个机制,用于检测正在运行的应用程序是否健康。

具体来说,Probe 主要有以下三个作用:

  • 检测容器是否处于运行状态。

    如果容器没有运行,Probe 会向 Kubernetes 返回一个非成功(non-successful)的返回码(例如,错误代码 500)。Kubernetes 会在此基础上重新启动此容器的实例。

  • 检测容器是否能够服务请求。

    如果容器正在运行,但无法处理请求,Probe 会返回一个非成功的返回码。这可能是由于应用程序的错误或请求负载过高导致的。在此情况下,Kubernetes 会停止向该容器发送流量,并且在 Pod 重新调度之前不会再将流量发送给该容器。

  • 检测容器的内部健康状况。

    除了服务请求的连通性以外,Probe 还允许定义容器的内部健康状况,例如容器是否能够正常响应请求、容器的内存和 CPU 使用情况如何等。这些指标允许 Kubernetes 决定何时对容器进行缩放或重启。

在 Kubernetes 中,有两种类型的 Probe:Liveness Probe 和 Readiness Probe。

Liveness Probe

Liveness Probe 用于确定容器是否正在运行,如果容器不健康,则 Kubernetes 认为该容器崩溃,并且会在 Pod 重新调度之前尝试重启容器,以尝试恢复它的健康状况。

Liveness Probe 的类型包括:

  • HTTP Get Probe

    容器将接收一个 HTTP GET 请求,通过容器的 IP 和端口处理该请求。如果返回的状态码在 200-399 之间,则容器被视为运行良好。如果不在这个范围内,则容器被视为不健康。

  • Command Probe

    Kubernetes 运行在容器内部的命令,并检查返回值。如果返回值为 0,则容器被视为运行良好。如果不为 0,则容器被视为不健康。

  • TCP Socket Probe

    Kubernetes 检查容器是否能够接受入站 TCP 连接。如果是,则容器被视为运行良好。如果不是,则容器被视为不健康。

下面是一个示例,它演示了如何使用 Liveness Probe 在 Pod 中检测正在运行的应用程序的健康状况。

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

在上面的示例中,我们创建了一个名为“liveness-http”的 Pod,其中包含一个名为“liveness”的容器。该容器将使用 HTTP GET 请求来检测容器的运行状况。它将尝试从路径“/index.html”和端口“80”处理请求。对于初始延迟秒数,容器将在 Pod 创建的第三秒进行第一次检测。在接下来的每 3 秒内,它都将进行检测。

Readiness Probe

Readiness Probe 用于确定容器是否能够开始接收流量。如果容器没有准备好处理请求,Kubernetes 将不会将流量发送给该容器,直到它准备就绪。

Readiness Probe 的类型包括:

  • HTTP Get Probe

    容器将接收一个 HTTP GET 请求,通过容器的 IP 和端口处理该请求。如果返回的状态码在 200-399 之间,则容器被视为准备好接收流量。如果不在这个范围内,则容器被视为尚未准备好接收流量。

  • Command Probe

    Kubernetes 运行在容器内部的命令,并检查返回值。如果返回值为 0,则容器被视为准备好接收流量。如果不为 0,则容器被视为尚未准备好接收流量。

  • TCP Socket Probe

    Kubernetes 检查容器是否能够接受入站 TCP 连接。如果是,则容器被视为准备好接收流量。如果不是,则容器被视为尚未准备好接收流量。

下面是一个示例,它演示了如何在 Kubernetes 中使用 Readiness Probe 检测容器是否准备好处理请求。

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

在上面的示例中,我们创建了一个名为“readiness-http”的 Pod,其中包含一个名为“readiness”的容器。该容器将使用 HTTP GET 请求来检测容器是否准备好处理请求。它将尝试从路径“/index.html”和端口“80”处理请求。对于初始延迟秒数,容器将在 Pod 创建的第三秒进行第一次检测。在接下来的每 3 秒内,它都将进行检测。

总结

在本文中,我们介绍了 Kubernetes 中使用 Pod 的 Probe 进行应用程序健康检查的基本原理并提供了相关示例代码。Pod 的 Probe 提供了一个简单而有效的方法来确定正在运行的应用程序是否健康,并允许 Kubernetes 自动重新调度 Pod 或其容器实例,以确保企业应用程序始终处于高可用状态。如果您遇到了应用程序健康检查方面的问题,希望本文能为您提供一些帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/664e9e9fd3423812e4f05b18