參考
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
進程健康檢查
健康檢查最簡單的方式就是檢查進程的狀態(tài)一汽。Kubelet 不斷的詢問 Docker daemon 這個容器進程是否還在運行蝴罪,如果沒有每强,這個容器就會被重啟。目前在所有 Kubernetes 的案例中百揭,這種健康檢查是一直開啟的嗅蔬。對與 Kubernetes 中所有運行的容器都是生效的蜒灰。然而授舟,在很多場景中這個低級別的健康檢查是沒有作用的:比如進程也一直在運行牡直,但是從應(yīng)用的角度看,代碼已經(jīng)死鎖纳决,而且不會有正確的響應(yīng)碰逸。
pod健康檢測機制
- LivenessProbe探針:
用于判斷容器是否存活,即Pod是否為running狀態(tài)阔加,如果LivenessProbe探針探測到容器不健康饵史,則kubelet將kill掉容器,并根據(jù)容器的重啟策略是否重啟胜榔,如果一個容器不包含LivenessProbe探針胳喷,則Kubelet認為容器的LivenessProbe探針的返回值永遠成功。 - ReadinessProbe探針:
用于判斷容器是否正常提供服務(wù)夭织,即容器的Ready是否為True吭露,是否可以接收請求,如果ReadinessProbe探測失敗尊惰,則容器的Ready將為False讲竿,控制器將此Pod的Endpoint從對應(yīng)的service的Endpoint列表中移除,從此不再將任何請求調(diào)度此Pod上弄屡,直到下次探測成功题禀。(剔除此pod不參與接收請求不會將流量轉(zhuǎn)發(fā)給此Pod)
目前,有三種類型的應(yīng)用健康檢查你可以選擇:
exec:通過執(zhí)行命令來檢查服務(wù)是否正常膀捷,回值為0則表示容器健康
httpGet方式:通過發(fā)送http請求檢查服務(wù)是否正常投剥,返回200-399狀態(tài)碼則表明容器健康
tcpSocket:通過容器的IP和Port執(zhí)行TCP檢查,如果能夠建立TCP連接担孔,則表明容器健康
探測的結(jié)果有以下三者之一:
Success:Container通過了檢查。
Failure:Container未通過檢查吃警。
Unknown:未能執(zhí)行檢查糕篇,因此不采取任何措施。
本環(huán)境使用httpGet方式
示例:
containers:
- name: nginx
image: nginx
readinessProbe:
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 120
periodSeconds: 15
timeoutSeconds: 2
livenessProbe:
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 180
timeoutSeconds: 2
periodSeconds: 15
----------
initialDelaySeconds:容器啟動后第一次執(zhí)行探測是需要等待多少秒酌心。
periodSeconds:執(zhí)行探測的頻率拌消。默認是10秒,最小1秒安券。
timeoutSeconds:探測超時時間墩崩。默認1秒,最小1秒侯勉。
successThreshold:探測失敗后鹦筹,最少連續(xù)探測成功多少次才被認定為成功。默認是1址貌。對于liveness必須是1铐拐。最小值是1徘键。
failureThreshold:探測成功后,最少連續(xù)探測失敗多少次才被認定為失敗遍蟋。默認是3吹害。最小值是1。
httpGet探測方式有如下可選的控制字段
host:要連接的主機名虚青,默認為Pod IP它呀,可以在http request head中設(shè)置host頭部。
httpHeaders:
- name: X-Custom-Header
value: Awesome
scheme: 用于連接host的協(xié)議棒厘,默認為HTTP纵穿。
path:http服務(wù)器上的訪問URI。
httpHeaders:自定義HTTP請求headers绊谭,HTTP允許重復(fù)headers政恍。
port: 容器上要訪問端口號或名稱
對于LivenessProbe和ReadinessProbe用法都一樣,擁有相同的參數(shù)和相同的監(jiān)測方式达传。
當(dāng)前對每一個Container都可以設(shè)置不同的restartpolicy篙耗,有三種值可以設(shè)置:
Always : 只要container退出就重新啟動
OnFailure : 當(dāng)container非正常退出后重新啟動
Never : 從不進行重新啟動
restartPolicy: [Always|Never|OnFailure]//重啟策略
如果restartpolicy沒有設(shè)置,那么默認值是Always宪赶。如果container需要重啟宗弯,僅僅是通過kubelet在當(dāng)前節(jié)點進行container級別的重啟。
如果要使用ReadinessProbe只需要將livenessProbe修改為readinessProbe即可.