深究Kubernetes源码-Kubelet-4 Liveness/Readiness/Startup流程分析
基于kubernetes1.26
1 功能和模块
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
Kubernetes共支持3种类型的Probe:
Liveness:探测Container何时需要重启,例如Container内App运行遇到了死锁,进程不响应等,Kubelet会重启容器
Readiness:探测Container何时准备就绪,可以接受请求,当Readiness成功后,Pod将成为Service的Backend接受请求流量
Startup:探测Container何时启动成功,只有Startup成功后,才会开始Liveness和Readiness探测,避免Liveness/Readiness干扰容器启动,或拖慢容器启动速度,或者因为容器启动慢导致容器启动成功前因Liveness失败被Kubelet重启
目前共支持4种探测方式:
Exec: 执行一个命令进行探测
HTTPGet:发送Http Get探测请求
TCPSocket:使用TCP协议向某个TCP端口发送探测请求
GRPC(1.24Beta):使用GRPC协议向某个端口发送探测请求
看下核心模块k8s.io/kubernetes/pkg/kubelet/prober/manager类图,主要包括3部分
worker,每一个pod定义的每一个Probe都会启动一个worker.run协程进行探测,
prober,为具体探针,包含4种探测方式
resultManager,保存探测结果

2 流程分析
在kubelet Pod处理主流程分析中,syncLoopIteration处理Pod的3个来源就包括Liveness/Readiness/StartupProbe,在kubelet.syncPod,会调用probeManager.AddPod为Pod注册并启动对应的Probe协程,当状态发生变化时再通过Channal将结果推送回syncLoopIteration主流程处理
