Kubernetes之Pod健康检查

目录

    • Pod健康检查
    • 探针实现方式

Pod健康检查

Pod 的健康检查是 Kubernetes 中一种用于监控和维护容器状态的机制,可以确保容器在运行期间保持健康状态。Kubernetes 提供了两种类型的健康检查:Liveness 探针和 Readiness 探针。

  1. Liveness 探针:
    Liveness 探针用于检查容器是否仍然存活和运行。如果容器的 Liveness 探针失败,则 Kubernetes 认为容器不再正常运行,并将尝试重新启动该容器。Liveness 探针可用于检测容器内部的故障、死锁或应用程序崩溃等问题。

常见的 Liveness 探针实现方式包括发送 HTTP 请求、执行命令或检查 TCP 端口。例如,可以通过发送 HTTP GET 请求到容器的 /health 路径来检查容器的健康状态。

  1. Readiness 探针:
    Readiness 探针用于检查容器是否准备好为请求提供服务。如果容器的 Readiness 探针失败,则 Kubernetes 不会将请求发送到该容器,直到探针重新成功为止。Readiness 探针可用于确保容器在接收请求之前已经完成了必要的初始化操作,如数据库连接、配置加载等。

常见的 Readiness 探针实现方式包括发送 HTTP 请求、执行命令或检查 TCP 端口。例如,可以通过发送 HTTP GET 请求到容器的 /ready 路径来检查容器是否准备好接收请求。

在 Pod 的定义文件中,可以使用 livenessProbereadinessProbe 字段来配置相应的探针。这些字段包含了探针的类型、路径、端口和探测频率等参数。

以下示例 定义了一个基于 HTTP 接口的 Liveness 探针和一个基于 TCP 端口的 Readiness 探针:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: my-image
      ports:
        - containerPort: 8080
      livenessProbe:
        httpGet:
          path: /health
          port: 8080
        initialDelaySeconds: 30
        periodSeconds: 10
      readinessProbe:
        tcpSocket:
          port: 8080
        initialDelaySeconds: 5
        periodSeconds: 10

上述示例中,容器的 Liveness 探针通过发送 HTTP GET 请求到 /health 路径来检查容器的健康状态。而容器的 Readiness 探针通过检查容器的 8080 端口是否处于打开状态来判断容器是否准备好接收流量。

探针实现方式

探针有多种实现方式,Kubernetes 支持以下三种类型的探针实现方式:

  1. Exec Probe:该探针通过在容器中执行一个命令来判断容器是否正常运行。如果命令成功执行(返回状态码为 0),则认为探针成功。可以使用 exec 字段来指定要执行的命令。
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: my-image
      livenessProbe:
        exec:
          command:
            - cat
            - /tmp/health
        initialDelaySeconds: 30
        periodSeconds: 10
        timeoutSeconds: 1

配置中的 initialDelaySeconds 字段表示容器启动后等待多少秒开始进行首次探测,而 periodSeconds 字段表示每隔多少秒进行一次探测,timeoutSeconds表示健康检查发送请求后等待响应的超时时间。当超时发生时,kubelet会认为容器已经无法提供服务,将会重启该容器,上面三个属性单位都为s

  1. HTTP Get Probe:该探针通过发送 HTTP GET 请求来判断容器是否正常运行。如果请求返回的状态码在 2xx 或 3xx 范围内,则认为探针成功。可以使用 httpGet 字段来指定请求的路径、端口和其他参数。
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  1. TCPSocket Probe:该探针通过建立到容器中指定端口的 TCP 连接来判断容器是否正常运行。如果连接成功建立,则认为探针成功。可以使用 tcpSocket 字段来指定要连接的端口。
readinessProbe:
  tcpSocket:
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10

你可能感兴趣的:(k8s,kubernetes,容器,云原生,docker,运维)