Kubernetes Pod 探针:liveness / readiness / startup 该用哪一个
ä¸ã为ä»ä¹éè¦æ¢é
容å¨éçè¿ç¨å¯è½"æ´»çä½å·²ç»ä¸è½ç¨äº"ï¼JVM å åææ»¡å¼å§é¢ç¹ Full GCãRedis 䏻仿äºåªè¯»ãPython æå¡å ä¸ºä¸æ¬¡åè¯·æ±æçº¿ç¨æ± åå ãK8s ä¸ä¼ä¸»å¨å¤æè¿äºï¼å®åªè½çå°è¿ç¨è¿å¨ï¼äºæ¯ç»§ç»ææµéæè¿æ¥ï¼æ é被æ¾å¤§ï¼ææ¥æ¶åçä¸å°ä»»ä½å¼å¸¸æ¥å¿ãæ¢éçä½ç¨ï¼å°±æ¯ç» kubelet ä¸ä¸ªå®æé®è¯çæºä¼ï¼é®ä¸æ¬¡ï¼æ ¹æ®ç»æå³å®è¦ä¸è¦éå¯å®¹å¨ãè¦ä¸è¦æå®ä» Service å端ææã
äºãä¸ç§æ¢éçèè´£åå·¥
| æ¢é | 失败åçå¤ç | å ¸ååºæ¯ |
|---|---|---|
| startupProbe | å¤±è´¥åæ failureThreshold éè¯ï¼è¶ éåéå¯å®¹å¨ | å¯å¨æ ¢çåºç¨ï¼JVM Spring Boot(60~300 ç§)ãå¤§æ¨¡åæ¨çéåã馿¬¡æå大éååé¢ç |
| readinessProbe | å¤±è´¥åæ Pod ä» Service ç«¯ç¹æé¤ï¼ä¸éå¯å®¹å¨ | ä¾èµæ°æ®åº/ç¼åçåºç¨ï¼è¿ä¸ä¸æä¾èµæªå°±ç»ªæ¶ä¸è½æ¥æµé |
| livenessProbe | 失败åéå¯å®¹å¨(éå¯é£æ´çå¸¸è§æ¥æº) | æ»éã线ç¨èå°½ãååé»è¾æ ååºè¿ç±»"æ´»ç使²¡æ"çåºæ¯ |
ä¸å¥è¯åºåï¼startup 管"ä»ä¹æ¶åç®å¯å¨å®æ"ï¼readiness 管"è½ä¸è½æ¥æµé"ï¼liveness 管"è¿è½ä¸è½æ¢æ"ãåªåé¨ç½²ä¸åæµéçåºç¨ï¼æ¯å¦æ¹å¤çï¼é常åªéè¦ startup + livenessã
ä¸ãä¸ä¸ªæå°å¯ç¨çé ç½®
livenessProbe:
httpGet: # ä¹å¯ä»¥ç¨ tcpSocket æ exec
path: /healthz
port: 8080
initialDelaySeconds: 30 # å¯å¨åå¤ä¹
å¼å§ç¬¬ä¸æ¬¡æ¢æµ
periodSeconds: 10 # æ¯ 10 ç§æ¢æµä¸æ¬¡
timeoutSeconds: 3 # 忬¡æ¢æµè¶
æ¶ 3 ç§
successThreshold: 1 # è¿ç» 1 次æå峿¢å¤
failureThreshold: 3 # è¿ç» 3 次失败触åéå¯
readinessProbe:
httpGet:
path: /ready
port: 8080
periodSeconds: 10
failureThreshold: 3
startupProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 30
periodSeconds: 10
䏿¡æ¢éå¯ä»¥å ±ç¨åä¸è·¯å¾ï¼ä½è¯ä¹ä¸åï¼å¯å¨å®æåå°±ä¸åæ startup çé¢å¤"宽容æ"ï¼å¦æ liveness ç initialDelaySeconds 设å¾å¤ªå°ï¼æ ¢åºç¨ä¼è¢«åå¤éå¯ââè¿å 乿¯æå¸¸è§ççäº§äºæ ã
åãåæ°é个解é
- initialDelaySecondsï¼ä» å¯¹ç¬¬ä¸æ¬¡æ¢æµçæï¼ä¸æ¯"å»¶è¿æ¥åæµé"ãliveness 设 30ãstartup 设 300ï¼æå³çå¯å¨åæä¸ä¼å ä¸ºè¿æ²¡èµ·æ¥å°±è¢«å¤æ»ã
- periodSecondsï¼å ¨å±èå¥ï¼æå° 1 ç§ï¼é»è®¤ 10 ç§ãæ¢éç HTTP è¯·æ±æ¬èº«æè¶ æ¶ï¼å¨æä¸è½å°äºè¶ æ¶ï¼å¦å请æ±è¿å¨è·å°±è¢«ä¸ä¸ä¸ªè¦çã
- timeoutSecondsï¼å¿ é¡»å°äºè¯·æ±å®é èæ¶ä¸éï¼å¦åæ°¸è¿å¤å®è¶ æ¶ï¼ä½è®¾å¾å¤ªå°ä¼è¯¯ææ£å¸¸çæ ¢æ¥è¯¢æ¥å£ã
- failureThresholdï¼è¿ç»å¤±è´¥æ¬¡æ°ï¼ä¸æ¯è¿ç»æ¶é¿ã3 次失败 à 10 ç§ = 30 ç§å 没好就éå¯ï¼è®°å¾åä¸å¡æ¢å¤æ¶é´å¯¹é½ã
- successThresholdï¼åªæ liveness/readiness å¨å¤±è´¥åéæ°è®¡æ°æ¶æææä¹ï¼ä¸è¬ä¿æ 1ã
äºã常è§è¯¯ç¨ä¸ææ¥
误ç¨ä¸ï¼ç¨ liveness åä¾èµæ£æ¥ãæ°æ®åºéå¯æé´ Pod è¢«å¤æ»ï¼åºç¨è¢« K8s åå¤æï¼æ¢å¤æ¶é´è¢«æé¿ãä¾èµä¸å¯ç¨çåºè¯¥ç¨ readiness ææµéï¼è䏿¯éå¯ã
误ç¨äºï¼æ¢éæ¥å£å¤ªæ ¢ã/healthz é顺æåäºå¥åº·ç¼åãDashboard æ±æ»ï¼ä¸ä¸ªæ¥å£ 5 ç§ï¼å¿ ç¶è¢«å¤å®è¶ æ¶ãå¥åº·æ£æ¥æ¥å£è¦è½ç«å³è¿åï¼æå¤å 毫ç§ã
ææ¥é¡ºåºï¼å
ç kubectl describe pod éç Eventsï¼ç¡®è®¤æ¯åªæ¡æ¢éãä»ä¹æ¶åå¼å§å¤±è´¥çï¼åç kubectl get pod -w ç Ready/Restarts å夿æ¯å¦éå¯è¿ï¼æåç»å½ Pod éç¨åæ ·çå½ä»¤æå·¥æ¢æµä¸æ¬¡ï¼æ¯å¦ curl -v localhost:8080/healthzï¼çè¿åç åèæ¶ã
å ãå®ç¨æå·§
- åºç¡è®¾æ½è¦èªå·±åå¥åº·æ£æ¥ï¼Spring Boot ç¨ spring-boot-starter-actuator æ´é² /actuator/healthï¼é å management.endpoint.health.probes.enabled=true ä¼èªå¨äº§åº liveness/readiness 端ç¹ã
- å¯å¨é¶æ®µæ ¢å°±åªé startupProbe å ä½ï¼ä¸è¦ç¨ liveness ç宽 initialDelay æ©çé®é¢ââå®ä¼æ"å¯å¨æ ¢"åæ"æ°¸è¿éå¯"ã
- ä¼é ä¸çº¿ï¼readiness ææµ + preStop sleep(5~10 ç§) + terminationGracePeriodSecondsï¼å¯ä»¥æ¾èåå°æ»å¨æ´æ°æ¶ç 502ã
- ä¸è¦å¨æ¢ééæ§è¡éä¸å¡ï¼ä¹ä¸è¦ç¨ exec è·ä¾èµå¤é¨ç½ç»çå½ä»¤ï¼å®¹å¨å ç¯å¢ååå§åé¶æ®µå·®å¼å¾å¤§ã
- 点赞
- 收藏
- 关注作者
评论(0)