介绍

K8S 提供了3种探针

  • readinessProbe
  • livenessProbe
  • startupProbe(这个1.17版本增加的)

readinessProbe:指示容器是否准备好服务请求(是否启动完成并就绪)。绪探针初始延迟之前的就绪状态默认为Failure,待容器启动成功弹指指标探测结果为成功后,状态变更为 Success。如果未配置就绪探针,则默认状态为Success。
只有状态为 Success ,才会被纳入 pod 所属 service 中,也就是 service 接收到请求后才有可能会被分发处理请求。

如果ReadinessProbe探针检测到失败,则Pod的状态被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的Endpoint。

livenessProbe:用于判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康(你可以配置连续多少次失败才记为不健康),则 kubelet 会杀掉该容器,并根据容器的重启策略做相应的处理。如果未配置存活探针,则默认状态为Success。即探针返回的值永远是 Success。

startupProbe:判断容器内的应用程序是否已启动。如果配置了启动探测,在则在启动探针状态为 Succes 之前,其他所有探针都处于无效状态,直到它成功后其他探针才起作用。如果启动探测失败,kubelet 将杀死容器,容器将服从其重启策略。如果容器没有配置启动探测,则默认状态为 Success。

示例

存活探针 - HTTP协议

containers:
  - name: xxx
    image: xxx

    # 存活检查
    livenessProbe:
      httpGet:
        scheme: HTTP             # 协议
        path: /actuator/health   # 路径
        port: 8080               # 端口
      initialDelaySeconds: 30    # 延迟探测时间(秒) 【 在k8s第一次探测前等待秒 】
      periodSeconds: 10          # 执行探测频率(秒) 【 每隔秒执行一次 】
      timeoutSeconds: 1          # 超时时间
      successThreshold: 1        # 健康阀值 
      failureThreshold: 3        # 不健康阀值 

存活探针 - TCP协议

containers:
  - name: xxx
    image: xxx

    # 存活检查
    livenessProbe:
      tcpSocket:                 # TCP
        port: 8090               # 端口
      initialDelaySeconds: 50    # 延迟探测时间(秒) 【 在k8s第一次探测前等待秒 】
      periodSeconds: 10          # 执行探测频率(秒) 【 每隔秒执行一次 】
      timeoutSeconds: 1          # 超时时间
      successThreshold: 1        # 健康阀值 
      failureThreshold: 3        # 不健康阀值 

上面配置的意思是容器启动50s后,每10s检查一次,允许失败的次数是3次。如果失败次数超过3则会触发restartPolicy。

就绪探针

HTTP协议和TCP协议配置方法和存活探测相同(如上,这里只列出一个HTTP协议的)

containers:
  - name: xxx
    image: xxx

    # 就绪检查
    readinessProbe:
      httpGet:
        scheme: HTTP             # 协议
        path: /actuator/health   # 路径
        port: 8080               # 端口
      initialDelaySeconds: 30    # 延迟探测时间(秒)【 在k8s第一次探测前等待秒 】
      periodSeconds: 2           # 执行探测频率(秒) 【 每隔秒执行一次 】
      timeoutSeconds: 1          # 超时时间
      successThreshold: 1        # 健康阀值 
      failureThreshold: 3        # 不健康阀值 

启动探针

startupProbe 脚本内容和 readinessProbe 相比,除了名字不同之外,其他配置和含义相同(脚本参考如上)。

注意

  • 如果只配置了存活检查 ( livenessProbe ) 而没有配置就绪检查 ( readinessProbe ) ,则在滚动更新过程中可能会出现 502 Bad Gateway 错误。
  • 不要将 startupProbe 和 readinessProbe 混淆。
  • 通常将 startupProbe 和 livenessProbe 组合使用,livenessProbe 的时间是从 startupProbe 状态成功后开始计算。

(END)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐