K8s探针

作者: 伊凡的一天 | 来源:发表于2020-02-18 13:41 被阅读0次

    K8s中存在两种类型的探针:liveness probe和readiness probe。

    liveness probe(存活探针)

    用于判断容器是否存活,即Pod是否为running状态,如果LivenessProbe探针探测到容器不健康,则kubelet将kill掉容器,并根据容器的重启策略是否重启。如果一个容器不包含LivenessProbe探针,则Kubelet认为容器的LivenessProbe探针的返回值永远成功。

    有时应用程序可能因为某些原因(后端服务故障等)导致暂时无法对外提供服务,但应用软件没有终止,导致K8S无法隔离有故障的pod,调用者可能会访问到有故障的pod,导致业务不稳定。K8S提供livenessProbe来检测应用程序是否正常运行,并且对相应状况进行相应的补救措施。

    注意,liveness探测失败并一定不会重启pod,pod是否会重启由你的restart policy 控制。

    readiness probe(就绪探针)

    用于判断容器是否启动完成,即容器的Ready是否为True,可以接收请求,如果ReadinessProbe探测失败,则容器的Ready将为False,控制器将此Pod的Endpoint从对应的service的Endpoint列表中移除,从此不再将任何请求调度此Pod上,直到下次探测成功。通过使用Readiness探针,Kubernetes能够等待应用程序完全启动,然后才允许服务将流量发送到新副本。

    比如使用tomcat的应用程序来说,并不是简单地说tomcat启动成功就可以对外提供服务的,还需要等待spring容器初始化,数据库连接没连上等等。对于spring boot应用,默认的actuator带有/health接口,可以用来进行启动成功的判断。

    每类探针都支持三种探测方法:

    • exec:通过执行命令来检查服务是否正常,针对复杂检测或无HTTP接口的服务,命令返回值为0则表示容器健康。
    • httpGet:通过发送http请求检查服务是否正常,返回200-399状态码则表明容器健康。
    • tcpSocket:通过容器的IP和Port执行TCP检查,如果能够建立TCP连接,则表明容器健康。

    探针探测的结果有以下三者之一:

    • Success:Container通过了检查。
    • Failure:Container未通过检查。
    • Unknown:未能执行检查,因此不采取任何措施。

    Pod重启策略:

    • Always: 总是重启
    • OnFailure: 如果失败就重启
    • Never: 永远不重启

    例子

    apiVersion: v1
    kind: Pod
    metadata:
      name: goproxy
      labels:
        app: goproxy
    spec:
      containers:
      - name: goproxy
        image: k8s.gcr.io/goproxy:0.1
        ports:
        - containerPort: 8080
        readinessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 15
          periodSeconds: 20
    

    探针(Probe)有许多可选字段,可以用来更加精确的控制Liveness和Readiness两种探针的行为。这些参数包括:

    • initialDelaySeconds:容器启动后第一次执行探测是需要等待多少秒。
    • periodSeconds:执行探测的频率。默认是10秒,最小1秒。
    • timeoutSeconds:探测超时时间。默认1秒,最小1秒。
    • successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1。对于liveness必须是1。最小值是1。
    • failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3。最小值是1。

    参考文章

    相关文章

      网友评论

          本文标题:K8s探针

          本文链接:https://www.haomeiwen.com/subject/ftsgfhtx.html