Ang liveness probe sa Kubernetes mahimong delikado
Nota. transl.: Ang nanguna nga inhenyero gikan sa Zalando, Henning Jacobs, balik-balik nga nakamatikod sa mga problema sa mga tiggamit sa Kubernetes sa pagsabot sa katuyoan sa liveness (ug pagkaandam) nga mga pagsusi ug sa hustong paggamit niini. Busa, gikolekta niya ang iyang mga hunahuna niining lapad nga nota, nga sa kadugayan mahimong bahin sa dokumentasyon sa K8s.
ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½Π½Π°Ρ livenessProbe mahimong makapasamot sa mga sitwasyon nga taas ang karga (snowball shutdown + posibleng taas nga container/application startup time) ug mosangpot sa uban pang negatibong resulta sama sa dependency drops (tan-awa usab akong bag-o nga artikulo ΠΎΠ± ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΈ ΡΠΈΡΠ»Π° Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ²ΡΠ·ΠΊΠ΅ K3s+ACME). Mas grabe pa kung ang liveness probe gihiusa sa usa ka pagsusi sa kahimsog, nga usa ka eksternal nga database: Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ±ΠΎΠΉ ΠΠ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡ Π²ΡΠ΅ Π²Π°ΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ!
ΠΠ±ΡΠΈΠΉ ΠΏΠΎΡΡΠ» Β«ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ liveness probesΒ» sa niini nga kaso kini dili makatabang kaayo, mao nga atong tan-awon sa unsa ang kaandam ug liveness pagsusi alang sa.
Ang Kubernetes naghatag og duha ka importante nga mekanismo nga gitawag liveness probes ug ready probes. Kanunay nilang gihimo ang pipila ka aksyonβsama sa pagpadala og HTTP nga hangyo, pag-abli og koneksyon sa TCP, o pagpatuman og command sa sudlananβaron makumpirma nga ang aplikasyon nagtrabaho sama sa gipaabot.
Liveness nga pagsusi tabangi ang mga Kubernetes nga masabtan kung panahon na nga i-restart ang sudlanan. Pananglitan, ang ingon nga tseke nagtugot kanimo sa pag-intercept sa usa ka deadlock kung ang usa ka aplikasyon ma-stuck sa usa ka lugar. Ang pag-restart sa sudlanan niini nga estado makatabang sa pagkuha sa aplikasyon gikan sa yuta bisan pa sa mga kasaypanan, apan mahimo usab kini nga mosangpot sa mga kapakyasan sa cascading (tan-awa sa ubos).
Ania ang usa ka pananglitan sa usa ka kaandam nga pagsusi sa usa ka agianan /health ΡΠ΅ΡΠ΅Π· HTTP Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (agianan: 10 ΡΠ΅ΠΊΡΠ½Π΄, timeout: 1 ΡΠ΅ΠΊΡΠ½Π΄Π°, sukdanan sa kalampusan: 1, kapakyasan threshold: 3):
gamit ang mga pantalan alang sa administratibo nga katuyoan, gitawag nga "admin" o "pagdumala" (pananglitan, 9090), alang sa readinessProbe, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ endpoint Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΠ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ HTTP-ΠΏΠΎΡΡ (Π²ΡΠΎΠ΄Π΅ 8080) Π³ΠΎΡΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠ°ΡΠΈΠΊ*;
*Nakahibalo ko nga bisan usa ka kaso sa Zalando kung diin wala kini nahitabo, i.e. readinessProbe ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»Π° ΠΏΠΎΡΡ Β«managementΒ», Π½ΠΎ ΡΠ°ΠΌ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ°ΠΊ ΠΈ Π½Π΅ Π½Π°ΡΠ°Π» ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ·-Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ ΠΊΡΡΠ°.
Ang paglakip sa usa ka andam nga pagsusi sa usa ka lahi nga pantalan mahimong mosangpot sa kamatuoran nga ang sobra nga gibug-aton sa main port dili makita sa pagsusi sa kahimsog (nga mao, ang thread pool sa server puno, apan ang pagsusi sa kahimsog nagpakita gihapon nga OK ra ang tanan. ).
Siguruha nga Ang pagkaandam nga pagsusi makahimo sa database initialization/migration;
Ang pinakasayon ββnga paagi aron makab-ot kini mao ang pagkontak sa HTTP server human lang makompleto ang initialization (pananglitan, pagbalhin sa database gikan sa Flyway ΠΈ Ρ.ΠΏ.); ΡΠΎ Π΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠ΅Π½ΡΡΡ ΡΡΠ°ΡΡΡ health checkβΠ°, ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΠ*.
ang default nga mga kapilian nagpasabot nga ang pod mahimong not-ready human sa mga 30 segundos (3 napakyas sa sanity checks).
Paggamit ug bulag nga pantalan para sa "admin" o "pagdumala" kung ang teknolohiya stack (e.g. Java/Spring) nagtugot niini, sa pagbulag sa panglawas ug metrics management gikan sa regular nga trapiko:
Girekomenda ko usab nga basahon nimo ang bag-ong tseke startupProbe, nagpakita sa bersyon 1.16(ΠΌΡ ΠΏΠΈΡΠ°Π»ΠΈ ΠΎ Π½Π΅ΠΉ Π½Π° ΡΡΡΡΠΊΠΎΠΌ dinhi - gibanabana. transl.).
Mga Kaayuhan
ΠΠ΅ ΠΏΠΎΠ»Π°Π³Π°ΠΉΡΠ΅ΡΡ Π½Π° Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (sama sa mga bodega sa datos) kung nagpadagan sa mga pagsulay sa pagkaandam/kabuhayan - mahimoβg mosangput kini sa mga kapakyasan sa kaskad:
Ang "eksternal" niini nga diwa mahimo usab nga magpasabot sa ubang mga pod nga parehas nga aplikasyon, nga mao, ang tseke kinahanglan dili magdepende sa kahimtang sa ubang mga pod sa parehas nga cluster aron malikayan ang mga pag-crash sa cascading:
ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ liveness probe alang sa mga pod (mga eksepsiyon kay mga kaso kung gikinahanglan gyud kini ug hingpit ka nga nakahibalo sa mga detalye ug mga sangputanan sa ilang paggamit):
Ang liveness probe makatabang sa pagbawi sa gibitay nga mga sudlanan, apan tungod kay ikaw adunay bug-os nga kontrol sa imong aplikasyon, ang mga butang sama sa gibitay nga mga proseso ug mga deadlock kinahanglan nga dili mahitabo: ang labing maayo nga alternatibo mao ang tinuyo nga pag-crash sa aplikasyon ug ibalik kini sa kaniadto nga makanunayon nga kahimtang;
Parameter sa liveness ug kaandam checks kinahanglan nga lahi:
mahimo nimong gamiton ang liveness probe nga adunay parehas nga pagsusi sa kahimsog, apan mas taas nga sukaranan sa pagtubag (failureThreshold), Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΡΡΠ°ΡΡΡ not-ready ΠΏΠΎΡΠ»Π΅ 3 ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΈ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ liveness probe ΠΏΡΠΎΠ²Π°Π»ΠΈΠ»ΡΡ ΠΏΠΎΡΠ»Π΅ 10 ΠΏΠΎΠΏΡΡΠΎΠΊ;
EJ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠ» ΠΌΠ½Π΅ ΠΎ PDB: ΠΎΠ΄Π½Π° ΠΈΠ· Π±Π΅Π΄ liveness-ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ β ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ podβΠ°ΠΌΠΈ. Π Kubernetes Π΅ΡΡΡ Pod Disruption Budgets (PDB) aron limitahan ang gidaghanon sa dungan nga mga kapakyasan nga masinati sa usa ka aplikasyon, bisan pa ang mga tseke wala magtagad sa PDB. Sa tinuud, mahimo namon isulti ang mga K8 nga "I-restart ang usa ka pod kung mapakyas ang pagsulay niini, apan ayaw i-restart silang tanan aron malikayan ang paghimo sa mga butang nga mas grabe."