探針的使用
針對此類問題,kubernetes提供了探針
的方式對容器進行健康檢查。
k8s提供的探針分別為livenessprobe
和readinessprobe
,各node節點的kubelet根據探針的內容定期對容器執行探測,以達到對容器狀態的判斷。
livenessprobe:用於判斷容器是否存活(status是否為running狀態)。若存活探測失敗,則kubelet會kill掉該容器,並根據容器所設定的重啟策略進行下一步操作,
預設情況下,若未設定livenessprobe,則kubelet認為livenessprobe探針返回值為success。readinessprobe:用於判斷容器服務是否可用(status是否為ready狀態),達到ready狀態的容器可以進行接收請求。若就緒探測失敗,則端點控制器(endpoints)將從與pod匹配的所有service中刪除該pod的ip位址。
設定了該探針後,初始延遲之前探針的狀態為failure;端點控制器:如果未設定該探針,則預設狀態為success。
livenessprobe和readinessprobe均可配置以下三種方式,滿足常用的探測需求:
每種方式下均可配置以下探針執行時的引數:引數
型別說明
failurethreshold
當上一次探測結果為成功時,需要連續探測多少次失敗,才視為探測結果失敗。預設為3次,最少為1次
initialdelayseconds
容器啟動多少秒後,啟動第一次探測
periodseconds
執行探測的頻率,預設為10s,最少為1s
successthreshold
當上一次探測結果為失敗時,需要連續探測多少次成功,才視為探測結果成功。預設為1,且為了容器的正常啟動必須設定為1
timeoutseconds
探測超時的秒數,預設為1s,最小為1s
探測結果分為3種:
readinessprobe和livenessprobe(不限),這裡僅介紹探針在yaml檔案中的書寫方式。
$ cat
> liveness.yaml <<
eofapiversion: v1
kind: pod
metadata:
name: liveness
labels:
name: liveness
spec:
containers:
- name: liveness
image: busybox
imagepullpolicy: ifnotpresent
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -fr /tmp/health; sleep 600
livenessprobe:
exec:
command:
- cat
- /tmp/health
failurethreshold: 3
initialdelayseconds: 15
timeoutseconds: 1
periodseconds: 3
eof
當livenessprobe探測失敗時,重新啟動容器。
事例yaml檔案主要採用了livenessprobe探針,readinessprobe寫法類似,主要是探測失敗時,會從端點控制器中剔除相關pod並重啟。
還可以通過readinessgates
自定義探針,進行探測,具體可通過kubectl explain pod.spec.readinessgates
檢視。
K8S中pod健康狀態的檢查
什麼是 container probes 通過k8s的架構圖,我們可以發現,每個node節點上都有 kubelet 這個元件,container probe 容器探針 也就是容器的健康檢查是由 kubelet 定期執行的。container probe有以下兩種方式,分別為liveness prob...
k8s的健康檢查和可用性檢查
livenessprobe 健康狀態檢查,週期性檢查服務是否存活,檢查結果失敗,將重啟容器 readinessprobe 可用性檢查,週期性檢查服務是否可用,不可用將從service的endpoints中移除4.3.2exec 執行一段命令 返回值為0,非0 httpget 檢測某個 http 請求...
k8s集群建立pod,執行pod
k8s集群搭建好後,各個node的狀態變成了ready,就可以建立pod,建立完成後,就會預設的執行其中的container。使用乙個簡單yaml檔案描述pod apiversion v1 必選,版本號,例如v1,版本號必須可以用 kubectl api versions 查詢到 kind pod ...