探针的作用:定期对pod内的容器进行诊断,是否满足预制的条件。
探针类型
1、启动探针 startupProbe
- 探测pod内容器应用是否启动成功,启动探针的优先级是最高,只有当启动探针成功之后,其他的探针才可以激活。否则都处于禁用状态。
- 启动探针启动之后就不会再检测。
2、存活探针 livenessProbe
- 探测pod内的容器是否正常运行,如果探测失败,容器会被杀死并重启,pod也会重启(基于控制器创建的pod)。
- 存活探针会伴随整个pod的生命周期,只要pod存在就会一直探测。
3、就绪探针 readinessProbe
- 探测pod是否有资格进入ready状态,pod是否能够接受请求,如果pod进过探测之后不是ready状态,service中会剔除该pod,在endpoint当中也会被剔除,流量请求不会再发送到这个pod。
- 存活探针会伴随整个pod的生命周期,只要pod存在就会一直探测。
探针的检查方法
1、exec
- 进入容器内部执行指定的命令,如果命令返回码是0,表示成功,非0表示失败。
- 适用于需要在容器内执行自定义命令来检查健康状态的情况。
2、tcpSocket
- 对指定容器内的端口和IP地址进行tcp检查(三次握手),如果端口正常,则任务成功。
- 适用于需要对容器端口进行检查的场景。
3、httpGet
- 对指定端口和路径上的容器的IP地址进行http的get方式的请求,响应码返回的值≥200且<400的情况下,才算成功,否则失败。
- 适用于需要对外提供web访问的pod。
启动探针
运行脚本后,pod创建成功,并创建live文件
这时候我们删除了live文件会发现pod不会重启;修改启动探针时的command,改成检测/tmp/lives不存在的文件,那么会显示启动是吧。综上表示:
- 启动探针启动成功一次就不会重启;但是如果一开始就启动失败,会杀掉容器不断重启。
存活探针
exec方式
httpGet方式
tcpSocket方式
- 只有当启动探针成功之后,其他的探针才可以激活。否则都处于禁用状态。
- 自愈的原因:如果存活探针探测失败,容器会被杀死并重启整个pod。
就绪探针
- 就绪探针不是就绪状态是不能转发流量,恢复之后会重新加入到流量转发集群。
- 就绪探针不是就绪状态也不会重启
因为就绪探针没有自愈手段,工作中通常存活探针+就绪探针一起使用
启动钩子
lifecycle:pod声明周期的一部分。启动钩子可以自定义为容器内添加配置,或者初始化容器内的环境;退出钩子可以把冗余的信息删除,节约磁盘空间。
- 启动钩子:postStart,启动的时候需要执行的命令。
- 退出钩子:preStop,退出的时候执行的命令。
作业
定义一个pod,使用deployment控制器,副本数3
包含启动探针exec,包含就绪探针httpGet,包含存活探针tcpsocket,包含启动钩子和退出钩子。
运行之后,我们会发现在两个node宿主机上,创建了/opt/zw1的挂载卷,并有123.txt文件;关闭pod之后,会出现456.txt文件。