本文會總結(jié)在工作過程中踩過的坑,以及平??醇夹g(shù)分享帖中覺得比較有用的經(jīng)驗,在這里做下匯總,可能內(nèi)容稍微有點雜,但在我看在都是用時間換來的經(jīng)驗值,希望對讀者有所幫助。
1、preStop鉤子使用
先簡單介紹下preStop,該鉤子在容器刪除前觸發(fā),一般用來清理現(xiàn)場,作用蠻大的,下面介紹兩個使用preStop鉤子的實際場景。
1.1 容器保留現(xiàn)場
我們都知道,很多情況下容器都是無狀態(tài)的,當(dāng)容器發(fā)生內(nèi)存異常,導(dǎo)致liveness probe檢測失敗重啟,可以使用preStop鉤子將應(yīng)用的coredump日志進行導(dǎo)出,然后分析。
1.2 使用preStop Hook保證服務(wù)安全退出
在服務(wù)更新過程中,服務(wù)容器被直接終止,由于Eureka Server有緩沖,部分請求任然會發(fā)送到已經(jīng)終止的容器,為了減少錯誤,可以在容器退出前主動從Eureka Server中注銷這個節(jié)點,可以使用preStop這個鉤子來實現(xiàn)。
2、Health Check應(yīng)用場景
k8s集群中默認提供兩種探針:liveness probe和readiness probe,先簡單對比下兩種的區(qū)別。
(1)liveness探測失敗是重啟容器,readiness探測失敗是將容器設(shè)置為not ready,不接受service轉(zhuǎn)發(fā)的請求。
(2)liveness探測和readiness探測是獨立執(zhí)行的,二者沒有依賴,可以單獨使用,也可以同時使用。
以下描述兩種使用readiness探測的場景
(1)在服務(wù)scale up過程中,可以通過readiness探測容器是否就緒,避免將請求發(fā)送到還沒有ready好的backend中。
(2)在服務(wù)rolling update過程中,新副本只有通過readiness探測,才會被添加到service的endpoint記錄中,如果沒有通過探測,現(xiàn)有副本不會被全部替換,業(yè)務(wù)仍然正常運行。
上面描述的這兩種場景,都是保證服務(wù)在進行滾動更新時,最大程度保證業(yè)務(wù)零中斷。