一、探针类型

作用:容器内应用的监测机制,根据不同的探针来判断容器应用当前的状态。

 k8s 有三种类型的探针:StartupProbe(启动探针)、LivenessProbe(存活探针)、ReadinessProbe(就绪探针)。它们可以同时存在,但如果有StartupProbe就会先执行该探针。

探针的基本参数配置:

...
spec: # 期望 Pod 按照这里面的描述进行创建
  containers: # 对于 Pod 中的容器描述
    ...
    livenessProbe: # 探针类型
      initialDelaySeconds: 60 # 初始化时间;n 秒后才会执行探针
      httpGet: # 探测方式
    	path: /api/startup
    	port: 80
      timeoutSeconds: 2 # 超时时间
      periodSeconds: 5 # 监测间隔时间
      successThreshold: 1 # 检查 n 次成功就表示成功
      failureThreshold: 2 # 监测失败 n 次就表示失败
    readinessProbe: # 其他探针
      initialDelaySeconds: 60
      ...

1、StartupProbe(探测成功后启用其他探针)

 k8s 1.16 版本新增的探针,用于判断应用程序是否已经启动了。该探针只会在启动的时候成功的运行一次

当配置了 startupProbe 后,会先禁用其他探针,直到 startupProbe 成功后,其他探针才会继续。防止 LivenessProbe 无限重启应用。另外容器没有真正启用之前,ReadinessProbe 也没必要去检测。

**作用:**由于有时候不能准确预估应用一定是多长时间启动成功,因此配置另外两种方式不方便配置初始化时长来检测;而配置了 statupProbe 后,只有在容器启动成功了,才会执行另外两种探针。

startupProbe:
  httpGet:
    path: /api/startup
    port: 80
  ...

2、LivenessProbe(探测失败后重启)

 用于定期探测容器中的应用是否运行,如果探测失败,kubelet 会根据配置的重启策略进行重启;若没有配置,默认就认为容器启动成功,不会执行重启策略。

livenessProbe:
  httpGet:
    path: /health
    port: 8080
    scheme: HTTP
  initialDelaySeconds: 60
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 5
  failureThreshold: 3

 如果超时时间为5秒,而实际启功时间为6秒。LivenessProbe 会在5秒时就判断失败,然后去重启应用,之后会一直重复此判断并重启。为了防止这种情况的出现,需要配合使用 StartupProbe 。

3、ReadinessProbe(探测成功后开放外部访问)

 用于定期探测容器内的程序是否就绪,它的返回值如果返回 success,那么就认为该容器已经完全启动,并且该容器是可以接收外部流量的。

readinessProbe:
  httpGet:
    path: /ready
    port: 8181
    scheme: HTTP
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 1
  failureThreshold: 3

二、探测方式

1、ExecAction(命令)

 命令方式探测:在容器内部执行一个命令,如果返回值为 0,则任务容器时健康的。

livenessProbe:
  exec:
    command:
      \- cat
      \- /health

2、TCPSocketAction(端口)

 TCP访问端口方式探测:通过 tcp 连接监测容器内端口是否开放,如果开放则证明该容器健康。

livenessProbe:
  tcpSocket:
    port: 80

3、HTTPGetAction(get请求)

 HTTP请求方式探测:生产环境用的较多的方式,发送 HTTP 请求到容器内的应用程序,如果接口返回的状态码在 200~400 之间,则认为容器健康。

livenessProbe:
  failureThreshold: 5
  httpGet:
    path: /health
    port: 8080
    scheme: HTTP
    httpHeaders:
      \- name: xxx
      value: xxx

Logo

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

更多推荐