K8s探針

K8s中存在兩種類型的探針:liveness probe和readiness probe。

liveness probe(存活探針)

用于判斷容器是否存活,即Pod是否為running狀態(tài),如果LivenessProbe探針探測到容器不健康,則kubelet將kill掉容器,并根據(jù)容器的重啟策略是否重啟。如果一個容器不包含LivenessProbe探針,則Kubelet認(rèn)為容器的LivenessProbe探針的返回值永遠(yuǎn)成功。

有時應(yīng)用程序可能因?yàn)槟承┰颍ê蠖朔?wù)故障等)導(dǎo)致暫時無法對外提供服務(wù),但應(yīng)用軟件沒有終止,導(dǎo)致K8S無法隔離有故障的pod,調(diào)用者可能會訪問到有故障的pod,導(dǎo)致業(yè)務(wù)不穩(wěn)定。K8S提供livenessProbe來檢測應(yīng)用程序是否正常運(yùn)行,并且對相應(yīng)狀況進(jìn)行相應(yīng)的補(bǔ)救措施。

注意,liveness探測失敗并一定不會重啟pod,pod是否會重啟由你的restart policy 控制。

readiness probe(就緒探針)

用于判斷容器是否啟動完成,即容器的Ready是否為True,可以接收請求,如果ReadinessProbe探測失敗,則容器的Ready將為False,控制器將此Pod的Endpoint從對應(yīng)的service的Endpoint列表中移除,從此不再將任何請求調(diào)度此Pod上,直到下次探測成功。通過使用Readiness探針,Kubernetes能夠等待應(yīng)用程序完全啟動,然后才允許服務(wù)將流量發(fā)送到新副本。

比如使用tomcat的應(yīng)用程序來說,并不是簡單地說tomcat啟動成功就可以對外提供服務(wù)的,還需要等待spring容器初始化,數(shù)據(jù)庫連接沒連上等等。對于spring boot應(yīng)用,默認(rèn)的actuator帶有/health接口,可以用來進(jìn)行啟動成功的判斷。

每類探針都支持三種探測方法:

  • exec:通過執(zhí)行命令來檢查服務(wù)是否正常,針對復(fù)雜檢測或無HTTP接口的服務(wù),命令返回值為0則表示容器健康。
  • httpGet:通過發(fā)送http請求檢查服務(wù)是否正常,返回200-399狀態(tài)碼則表明容器健康。
  • tcpSocket:通過容器的IP和Port執(zhí)行TCP檢查,如果能夠建立TCP連接,則表明容器健康。

探針探測的結(jié)果有以下三者之一:

  • Success:Container通過了檢查。
  • Failure:Container未通過檢查。
  • Unknown:未能執(zhí)行檢查,因此不采取任何措施。

Pod重啟策略:

  • Always: 總是重啟
  • OnFailure: 如果失敗就重啟
  • Never: 永遠(yuǎn)不重啟

例子

apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: k8s.gcr.io/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

探針(Probe)有許多可選字段,可以用來更加精確的控制Liveness和Readiness兩種探針的行為。這些參數(shù)包括:

  • initialDelaySeconds:容器啟動后第一次執(zhí)行探測是需要等待多少秒。
  • periodSeconds:執(zhí)行探測的頻率。默認(rèn)是10秒,最小1秒。
  • timeoutSeconds:探測超時時間。默認(rèn)1秒,最小1秒。
  • successThreshold:探測失敗后,最少連續(xù)探測成功多少次才被認(rèn)定為成功。默認(rèn)是1。對于liveness必須是1。最小值是1。
  • failureThreshold:探測成功后,最少連續(xù)探測失敗多少次才被認(rèn)定為失敗。默認(rèn)是3。最小值是1。

參考文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容