Pod 的健康检查-容器探针

前言

应用程序也可能在不终止的情况下变得无响应。例如,一个有内存泄漏的 Java 应用程序最终开始 OutOfMemoryErrors,但它的 JVM 进程继续运行。理想情况下,Kubernetes 应该检测到这种错误并重新启动容器。

Probe-容器探针介绍

Probe 是由 kubelet 对容器执行的定期诊断。要执行诊断,kubelet 调用由容器实现的 Handler (处理程序)。有三种类型的处理程序

Probe的机制类型

  • exec-ExecAction
    在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功
  • tcpSocket-TCPSocketAction
    对容器的 IP 地址上的指定端口执行 TCP 检查。如果端口打开,则诊断被认为是成功的
  • httpGet-HTTPGetAction
    对容器的 IP 地址上指定端口和路径执行 HTTP Get 请求。如果响应的状态码大于等于 200 且小于 400,则诊断被认为是成功的

三种结果

  • Success(成功)
    容器通过了诊断
  • Failure(失败)
    容器未通过诊断
  • Unknown(未知)
    诊断失败,因此不会采取任何行动

三种探针

针对运行中的容器,kubelet 可以选择是否执行以下三种探针,以及如何针对探测结果作出反应

  • livenessProbe
    用于判断容器是否存活(Running状态),如果LivessProbe探针探测到容器不健康,则kubelet将杀死该容器,并根据该容器的重启策略做相应的处理。如果一个容器不包含livenessProbe探针,那么kubelet认为该容器的livenessProbe探针返回的值永远是Success
  • readinessProbe
    指示容器是否准备好为请求提供服务。如果就readinessProbe探针探测失败,端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该Pod的IP地址。 初始延迟之前的就绪态的状态值默认为Failure。 如果容器不提供readinessProbe探针,则默认状态为 Success,readinessProbe也是定期触发执行的,存在于Pod的整个生命周期中
  • startupProbe
    如果某些应用启动比较慢,可以使用startupProbe探针,该探针指示容器中的应用是否已经启动。如果提供了startupProbe探针,则所有其他探针都会被禁用,直到此探针成功为止。如果探测失败,kubelet将杀死容器,而容器依其重启策略进行重启。如果容器没有提供启动探测,则默认状态为Success

例子

  • pod.yaml
    # kubia-liveness.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: kubia-liveness
    spec:
      containers:
      - name: kubia
        image: luksa/kubia:1.0
        ports:
        - name: http
          containerPort: 8080
        livenessProbe:
          httpGet:
            path: /
            port: 8080
      - name: envoy
        image: luksa/kubia-ssl-proxy:1.0
        ports:
        - name: https
          containerPort: 8443
        - name: admin
          containerPort: 9901
        livenessProbe:
          httpGet:
            path: /ready
            port: admin
          initialDelaySeconds: 10
          periodSeconds: 5
          timeoutSeconds: 2
          failureThreshold: 3
    
  • apply pod
    kubectl apply -f kubia-liveness.yaml
  • port-forward
    kubectl port-forward kubia-liveness 8080 8443 9901
  • 查看探针日志
    $ kubectl logs kubia-liveness -c kubia -f
    
    $ kubectl exec kubia-liveness -c envoy -- tail -f /var/log/envoy.admin.log
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容