一分钟了解pod健康检查

181 阅读2分钟

应用在运行过程中难免会出现错误,如程序异常,网络故障等,kubernetes提供健康检查机制,当发现应用异常时会自动重启容器,将应用从service服务中剔除,保障应用的高可用性。k8s定义了三种探针:存活探针、就绪探针和启动探针

pod中的三种探针

存活探针(Liveness):用于判断应用程序是否正在运行
比如我程序里启动的端口是80,使用存活探针查看80端口是否在监听,没有在监听,就认为程序异常,就会按照规则重启pod

就绪探针(Readiness):用于判断容器是否可用(ready状态),达到ready状态的pod才会接受请求。对于被service管理的pod,service与pod endpoint的关联关系也将基于pod 是否ready进行设置。

启动探针(StartupProbe):某些应用会遇到启动比较慢的情况,例如应用程序会与远程服务器简历连接,此Readiness就不适用了,这个属于有且仅有一次的超长延迟,可以通过该探针解决

存活探针与就绪探针相互间不等待对方成功。 如果要在执行就绪探针之前等待,就需要使用启动探针

总结:一般pod都会使用存活探针和就绪探针,如果应用第一次启动比较慢的情况下,才会加上启动探针

三种配置探针的方式

方式一:ExecAction

在容器内部运行一个命令,如果命令返回状态码为0,则表示容器健康

livenessProbe:
  failureThreshold: 3       # 连续探测失败了failureThreshold 次之后,才认为是已经失败的
  exec:
    command:
    - cat
    - /tmp/health
  initialDelaySeconds: 600   # 容器启动后等待多少s开始检测,健康检查初始探测时间
  periodSeconds: 15          # 指定多长时间执行一次存活检测
  successThreshold: 1        # 探测在失败后,被视为成功的最小连续成功数
  timeoutSeconds: 1          # 探测超时后等待多少s

方式二:TCPSocketAction 通过容器IP地址和端口号执行TCP检查,如果可以建立连接,则表示容器健康

readinessProbe:
  failureThreshold: 3
  tcpsockert:
    port: 7001
  initialDelaySeconds: 15
  periodSeconds: 3
  successThreshold: 1
  timeoutSeconds: 1

方式三:HTTPGetAction 通过容器的IP地址、端口以及路径调用HTTP GET 方法 如果相应的状态码在200-400之间就认为状态正常

readinessProbe:
  failureThreshold: 3
  httpGet:
    path: /health
    port: 7001
    scheme: HTTP
  initialDelaySeconds: 15
  periodSeconds: 3
  successThreshold: 1
  timeoutSeconds: 1