ydswin

忘记背后,努力面前的,向着标杆直跑

导航

pod探针的三种类型及四种检测方式

Pod探针是Kubernetes中的一种机制,用于检测Pod中的容器是否正常运行。它主要有三种类型:存活探针(LivenessProbe)、就绪探针(ReadinessProbe)和启动探针(StartupProbe)。

  1. 存活探针(LivenessProbe):用于检测容器是否仍在运行。如果存活探针检测失败,kubelet将根据配置的重启策略对容器进行相应的处理。如果未配置存活探针,则默认状态为成功。这主要用于判断Pod是否需要重启。
  2. 就绪探针(ReadinessProbe):用于检测容器内的程序是否健康。如果就绪探针的返回值为成功,则表示容器已经完成启动,并且程序已经可以接受流量。这主要用于判断Pod是否能够提供正常服务。
  3. 启动探针(StartupProbe):这是Kubernetes 1.16版本后新增的探测方式,用于判断容器内的应用程序是否已经启动。如果配置了启动探针,它会先禁止其他的探测,直到启动探针成功为止。成功后,将不再进行探测。这主要适用于容器启动时间较长的场景。

对于这三种探针,它们的检测方式主要有四种:

  1. ExecAction:在容器内执行一个命令,如果命令的返回值为0,则认为容器健康。
  2. TCPSocketAction:通过TCP连接检查容器内的端口是否通畅。如果端口通畅,则认为容器健康。
  3. HTTPGetAction:通过应用程序暴露的API地址来检查程序是否正常运行。如果状态码为200~400之间,则认为容器健康。
  4. GRPC

请注意,这三种检查方式在同一时间只能使用一种。另外,探针检查参数配置中,还包括初始化时间(initialDelaySeconds)、超时时间(timeoutSeconds)、检测间隔(periodSeconds)、检查成功次数(successThreshold)和检测失败次数(failureThreshold)等参数,用于更精确地控制探针的行为。

apiVersion: v1  
kind: Pod  
metadata:  
  name: liveness-example  
spec:  
  containers:
    - name: startup  
      image: k8s.gcr.io/startup  
      startupProbe:  
        exec:  
          command: ["/bin/sh", "-c", "until nc -z localhost 8080; do echo waiting for server; sleep 2; done;"]  
        initialDelaySeconds: 10  
        failureThreshold: 30
    - name: readiness  
      image: k8s.gcr.io/readiness  
      readinessProbe:  
        httpGet:  
          path: /readiness  
          port: 8080  
        initialDelaySeconds: 5  
        timeoutSeconds: 1
    - name: liveness  
      image: k8s.gcr.io/liveness  
      ports:  
        - containerPort: 8080  
      livenessProbe:  
        tcpSocket:  
          port: 8080  
        initialDelaySeconds: 15  
        timeoutSeconds: 1  
        periodSeconds: 10  
        successThreshold: 1  
        failureThreshold: 3

将这三个探针组合使用的好处包括:
避免误判:通过 startupProbe,可以确保在容器完全启动之前不会触发其他两个探针,从而避免因为容器还在初始化阶段而导致的误判。
提高可用性:livenessProbe 可以及时检测并处理容器内部的问题,而 readinessProbe 则可以确保容器在准备好之前不会接收流量,从而提高应用程序的可用性
更精细的控制:通过为这三个探针配置不同的检查条件和阈值,可以更精细地控制容器的生命周期和流量路由,从而满足不同的应用程序需求。
总之,组合使用 startupProbe、livenessProbe 和 readinessProbe 可以提供更全面、更可靠的容器状态和生命周期管理策略,确保应用程序在 Kubernetes 环境中稳定、高效地运行。

readinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除。
livenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施。

三种探针的执行顺序

在容器启动时,Kubernetes会按照以下顺序进行探针检查:

StartupProbe:如果定义了StartupProbe,它会首先被执行。StartupProbe用于判断容器是否已经启动并准备接受请求。如果StartupProbe检查失败,Kubernetes会认为容器启动失败,并且不会执行LivenessProbe和ReadinessProbe。
ReadinessProbe:当StartupProbe成功或者未定义时,ReadinessProbe将开始执行。ReadinessProbe用于检查容器是否已经准备好接收外部流量。如果ReadinessProbe检查失败,Kubernetes会将Pod从服务中移除,不会再将新的流量发送到该Pod。
LivenessProbe:最后执行的是LivenessProbe。LivenessProbe用于检查容器是否还在运行。如果LivenessProbe检查失败,Kubernetes会杀死容器并尝试重启它。

posted on 2024-02-28 22:38  dashery  阅读(239)  评论(0编辑  收藏  举报