【k8s的三种探针】
k8s 有三种类型的探针:`StartupProbe`(启动探针)、`LivenessProbe`(存活探针)、`ReadinessProbe`(就绪探针)。它们可以同时存在,但如果有`StartupProbe`就会先执行该探针。
一、探针类型
作用:容器内应用的监测机制,根据不同的探针来判断容器应用当前的状态。
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
更多推荐
所有评论(0)