一、探针的概念
一般时候,探针的设置,都是为了优化业务时,需要做的事情;属于后期工作;
1,探针的分类
1,健康状态检查探针:livenessProbe
当我们设置了这个探针之后,检查不通过,pod容器就会重启,周期性检查服务是否存在;
- 检查若失败,将“重启容器”,本质上就是删除原来的容器,重新创建;
- 若不设置健康检查探针,默认就是成功的,检查成功;
2,可用性检查探针:readinessProbe
当我们设置这个探针之后,检查不通过,pod容器不会重启,周期性检查服务是否可用,从而判断容器是否准备就绪;
- 若检查服务不可用,就是检查失败,则会将pod从service的endppints列表中移除;
- 若检查可用,则会将pod重新添加会secvice的endppints列表中;
- 若不设置这个探针,则默认是检查成功状态;
3,启动探针:startupProbe
从k8s的1.16版本之后才新加的功能,1.16版本之前没有这个探针;
- 如果设置了这个探针,则其他所有探针都会被禁用,指导这个探针检查成功为止;
- 如果检查失败,kubelet会杀死容器,而容器依照我们的重启策略进行重启;
- 如果没有设置这个探针,默认是成功状态;
2,探针使用的检查方法
1,命令检查:exec
就是执行一段命令,根据返回的结果判断是否成功,返回0或者非0(类似shell中echo $?)
2,http请求检查:httpGet
根据返回的状态码,判断是否正常;
3,端口检查:tcpSocket
测试某个TCP端口是否能够链接,类似于telnet,nc等网络工具;
4,grpc:(了解即可)
二、livenessProbe健康检查探针
1,exec方式
[root@k8s231 pod]# cat 12-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: mylinux-livenessprobe
spec:
containers:
- name: c1
image: nginx:1.20.1-alpine
#声明健康检查探针livenessProbe
livenessProbe:
#使用exec方式做检查;
exec:
#自定义检查命令
command:
- cat
- /etc/hosts
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
2,httpGet检查方式
[root@k8s231 pod]# cat 12-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: mylinux-livenessprobe
spec:
containers:
- name: c1
image: nginx:1.20.1-alpine
#声明健康检查探针livenessProbe
livenessProbe:
#使用httpGet方式做检查;
httpGet:
#检查那个端口,通过哪个端口访问页面?
port: 80
#指定探测的页面路径
path: /usr/share/nginx/html/index.html
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
3,tcpSocket检测方式
[root@k8s231 pod]# cat 12-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: mylinux-livenessprobe
spec:
containers:
- name: c1
image: nginx:1.20.1-alpine
#声明健康检查探针livenessProbe
livenessProbe:
#使用tcpSocket方式做检查;
tcpSocket:
#检查哪一个端口
port: 80
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
三、readinessProbe可用性检查
[root@k8s231 pod]# cat 12-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: mylinux-livenessprobe
spec:
containers:
- name: c1
image: nginx:1.20.1-alpine
#声明健康检查探针readinessProbe
readinessProbe:
#使用tcpSocket方式做检查;
tcpSocket:
#检查哪一个端口
port: 80
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
四、startupProbe启动检查
[root@k8s231 pod]# cat 12-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: mylinux-livenessprobe
spec:
containers:
- name: c1
image: nginx:1.20.1-alpine
#声明启动探针startupProbe
startupProbe:
#使用tcpSocket方式做检查;
tcpSocket:
#检查哪一个端口
port: 80
#检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
failureThreshold: 3
#容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
initialDelaySeconds: 15
#探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
periodSeconds: 1
#检查成功几次算【存活】,默认1,最小值1
successThreshold: 1
#一次检查超时时间,默认1(秒),最小值1(秒)
timeoutSeconds: 1
五、三个探针一起使用
[root@k8s231 pod]# cat 12-probe.yaml
apiVersion: v1
kind: Pod
metadata:
name: mylinux-livenessprobe
spec:
containers:
- name: c1
image: nginx:1.20.1-alpine
#声明启动探针startupProbe
startupProbe:
tcpSocket:
port: 80
failureThreshold: 3
initialDelaySeconds: 15
periodSeconds: 1
successThreshold: 1
timeoutSeconds: 1
#声明启动探针livenessProbe
livenessProbe:
tcpSocket:
port: 80
failureThreshold: 3
initialDelaySeconds: 15
periodSeconds: 1
successThreshold: 1
timeoutSeconds: 1
#声明启动探针readinessProbe
readinessProbe:
tcpSocket:
port: 80
failureThreshold: 3
initialDelaySeconds: 15
periodSeconds: 1
successThreshold: 1
timeoutSeconds: 1