存活探针用于周期性监控应用程序是否运行。存活探针配置如下:
在上述配置中,“livenessProbe”部分定义了存活探针,各字段含义如下。
httpGet:发送HTTP请求来判断健康状态。
· path:访问路径,默认是“/”。
· port:请求端口。
此外,还可以指定:
· host:请求的IP地址,默认是Pod IP。
· scheme:请求协议,支持HTTP和HTTPS,默认是HTTP。
· httpHeaders:自定义HTTP头。
initialDelaySeconds:容器启动后等待多少秒开始执行探针,这通常根据应用程序的启动时间来设置。
periodSeconds:执行探针的时间间隔(单位秒),默认是10秒。
综上所述,kubelet将在容器启动10秒后发送第一个探针,该探针向地址“http://<Pod IP>:80/index.html”发送HTTP请求。如果响应的HTTP状态码不是200~400,则kubelet组件判定探针失败,触发重新启动容器。随后,每间隔20秒执行一次存活探针。
创建Pod资源:
[root@k8s-master ~]# kubectl apply -f pod-liveness.yaml
通过“kubectl logs pod-liveness”命令查看Pod日志,将看到探针发送的HTTP请求日志,如下所示:
192.168.1.73 - - [12/Jun/2023:06:06:20 +0000] "GET /index.html HTTP/1.1" 200 615 "-" "kube-probe/1.26" "-"
我们尝试模拟应用程序故障,看看会发生什么。
删除容器中的“index.html”文件,使其无法被访问:
[root@k8s-master ~]# kubectl exec -it pod-liveness -- rm -f /usr/share/ nginx/html/index.html
在Pod日志中,你将看到访问请求失败的日志,如下所示:
192.168.1.72 - - [22/Dec/2023:02:27:26 +0000] "GET /index.html HTTP/1.1" 404 153 "-" "kube-probe/1.28" "-"
查看Pod事件,你也可以看到探针执行失败并触发重新启动容器:
同时,Pod对象中记录了重新启动的次数:
如果下一次探针仍然失败,则继续执行相同的操作。
实际上,重新启动容器的过程就是销毁并重新创建当前容器,以将其恢复到初始状态。