深究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:探測(cè)Container何時(shí)需要重啟,例如Container內(nèi)App運(yùn)行遇到了死鎖,進(jìn)程不響應(yīng)等,Kubelet會(huì)重啟容器
Readiness:探測(cè)Container何時(shí)準(zhǔn)備就緒,可以接受請(qǐng)求,當(dāng)Readiness成功后,Pod將成為Service的Backend接受請(qǐng)求流量
Startup:探測(cè)Container何時(shí)啟動(dòng)成功,只有Startup成功后,才會(huì)開始Liveness和Readiness探測(cè),避免Liveness/Readiness干擾容器啟動(dòng),或拖慢容器啟動(dòng)速度,或者因?yàn)槿萜鲉?dòng)慢導(dǎo)致容器啟動(dòng)成功前因Liveness失敗被Kubelet重啟
目前共支持4種探測(cè)方式:
Exec: 執(zhí)行一個(gè)命令進(jìn)行探測(cè)
HTTPGet:發(fā)送Http Get探測(cè)請(qǐng)求
TCPSocket:使用TCP協(xié)議向某個(gè)TCP端口發(fā)送探測(cè)請(qǐng)求
GRPC(1.24Beta):使用GRPC協(xié)議向某個(gè)端口發(fā)送探測(cè)請(qǐng)求
看下核心模塊k8s.io/kubernetes/pkg/kubelet/prober/manager類圖,主要包括3部分
worker,每一個(gè)pod定義的每一個(gè)Probe都會(huì)啟動(dòng)一個(gè)worker.run協(xié)程進(jìn)行探測(cè),
prober,為具體探針,包含4種探測(cè)方式
resultManager,保存探測(cè)結(jié)果

2 流程分析
在kubelet Pod處理主流程分析中,syncLoopIteration處理Pod的3個(gè)來(lái)源就包括Liveness/Readiness/StartupProbe,在kubelet.syncPod,會(huì)調(diào)用probeManager.AddPod為Pod注冊(cè)并啟動(dòng)對(duì)應(yīng)的Probe協(xié)程,當(dāng)狀態(tài)發(fā)生變化時(shí)再通過(guò)Channal將結(jié)果推送回syncLoopIteration主流程處理
