k8s之pod探针

在Kubernetes中,探针(Probe)用于检查容器的健康状态。Kubernetes提供了三种类型的探针:存活探针(Liveness Probe)、就绪探针(Readiness Probe)和启动探针(Startup Probe)。这些探针可以用来监测容器的健康状况,并根据需要对容器进行重启、停止访问或将其加入负载均衡。

以下是每种类型的探针的简要说明:

  1. 存活探针(Liveness Probe): 存活探针用于检测容器是否处于运行状态。如果存活探针失败,Kubernetes会自动重启容器。存活探针通常用于监测应用程序内部的健康状态,例如检查关键进程是否在运行、数据库连接是否正常等。
  2. 就绪探针(Readiness Probe): 就绪探针用于检测容器是否已准备好接收流量。当就绪探针失败时,Kubernetes会将容器从服务的负载均衡中排除,直到就绪探针成功为止。就绪探针通常用于确保应用程序在开始接收流量之前已经完成了初始化、加载数据或建立必要的连接。
  3. 启动探针(Startup Probe): 启动探针用于检测容器是否已成功启动并变为可用状态。与存活探针和就绪探针不同,启动探针在容器启动时运行一次,而不是周期性地运行。如果启动探针失败,Kubernetes会重启容器。启动探针通常用于在应用程序初始化或长时间启动的情况下进行健康检查。

对于每种探针类型,您可以指定以下属性:

  • 探测方式(Probe Type): 可以选择使用HTTP探测、TCP套接字探测或命令执行探测。
  • 探测操作(Probe Action): 对于HTTP探测,您可以指定要发出的HTTP请求。对于TCP探测和命令执行探测,您可以定义相应的检查逻辑。
  • 探测周期(Probe Period): 指定多久执行一次探测操作。
  • 探测超时(Probe Timeout): 指定探测操作的超时时间。
  • 探测阈值(Probe Threshold): 指定连续多少次探测操作失败后被视为失败。

您可以通过在Pod的定义中使用livenessProbereadinessProbestartupProbe字段来添加探针配置。

下面是一个示例,展示了如何在Pod定义中添加探针配置:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-container
    image: my-image
    livenessProbe:
      httpGet:
        path: /health
        port: 8080
      initialDelaySeconds: 10   # running x秒之后才开始执行
      periodSeconds: 15   # 每隔x秒    
#      timeoutSeconds: 5              # x秒之后未返回结果,失败超时
#      successThreshold: 5            # 成功阈值,连续x次探测成功才算成功
#      failureThreshold: 5              # 失败阈值

    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    startupProbe:
      command:
        - "my-app"
        - "check"
      initialDelaySeconds: 20
      periodSeconds: 30
      

在上述示例中,我们定义了一个名为my-app的Pod,并在其中的my-container容器中配置了三种类型的探针。

  • 存活探针(Liveness Probe)使用HTTP GET请求来检查容器的存活状态。它将在容器启动后的10秒后开始执行第一次探测,每隔15秒执行一次。
  • 就绪探针(Readiness Probe)使用TCP套接字检查容器是否准备好接收流量。它将在容器启动后的5秒后开始执行第一次探测,每隔10秒执行一次。
  • 启动探针(Startup Probe)使用自定义命令检查容器是否成功启动。它将在容器启动后的20秒后开始执行第一次探测,每隔30秒执行一次。

根据您的应用程序和需求,您可以根据上述示例自定义探针配置。根据实际情况,可能需要根据应用程序的健康检查端点、监听的端口或特定命令来配置探针。

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