StartupProbe:k8s1.16版本后新加的探测方式,用于判断容器内应用程序是否已经启动。如果配置了startupProbe,就会先禁止其他的探测,直到它成功为止,成功后将不在进行探测。
LivenessProbe(存活探针):用于探测容器是否运行,如果探测失败,kubelet会根据配置的重启策略进行相应的处理。若没有配置该探针,默认就是success。
存活性探测,判断pod是否需要重启。
ReadinessProbe(就绪探针):一般用于探测容器内的程序是否健康,它的返回值如果为success,那么就代表这个容器已经完成启动,并且程序已经是可以接受流量的状态。
就绪性探测,判断pod是否能够提供正常服务。
Pod探针的检测方式ExecAction:在容器内执行一个命令,如果返回值为0,则认为容器健康。
TCPSocketAction:通过TCP连接检查容器内的端口是否是通的,如果是通的就认为容器健康。
HTTPGetAction:通过应用程序暴露的API地址来检查程序是否是正常的,如果状态码为200~400之间,则认为容器健康。
查看coredns的yaml文件
[root@master01 ~]# kubectl edit deployment coredns -n kube-system
livenessProbe:
failureThreshold: 5 #检测失败5次表示未就绪
httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常
path: /health #URI地址
port: 8080 #端口号
scheme: HTTP #支持的协议http或者https
initialDelaySeconds: 60 #pod初始化时间
periodSeconds: 10 #pod检测间隔时间
successThreshold: 1 #检测成功为1表示就绪
timeoutSeconds: 5 #检测超时时间
每次检查的间隔是10秒,最长超时时间是5秒,也就是单次检查应该是10 + 5 = 15秒(periodSeconds + timeoutSeconds),并不是10 * 5 所以最长的重启时间为(10 + 5)* 5
操作步骤
1. 修改pod.yaml文件,增加startupProbe字段 2. kubectl create -f pod.yaml -n dgf #创建Pod 3. kubectl describe pod nginx -n dgf |tail -1 #查看pod日志
startupProbe、livenessProbe、ReadinessProbe之间的区别:
startupProbe: pod只检测一次,剩下的两种只要你的pod存在就会一直去检测
livenessProbe、ReadinessProbe:建议使用接口级的健康检查
Pod退出流程用户执行删除操作
[root@master01 ~]# kubectl delete pod nginx -n dgf
Pod状态会变成Terminating状态(这种状态停留时间默认30秒)
在30秒期间,会从Endpoint中删除该Pod的IP地址
最后执行yaml文件中PreStop中的指令
Pod的状态-
Pending:正在创建的Pod,但是Pod中的容器还没有完全被创建完成,这其中包含集群为容器创建网络,或者下载镜像的过程
-
Running:Pod内所有的容器都已经被创建,且至少一个容器正在处于运行状态、正在启动状态或者重启状态
-
Successed:Pod中所有容器都执行成功后退出,并且没有处于重启的容器
-
Faild:Pod中所有容器都已退出,但是至少还有一个容器退出时为失败状态
-
Unknow:由于一些原因,Pod的状态无法获取,通常是与Pod通信时错误导致的
-
Always:只要容器失效退出就重启容器
-
onFailure:当容器以非正常退出后重新启动容器
-
Never:无论容器状态如何,都不重新启动容器



