在kubernetes中,健康检查也是kubernetes的优势之一,在kubernetes中,针对pod的健康检查也叫探针,有三种探针,分别是startupprobe、readinessprobe、linvenessprobe,三种探针分别代表了启动检查,存活检查,就绪检查。下面根据三种探针方式分别简单了解一下:
背景
为什么需要用到探针,比如我们在kubernetes环境中,服务在更新迭代过程中,新旧版本在发布过程中,如果没有探针,就会影响到用户的体验。或者服务在运行过程中出现假死,这个时候需要人为的去重启一下,但是有了探针后,我们就可以让pod自动重启,不需要人为的操作。
探针
如果在pod中有startupprobe探针,就会先禁用其他的探针,等startupprobe成功后,其他探针才会陆续生效。这里一定要注意个别服务启动的时间不一样的时候。
startupProbe: #健康检查方式:[readinessProbe,livenessProbe,StartupProbe] failureThreshold: 3 #检测失败3次表示未就绪 httpGet: #请求方式,tcpSocket,grpc、 path: /ready #请求路径 port: 8182 #请求端口 scheme: HTTP #请求协议 periodSeconds: 10 #探针执行的时间间隔(单位秒),默认10s,最小值1,只能是整数 successThreshold: 1 #检查成功为2次表示就绪 timeoutSeconds: 1 #检测失败1次表示未就绪
服务必须在3x10s后启动,如果30s还没有启动就会处于一个循环的过程。
livenessProbe: #健康检查方式:[readinessProbe,livenessProbe,StartupProbe] failureThreshold: 5 #检测失败5次表示未就绪 httpGet: #请求方式 path: /health #请求路径 port: 8080 #请求端口 scheme: HTTP #请求协议 initialDelaySeconds: 60 #容器启动后等待时间后存活和就绪探针才被初始化,默认是0,单位是秒 periodSeconds: 10 #探针执行的时间间隔(单位秒),默认10s,最小值1,只能是整数 successThreshold: 1 #检查成功为2次表示就绪 timeoutSeconds: 5 #检测失败1次表示未就绪
livenessProbe是用于探测容器是否正常,如果探测失败,就会重启操作,定义中的服务健康检查,就需要等服务启动成功后检查,如果在60s内服务没有启动,就会重启。
readinessProbe: #健康检查方式:[readinessProbe,livenessProbe,StartupProbe] failureThreshold: 3 #检测失败3次表示未就绪 httpGet: #请求方式 path: /ready #请求路径 port: 8181 #请求端口 scheme: HTTP #请求协议 periodSeconds: 10 #探针执行的时间间隔(单位秒),默认10s,最小值1,只能是整数 successThreshold: 1 #检查成功为2次表示就绪 timeoutSeconds: 1 #检测失败1次表示未就绪
readinessProbe检查是以上两个都探针成功的前提下,前面两个都可以不加,但是readinessProbe必须要加。
readinessProbe: #检查方式 exec: #使用命令检查 command: #指令 - cat #指令 - /etc/hosts #指令 initialDelaySeconds: 5 #容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。 timeoutSeconds: 2 #检测失败1次表示未就绪 successThreshold: 3 #检查成功为2次表示就绪 failureThreshold: 2 #检测失败重试次数 periodSeconds: 5 #探针执行的时间间隔(单位秒),默认10s,最小值1,只能是整数
readinessProbe探针通过查看文件探测,不过这三种探测方式也不一定就能保证服务在发布的过程中不会出现用户请求超时的问题,比如服务初始化第一个请求超过网关的限制时间,就会出现。也有旧服务请求没有返回数据,就删除的情况,这种就需要在删除前继续保留。
lifecycle: preStop: exec: command: - sleep - '60'
容器停止等待60s,这是为了处理旧容器没有返回的数据,也可以使用terminationGracePeriodSeconds,在terminationGracePeriodSeconds内没有完全停止就发送SIGKILL信号强制杀死进程。
三种探测方式可以混合使用,也可以单独使用,这个需要根据自己的环境,比如我的环境语言不一样,为了使用同一个模版,我这里就只使用了readinessProbe探针,这样考虑问题的时候只考虑readinessProbe探针就好了。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏