不忘初心,
牢记使命。

K8s的yaml文件的检查指标

2021-08-21 大聪明 0评论 146 0喜欢

K8s的yaml文件的检查指标

简介

K8S服务健康检查从两个维度进行,分别为:就绪状态检查(readiness)和存活状态检查(liveness)。

存活探针和就绪探针被称作健康检查。这些容器探针是一些周期性运行的小进程,这些探针返回的结果如(成功,失败或者未知)反映容器在Kubernetes的状态。基于结果Kubernetes会判断如何处理每个容器,以保障集群服务高可用性和业务与连续性。

readiness&liveness

readiness:用于探测HTTP是否就绪,是否可以接受业务请求。如果ReadinessProbe探针检测到失败,则Pod的状态被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的Endpoint。

Pod对象启动后,容器应用通常需要一段时间才能完成其初始化过程,例如加载配置或数据,甚至有些程序需要运行某类的预热过程,若在此阶段完成之前接入客户端的请求,势必会因为等待太久而影响用户体验,这时就需要就绪探针。如果没有将就绪探针添加到pod中,它们几乎会立即成为服务端点。如果应用程序需要很长时间才能开始监听传入连接,则在服务启动但尚未准备好接收传入连接时,客户端请求将被转发到该pod。因此,客户端会看到"连接被拒绝"类型的错误。

liveness:用于探测HTTP是否存活,如果LivenessProbe探针探测到容器不健康,则kubelet杀掉该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,则kubelet认为该容器的LivenessProbe探针返回的值永远是“Success”。

Liveness探针让Kubernetes知道你的应用程序是状态是否健康。但是如果liveness检查结果是fail就会直接kill container,当然如果你的restart policy 是always 会重启pod。

备注:pod重启策略:PodSpec 中有一个 restartPolicy 字段,可能的值为 Always、OnFailure 和 Never 。默认为Always。

支持检测类型

Kubernetes 支持三种方式来执行探针:

exec:在容器中执行一个命令,如果命令退出码返回0则表示探测成功,否则表示失败;
tcpSocket:对指定的容IP及端口执行一个TCP检查,如果端口是开放的则表示探测成功,否则表示失败;
httpGet:

HTTP探测意味在特定时间间隔执行HTTP请求响,应的状态码用于决定需要对pod执行的操作。如果状态代码在区间 [200,300) 中,则一切正常。
如果存活探测器的状态代码是 4xx 或 5xx ,则代表pod已被重启。
如果就绪探测器的状态代码是 4xx 或 5xx ,那么pod会被标记为不健康,并且Kubernetes为了提高可靠性和正常运行时间将不会再将HTTP请求转发给它。

探测(健康检查)配置参数

通用配置,通过下面的配置能准确的控制 liveness 和 readiness 检查时间策略:

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

HTTP probe 中可以给 httpGet设置其他配置项:
host:连接的主机名,默认连接到 pod 的 IP。您可能想在 http header 中设置 “Host” 而不是使用 IP。
scheme:连接使用的 schema,默认HTTP。
path: 访问的HTTP server 的 path。
httpHeaders:自定义请求的 header。HTTP运行重复的 header。
port:访问的容器的端口名字或者端口号。端口号必须介于 1 和 65525 之间。

就绪检查 5 秒一次

        readinessProbe:
          failureThreshold: 3
          httpGet:
            httpHeaders:
            - name: Host
              value: localhost
            path: /
            port: 80
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 5

存活状态检查 9 秒一次

        livenessProbe:
          failureThreshold: 3
          httpGet:
            httpHeaders:
            - name: Host
              value: 127.0.0.1
            path: /50x.html
            port: 80
            scheme: HTTP
          initialDelaySeconds: 60
          periodSeconds: 9
          successThreshold: 1
          timeoutSeconds: 200

发表评论 取消回复

电子邮件地址不会被公开。

请输入正确格式的qq邮箱
请输入以http或https开头的URL,格式如:https://libo_sober.top