kubernets探针
介绍
kubernetes一共有2种探针:
存活探针
就绪探针
就绪探针
就绪探针工作介绍
就绪探针会定期调用,检查特定的pod是否准备就绪接收客户端的请求.当容器启动时,会等待一个时间,然后执行第一次准备就绪检查.如果某个Pod没有通过探针探测,则会从服务中删除该pod,如果pod再次准备就绪,则会重新添加到Service
就绪探针确保客户端只与正常的Pod交互.
就绪探针的类型
- Exec探针 . 使用command命令,如果命令结果返回0,则说明pod准备就绪.
- HTTP GET探针. 向容器发送HTTP GET.通过响应状态码判断pod容器是否准备好
- TCP socket探针.尝试连接Pod容器的TCP端口.判断pod容器的某个端口是否正常工作
向pod容器添加探针
编辑kubia的rc配置文件,在spec.containers下添加readinessProbe配置
1 | apiVersion: v1 |
重新编辑rc文件后,存活探针并不会对已经存在的Pod生效.删除所有pod,等待rc重新创建
让yaml文件生效
1 | [root@k8s-master ~]# kubectl apply -f kubia-rc.yaml |
删除Pods,重新创建后,查看pods的状态
1 | [root@k8s-master ~]# kubectl get pods |
pods的READY是0.表示pod容器虽然正在运行中,但是未准备就绪
向其中一个pod容器创建/var/ready文件
1 | [root@k8s-master ~]# kubectl exec kubia-6gvhg -- touch /var/ready |
但是容器并不会马上就绪.这是因为pod默认每隔10s探测一次.通过kubectl describe pod kubia-6gvhg
可以看到就绪探针的策略
1 | [root@k8s-master ~]# kubectl describe pods kubia-6gvhg |
10s后,可以看到就只有一个pod准备就绪
1 | [root@k8s-master ~]# kubectl get pods |
通过测试发现,客户端的请求永远只转发到已经准备就绪的Pod容器内,而其他容器则不接受请求
1 | [work@k8s-node1 ~]$ while true;do curl http://10.96.170.37;sleep 1;done |
其他两种探测类型的是否方法也类似