🏷️个人主页:牵着猫散步的鼠鼠
🏷️系列专栏:Kubernetes渐进式学习-专栏
🏷️个人学习笔记,若有缺误,欢迎评论区指正
目录
1. 前言
2. 探针是什么
3. 探针的分类
3.1. StartupProbe(启动探针)
3.2. LivenessProbe(存活探针)
3.3. ReadinessProbe(就绪探针)
4. 探针探测方式
4.1. ExecAction(命令)
4.2. TCPSocketAction(TCP连接)
4.3. HTTPGetAction(Http连接)
6. 使用探针
5. 总结
1. 前言
我们在上次文章讲解了配置文件的编写,以及如何通过配置文件启动一个Pod资源,今天我们继续来学习Pod中一个重要的概念-探针。
2. 探针是什么
探针是Kubernetes中用于检查容器健康状况的机制。在Kubernetes中,探针可以确保Pod中的容器正常工作,并且可以在容器不健康的情况下自动重启容器,以保证应用程序的可用性和稳定性。我们在上一节配置文件中配置的重启策略,也是通过探针实现的。
3. 探针的分类
K8S中的探针主要分为三类:StartupProbe,LivenessProbe,ReadinessProbe
3.1. StartupProbe(启动探针)
k8s 1.16 版本新增的探针,用于判断应用程序是否已经启动了。
当配置了 startupProbe 后,会先禁用其他探针,直到 startupProbe 成功后,其他探针才会继续。
作用:由于有时候不能准确预估应用一定是多长时间启动成功,因此配置另外两种方式不方便配置初始化时长来检测,而配置了 statupProbe 后,只有在应用启动成功了,才会执行另外两种探针,可以更加方便的结合使用另外两种探针使用。
startupProbe:
httpGet:
path: /api/startup
port: 80
3.2. LivenessProbe(存活探针)
用于探测容器中的应用是否运行,如果探测失败,kubelet 会根据配置的重启策略进行重启,若没有配置,默认就认为容器启动成功,不会执行重启策略。
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
3.3. ReadinessProbe(就绪探针)
用于探测容器内的程序是否健康,它的返回值如果返回 success,那么就认为该容器已经完全启动,并且该容器是可以接收外部流量的。
readinessProbe:
failureThreshold: 3 # 错误次数
httpGet:
path: /ready
port: 8181
scheme: HTTP
periodSeconds: 10 # 间隔时间
successThreshold: 1
timeoutSeconds: 1
4. 探针探测方式
那么探针是如何判断容器的状态的呢,一般可以通过三种方式:
4.1. ExecAction(命令)
在容器内部执行一个命令,如果返回值为 0,则任务容器时健康的。
livenessProbe:
exec:
command:
- cat
- /health
4.2. TCPSocketAction(TCP连接)
通过 tcp 连接监测容器内端口是否开放,如果开放则证明该容器健康
livenessProbe:
tcpSocket:
port: 80
4.3. HTTPGetAction(Http连接)
生产环境用的较多的方式,发送 HTTP 请求到容器内的应用程序,如果接口返回的状态码在 200~400 之间,则认为容器健康。
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
httpHeaders:
- name: xxx
value: xxx
6. 使用探针
我们接下来在上节课案例的基础上运用一下探针,我们在原来的yaml配置文件中假如探针配置,使用http方式来探测启动情况,因为ngixn没有提供这个服务,理论上会启动失败
startupProbe: #应用启动探针配置
httpGet: #探测方式,基于http请求探测
path: fapi/path # http请求路径
port: 80 #请求端口
failureThreshold: 3 #失败多少次才算真正失败
periodSeconds: 10 #间隔时间
successThreshold: 1 #多少次监测成功算成功
timeoutSeconds: 5 #请求的超时时间
删除上次文章创建的pod
kubectl delete pod nginx-demo
重新启动pod
kubectl create -f nginx-demo.yaml
查看容器启动情况
kubectl describe po nginx-demo
可以看到最下方提示Http failure,但我们知道ngixn默认肯定是没有/api/path这个服务路径的,所以启动探针探测肯定是不成功的,这个pod的容器服务就被判定为未成功启动。
但是我们可以换一种探测方式,使用TCP方式去连接服务的80端口,这样更合适探测nginx服务是否正常启动
修改配置,将探测方法改为tcpSocket,探测端口为80
重启启动服务
kubectl delete pod nginx-demo
kubectl create -f nginx-demo.yaml
可以看到pod服务状态为Running,正常运行 。
5. 总结
在 Kubernetes(k8s)中,Pod 的探针(Probe)是一种健康检查机制,用于确保 Pod 中的容器能够正常工作。Kubernetes 通过探针来检查容器的状态,以确保服务能够可靠地运行。探针主要有三种类型:存活探针,就绪探针,启动探针。探针可以通过三种方式探测:HTTP GET方式,TCP套接字方式,Exec命令方式。探针机制是 Kubernetes 自动化管理和自愈能力的重要组成部分,它确保了 Pod 的健康状态,提高了应用的可用性和稳定性。