ããŒãã 翻蚳ãïŒZalando ã®ãªãŒã ãšã³ãžãã¢ã§ãã Henning Jacobs ã¯ãKubernetes ãŠãŒã¶ãŒã®é㧠liveness (ããã³ readiness) ãããŒãã®ç®çãšãã®æ£ãã䜿çšæ¹æ³ãç解ããéã«åé¡ãããããšã«ç¹°ãè¿ãæ°ã¥ããŠããŸããã ãããã£ãŠã圌ã¯èªåã®èãããã®ååãã¡ã¢ã«ãŸãšããŸãããããã¯æçµçã« K8s ããã¥ã¡ã³ãã®äžéšã«ãªããŸãã
ãã«ã¹ãã§ãã¯ãKubernetes ã§ã¯æ¬¡ã®ããã«åŒã°ããŸãã 掻æ§ãããŒã (ã€ãŸããæåéããçåæ§ãã¹ãã - ããããã®ç¿»èš³)ãéåžžã«å±éºãªå¯èœæ§ããããŸãã å¯èœã§ããã°ãããããé¿ããããšããå§ãããŸããå¯äžã®äŸå€ã¯ãããããæ¬åœã«å¿
èŠã§ããã®äœ¿çšã®è©³çŽ°ãšçµæãååã«ç解ããŠããå Žåã§ãã ãã®åºçç©ã§ã¯ã皌åç¶æ³ãšæºåç¶æ³ã®ãã§ãã¯ã«ã€ããŠèª¬æããã©ã®ãããªå Žåã«åœãŠã¯ãŸããã«ã€ããŠã説æããŸãã ã³ã¹ã ãããŠãããã䜿çšãã¹ãã§ã¯ãããŸããã
ç§ã®ååã® Sandor ã¯æè¿ãreadiness/liveness ãããŒãã®äœ¿çšã«é¢é£ãããšã©ãŒãªã©ãééããæãäžè¬çãªãšã©ãŒã Twitter ã§å ±æããŸããã
æ£ããæ§æãããŠããªã livenessProbe
é«è² è·ç¶æ³ (éªã ããŸåŒã·ã£ããããŠã³ + ã³ã³ãã/ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéãé·ããªãå¯èœæ§) ãæªåãããäŸåé¢ä¿ã®äœäžãªã©ã®ä»ã®æªåœ±é¿ãåŒãèµ·ããå¯èœæ§ããããŸãã (ãã¡ããåç
§
äžè¬çãªã¡ãã»ãŒãž ã掻æ§ãããŒãã䜿çšããªãã§ãã ããã ãã®å Žåãããã¯ããŸã圹ã«ç«ããªãã®ã§ãreadiness ãã§ãã¯ãš liveness ãã§ãã¯ãäœã®ããã«è¡ãããããèŠãŠã¿ãŸãããã
泚: 以äžã®ãã¹ãã®å€§éšåã¯ãããšããš Zalando ã®å éšéçºè ããã¥ã¡ã³ãã«å«ãŸããŠããŸããã
æºåç¶æ³ãšæŽ»æ§åºŠã®ãã§ãã¯
Kubernetes ã¯ã次㮠XNUMX ã€ã®éèŠãªã¡ã«ããºã ãæäŸããŸãã
Kubernetes ã®äœ¿çšæ³ ã¬ãã£ãã¹ãããŒãã³ã³ããããã€ãã©ãã£ãã¯ãåãå ¥ããæºåãã§ããŠããããç解ããŸãã ãã¹ãŠã®ã³ã³ãããŒã®æºåãã§ããŠããå Žåããããã¯äœ¿çšå¯èœã§ãããšã¿ãªãããŸãã ãã®ã¡ã«ããºã ã®äœ¿çšæ³ã® XNUMX ã€ã¯ãKubernetes ãµãŒãã¹ (ç¹ã« Ingress) ã®ããã¯ãšã³ããšããŠäœ¿çšãããããããå¶åŸ¡ããããšã§ãã
掻æ§ãããŒã Kubernetes ãã³ã³ãããåèµ·åããææãç解ã§ããããã«ããŸãã ããšãã°ããã®ãããªãã§ãã¯ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã XNUMX ã€ã®å Žæã§ã¹ã¿ãã¯ããå Žåã«ãããããã¯ãé»æ¢ã§ããŸãã ãã®ç¶æ ã§ã³ã³ãããåèµ·åãããšããšã©ãŒããã£ãŠãã¢ããªã±ãŒã·ã§ã³ãéå§ã§ããŸãããé£éçãªé害ãçºçããå¯èœæ§ããããŸã (以äžãåç §)ã
ã©ã€ããã¹/æºåç¶æ³ãã§ãã¯ã«å€±æããã¢ããªã±ãŒã·ã§ã³æŽæ°ããããã€ããããšãããšãKubernetes ãã¹ããŒã¿ã¹ãåŸ
æ©ããããããã®ããŒã«ã¢ãŠãã¯åæ¢ããŸãã Ready
ãã¹ãŠã®ãããããã
äŸ
ããã¯ããã¹ããã§ãã¯ãã Readiness Probe ã®äŸã§ãã /health
ããã©ã«ãèšå®ã® HTTP çµç± (ã€ã³ã¿ãŒãã«ïŒ 10ç§ã ã¿ã€ã ã¢ãŠãïŒ 1ç§ã æåã®ãããå€ïŒ1ã é害ã®ãããå€: 3):
# ÑаÑÑÑ ÐŸÐ±ÑегП ПпОÑÐ°ÐœÐžÑ deployment'а/ÑÑека
podTemplate:
spec:
containers:
- name: my-container
# ...
readinessProbe:
httpGet:
path: /health
port: 8080
æèš
- HTTP ãšã³ããã€ã³ããåãããã€ã¯ããµãŒãã¹ (REST ãªã©) ã®å Žå åžžã« Readiness ãããŒããå®çŸ©ãããã¢ããªã±ãŒã·ã§ã³ (ããã) ããã©ãã£ãã¯ãåãå ¥ããæºåãã§ããŠãããã©ããã確èªããŸãã
- Readiness Probe ã確èªããŠãã ãã å®éã® Web ãµãŒã㌠ããŒãã®å¯çšæ§ãã«ããŒããŸãã:
- ãadminããŸãã¯ãmanagementããšåŒã°ãã管çç®çã®ããŒã (9090 ãªã©) ã䜿çšããŸãã
readinessProbe
ããã©ã€ã㪠HTTP ããŒã (8080 ãªã©) ããã©ãã£ãã¯ãåãå ¥ããæºåãã§ããŠããå Žåã«ã®ã¿ããšã³ããã€ã³ãã OK ãè¿ãããã«ããŠãã ãã*ã*ç§ã¯ããããèµ·ãããªãã£ãã¶ã©ã³ãã§ã®å°ãªããšã XNUMX ã€ã®ã±ãŒã¹ãç¥ã£ãŠããŸãã
readinessProbe
ã管çãããŒãã確èªããŸãããããã£ãã·ã¥ã®ããŒãã«åé¡ããã£ãããããµãŒããŒèªäœãåäœãå§ããŸããã§ããã - Readiness Probe ãå¥ã®ããŒãã«æ¥ç¶ãããšãã¡ã€ã³ ããŒãã®éè² è·ããã«ã¹ ãã§ãã¯ã«åæ ãããªããªãå¯èœæ§ããããŸã (ã€ãŸãããµãŒããŒäžã®ã¹ã¬ãã ããŒã«ããã£ã±ãã§ãã£ãŠãããã«ã¹ ãã§ãã¯ã§ã¯ãã¹ãŠãæ£åžžã§ããããšã瀺ãããŸã)ã ïŒã
- ãadminããŸãã¯ãmanagementããšåŒã°ãã管çç®çã®ããŒã (9090 ãªã©) ã䜿çšããŸãã
- ããã確èªããŠãã ãã readiness Probe ã«ããããŒã¿ããŒã¹ã®åæå/移è¡ãå¯èœã«ãªããŸã;
- ãããå®çŸããæãç°¡åãªæ¹æ³ã¯ãåæåãå®äºããåŸã§ã®ã¿ HTTP ãµãŒããŒã«æ¥ç¶ããããšã§ã (ããšãã°ãããŒã¿ããŒã¹ã移è¡ãããªã©)ã
ãã©ã€ãŠã§ã€ çã ãïŒ; ã€ãŸãããã«ã¹ ãã§ãã¯ã®ã¹ããŒã¿ã¹ãå€æŽããã®ã§ã¯ãªããããŒã¿ããŒã¹ã®ç§»è¡ãå®äºãããŸã§ Web ãµãŒããŒãèµ·åããªãã ãã§ã*ã* ãããã®å€éšã® init ã³ã³ããããããŒã¿ããŒã¹ç§»è¡ãå®è¡ããããšãã§ããŸãã ç§ã¯ä»ã§ãèªå·±å®çµåã¢ããªã±ãŒã·ã§ã³ãã€ãŸãã¢ããªã±ãŒã·ã§ã³ ã³ã³ãããå€éšèª¿æŽãªãã§ããŒã¿ããŒã¹ãæãŸããç¶æ ã«ããæ¹æ³ãç¥ã£ãŠããã¢ããªã±ãŒã·ã§ã³ã®ãã¡ã³ã§ãã
- ãããå®çŸããæãç°¡åãªæ¹æ³ã¯ãåæåãå®äºããåŸã§ã®ã¿ HTTP ãµãŒããŒã«æ¥ç¶ããããšã§ã (ããšãã°ãããŒã¿ããŒã¹ã移è¡ãããªã©)ã
- 䜿çš
httpGet
äžè¬çãªãã«ã¹ ãã§ã㯠ãšã³ããã€ã³ã (ããšãã°ã/health
). - ããã©ã«ãã®ãã§ãã¯ãã©ã¡ãŒã¿ãç解ãã (
interval: 10s
,timeout: 1s
,successThreshold: 1
,failureThreshold: 3
):- ããã©ã«ãã®ãªãã·ã§ã³ã§ã¯ããããã¯æ¬¡ã®ããã«ãªããŸãã æºåãã§ããŠããªã çŽ 30 ç§åŸ (å¥å šæ§ãã§ãã¯ã 3 å倱æ)ã
- ãã¯ãããžãŒ ã¹ã¿ã㯠(Java/Spring ãªã©) ã§èš±å¯ãããŠããå Žåã¯ããadminããŸãã¯ãmanagementãã«å¥ã®ããŒãã䜿çšããŠãæ£åžžæ§ãšã¡ããªã¯ã¹ã®ç®¡çãéåžžã®ãã©ãã£ãã¯ããåé¢ããŸãã
- ãã ãããã€ã³ã 2 ãå¿ããªãã§ãã ããã
- å¿
èŠã«å¿ããŠãreadiness ãããŒãã䜿çšããŠãã£ãã·ã¥ããŠã©ãŒã ã¢ãã/ããŒãããã³ã³ãããŒããŠã©ãŒã ã¢ãããããŸã§ 503 ã¹ããŒã¿ã¹ ã³ãŒããè¿ãããšãã§ããŸãã
- æ°ãããã§ãã¯ãèªãããšããå§ãããŸã
startupProbe
,ããŒãžã§ã³1.16ã§ç»å Ž ïŒç§ãã¡ã¯ããã«ã€ããŠãã·ã¢èªã§æžããŸããïŒãã㧠â çŽç¿»èš³ïŒ.
- æ°ãããã§ãã¯ãèªãããšããå§ãããŸã
èŠå
- å€éšäŸåé¢ä¿ã«äŸåããªã (ããŒã¿ ãŠã§ã¢ããŠã¹ãªã©) æºå/掻æ§ãã¹ãã®å®è¡æ - ããã«ãããé£éçãªé害ãçºçããå¯èœæ§ããããŸãã
- äŸãšããŠã10 ã€ã® Postgres ããŒã¿ããŒã¹ã«äŸåãã 10 åã®ããããæã€ã¹ããŒããã« REST ãµãŒãã¹ãèããŠã¿ãŸãããããã§ãã¯ã DB ãžã®åäœäžã®æ¥ç¶ã«äŸåããå Žåããããã¯ãŒã¯/DB åŽã§é 延ããããšãXNUMX åã®ããããã¹ãŠã倱æããå¯èœæ§ããããŸããéåžžã¯ããã¹ãŠã¯æ³å以äžã«æªãçµæ«ãè¿ããŸãã
- Spring Data ã¯ããã©ã«ãã§ããŒã¿ããŒã¹æ¥ç¶ããã§ãã¯ããããšã«æ³šæããŠãã ãã*ã
* ãã㯠Spring Data Redis ã®ããã©ã«ãã®åäœã§ã (å°ãªããšãç§ãæåŸã«ç¢ºèªãããšãã¯ããã§ãã)ãããã«ãããå£æ» çãªãé害ãçºçããŸãããã€ãŸããRedis ãçæéå©çšã§ããªããªããšããã¹ãŠã®ãããããã¯ã©ãã·ã¥ãããŸããã
- ãã®æå³ã§ã®ãå€éšãã¯ãåãã¢ããªã±ãŒã·ã§ã³ã®ä»ã®ããããæå³ããããšããããŸããã€ãŸããé£éçãªã¯ã©ãã·ã¥ãé²ãããã«ããã§ãã¯ã¯åãã¯ã©ã¹ã¿ãŒã®ä»ã®ãããã®ç¶æ
ã«äŸåããªãããšãçæ³çã§ãã
- åæ£ç¶æ ã®ã¢ããªã±ãŒã·ã§ã³ (ãããå ã®ã¡ã¢ãªå ãã£ãã·ã¥ãªã©) ã§ã¯çµæãç°ãªãå ŽåããããŸãã
- liveness ãããŒãã䜿çšããªãã§ãã ãã ãããã®å Žå (äŸå€ã¯ãããããæ¬åœã«å¿
èŠã§ããã®äœ¿çšã®è©³çŽ°ãšçµæãååã«èªèããŠããå Žåã§ã):
- liveness ãããŒãã¯ãã³ã°ããã³ã³ããã®å埩ã«åœ¹ç«ã¡ãŸãããã¢ããªã±ãŒã·ã§ã³ãå®å šã«å¶åŸ¡ã§ããããããã³ã°ããããã»ã¹ããããããã¯ã®ãããªäºæ ã¯çæ³çã«ã¯çºçããªãã¯ãã§ããæè¯ã®ä»£æ¿çã¯ãã¢ããªã±ãŒã·ã§ã³ãæå³çã«ã¯ã©ãã·ã¥ããŠä»¥åã®å®åžžç¶æ ã«æ»ãããšã§ãã
- liveness ãããŒãã倱æãããšã³ã³ãããåèµ·åãããããã«ãã£ãŠèªã¿èŸŒã¿é¢é£ã®ãšã©ãŒã®åœ±é¿ãæªåããå¯èœæ§ããããŸããã³ã³ãããåèµ·åãããšããŠã³ã¿ã€ã ãçºçã (å°ãªããšãã¢ããªã±ãŒã·ã§ã³ã®èµ·åäžãããšãã° 30 æ°ç§é)ãæ°ããªãšã©ãŒãçºçããŸãã ãä»ã®ã³ã³ãããžã®è² è·ãå¢å ãããããã®ã³ã³ããã倱æããå¯èœæ§ãå¢å ãããªã©ã
- liveness ãã§ãã¯ãšå€éšäŸåé¢ä¿ã®çµã¿åããã¯ææªã®çµã¿åããã§ãããé£éçãªé害ãçºçããæãããããŸããããŒã¿ããŒã¹åŽã§ã®ããããªé 延ããã¹ãŠã®ã³ã³ããã®åèµ·åã«ã€ãªãããŸãã
- liveness ãã§ãã¯ãš readiness ãã§ãã¯ã®ãã©ã¡ãŒã¿ éãã¯ãã :
- åããã«ã¹ãã§ãã¯ã§ liveness ãããŒãã䜿çšã§ããŸãããå¿çãããå€ãé«ããªããŸã (
failureThreshold
)ãããšãã°ã¹ããŒã¿ã¹ãå²ãåœãŠãŸãã æºåãã§ããŠããªã 3 åã®è©Šè¡åŸãliveness ãããŒã㯠10 åã®è©Šè¡åŸã«å€±æãããšã¿ãªããŸãã
- åããã«ã¹ãã§ãã¯ã§ liveness ãããŒãã䜿çšã§ããŸãããå¿çãããå€ãé«ããªããŸã (
- å®è¡ãã§ãã¯ã䜿çšããªããããã¯ããŸã³ã ããã»ã¹ã®åºçŸã«ã€ãªããæ¢ç¥ã®åé¡ã«é¢é£ããŠããããã§ãã
ãµããªãŒ
- readiness ãããŒãã䜿çšããŠããããããã€ãã©ãã£ãã¯ãåä¿¡ã§ããããå€æããŸãã
- liveness ãããŒãã¯ãæ¬åœã«å¿ èŠãªå Žåã«ã®ã¿äœ¿çšããŠãã ããã
- readiness/liveness ãããŒããäžé©åã«äœ¿çšãããšãå¯çšæ§ã®äœäžãé£éçãªé害ãçºçããå¯èœæ§ããããŸãã
ãããã¯ã«é¢ããè¿œå è³æ
-
Kubernetes ããã¥ã¡ã³ã: Liveness ãããŒããš Readiness ãããŒãã®æ§æ ; -
Kubernetes Liveness ãããŒããš Readiness ãããŒãã®åè: äžåœãªæ»æãé¿ããæ¹æ³ ; -
NRE Labs ã®åæ¢åŸã®äºåŸåæ (圌㯠livenessProbe ã«ã€ããŠã話ããŠããŸã)ã
1-2019-09 æŽæ°ç¬¬ 29 å·
2-2019-09 æŽæ°ç¬¬ 29 å·
翻蚳è ããã®è¿œäŒž
ç§ãã¡ã®ããã°ããèªã¿ãã ãã:
- «
Kubernetes: ãããã©ã€ã "; - «
Google ã«ããã³ã³ãã䜿çšã«é¢ãã 7 ã€ã®ãã¹ã ãã©ã¯ãã£ã¹ "; - «
ã³ã³ããããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãèšèšããããã® 7 ã€ã®åå 'ã
åºæïŒ habr.com