優(yōu)雅啟動
很常見的一個場景,一個服務(wù)剛啟動佑力,可能會有一堆東西要加載(比如我這邊需要讀數(shù)據(jù)庫中一堆東西)需要一些時間红且,而這段時間里,我不希望kubernetes 把請求打到這些還沒初始化的pod上稿黍。
kubernetes提供了一個叫探針的東西,可以用來檢測pod是否就緒崩哩,只有就緒的情況才會把請求打過來巡球,如果非就緒狀態(tài),這些pod會從service的load balancer中暫時移除邓嘹。
探針可以是一個command或者是一個HTTP的請求酣栈,這邊使用的是一個HTTP請求的形式。需要保證程序在正常情況下可以訪問/heartbeat 汹押, 我一般會給這個接口一個success的返回矿筝。
readinessProbe:
httpGet:
path: /heartbeat
port: 8001
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 1
periodSeconds: 30
以上是一個readiness probe(就緒探針)的一般配置。
- httpGet 使用http get請求作為探針棚贾,里邊配置了get請求
- initialDelaySeconds 鈣素kubelet在第一次執(zhí)行探針之前要等待30秒
- timeoutSeconds 探針超時時間窖维,超過1s則認為探針失敗了
- periodSeconds 探針的執(zhí)行頻率榆综,默認是1s
- successThreshold:探測失敗后,最少連續(xù)探測成功多少次才被認定為成功铸史。默認是 1鼻疮。對于 liveness 必須是 1。最小值是 1琳轿。
- failureThreshold:探測成功后判沟,最少連續(xù)探測失敗多少次才被認定為失敗。默認是 3利赋。最小值是 1。
優(yōu)雅關(guān)閉
優(yōu)雅關(guān)閉是指在pod準備關(guān)閉時猩系,可能還需要做一些處理媚送,比如保存數(shù)據(jù)等。這期間服務(wù)不會接受新的請求寇甸。kubernetes提供了優(yōu)雅關(guān)閉的配置
terminationGracePeriodSeconds: 60
在給pod發(fā)出關(guān)閉指令時塘偎,k8s將會給應(yīng)用發(fā)送SIGTERM信號,程序只需要捕獲SIGTERM信號并做相應(yīng)處理即可拿霉。配置為k8s會等待60秒后關(guān)閉吟秩。