Sondi tal-ħajja f'Kubernetes jistgħu jkunu perikolużi
Nota. transl.: L-inġinier ewlieni minn Zalando, Henning Jacobs, ripetutament innota problemi fost l-utenti ta 'Kubernetes biex jifhmu l-iskop ta' sondi ta 'ħajja (u prontezza) u l-użu korrett tagħhom. Għalhekk, huwa ġabar il-ħsibijiet tiegħu f'din in-nota kapaċita, li eventwalment se ssir parti mid-dokumentazzjoni K8s.
Kontrolli tas-saħħa, magħrufa f'Kubernetes bħala sondi tal-ħajja(jiġifieri, litteralment, "testijiet tal-vijabbiltà" - madwar trad.), jista 'jkun pjuttost perikoluż. Nirrakkomanda li tevitahom jekk possibbli: l-uniċi eċċezzjonijiet huma meta jkunu verament meħtieġa u tkun kompletament konxju tal-ispeċifiċitajiet u l-konsegwenzi tal-użu tagħhom. Din il-pubblikazzjoni se titkellem dwar il-verifiki tal-ħajja u tal-prontezza, u tgħidlek ukoll f'liema każijiet huwa u m'għandekx tużahom.
Il-kollega tiegħi Sandor reċentement qasam fuq Twitter l-iżbalji l-aktar komuni li jiltaqa’ magħhom, inklużi dawk relatati mal-użu ta’ sondi ta’ prontezza/ħajja:
Konfigurat ħażin livenessProbe jista' jaggrava sitwazzjonijiet ta' tagħbija għolja (għeluq tal-ballun tas-silġ + ħin tal-istartjar tal-kontenitur/applikazzjoni potenzjalment twil) u jwassal għal konsegwenzi negattivi oħra bħal tnaqqis fid-dipendenza (ara ukoll l-artiklu riċenti tiegħi dwar il-limitazzjoni tan-numru ta' talbiet fil-kombinazzjoni K3s+ACME). Huwa saħansitra agħar meta s-sonda tal-ħajja hija kkombinata ma 'kontroll tas-saħħa, li hija database esterna: falliment DB wieħed jerġa' jibda l-kontenituri kollha tiegħek!
Messaġġ ġenerali "Tużax sondi tal-ħajja" f'dan il-każ ma jgħinx ħafna, allura ejja nħarsu lejn għalxiex huma l-verifiki tal-prontezza u l-ħajja.
Nota: Ħafna mit-test hawn taħt kien oriġinarjament inkluż fid-dokumentazzjoni interna tal-iżviluppatur ta' Zalando.
Verifiki ta' Prontezza u Ħajja
Kubernetes jipprovdi żewġ mekkaniżmi importanti msejħa sondi ta 'ħajja u sondi ta' prontezza. Perjodikament iwettqu xi azzjoni—bħal li jibagħtu talba HTTP, jiftħu konnessjoni TCP, jew jeżegwixxu kmand fil-kontenitur—biex jikkonfermaw li l-applikazzjoni qed taħdem kif mistenni.
Kubernetes juża sondi ta' prontezzabiex tifhem meta l-kontenitur ikun lest li jaċċetta t-traffiku. Pod jitqies lest għall-użu jekk il-kontenituri kollha tiegħu jkunu lesti. Użu wieħed ta' dan il-mekkaniżmu huwa li jikkontrolla liema pods jintużaw bħala backends għas-servizzi Kubernetes (u speċjalment Ingress).
Sondi tal-ħajja għin lil Kubernetes jifhem meta wasal iż-żmien li jerġa' jibda l-kontenitur. Pereżempju, kontroll bħal dan jippermettilek li tinterċetta sblokk meta applikazzjoni titwaħħal f'post wieħed. Il-bidu mill-ġdid tal-kontenitur f'dan l-istat jgħin biex l-applikazzjoni toħroġ mill-art minkejja l-iżbalji, iżda jista 'jwassal ukoll għal fallimenti kaskati (ara hawn taħt).
Jekk tipprova tuża aġġornament tal-applikazzjoni li jonqos mill-kontrolli tal-ħajja/prontezza, it-tnedija tiegħu se titwaqqaf hekk kif Kubernetes jistenna l-istatus Ready mill-imżiewed kollha.
Eżempju
Hawn hu eżempju ta 'sonda ta' prontezza li tikkontrolla mogħdija /health permezz ta' HTTP b'settings default (intervall: 10 Sekondi, timeout: sekonda, limitu tas-suċċess: 1, limitu ta' falliment: 3):
# часть общего описания deployment'а/стека
podTemplate:
spec:
containers:
- name: my-container
# ...
readinessProbe:
httpGet:
path: /health
port: 8080
Rakkomandazzjonijiet
Għal mikroservizzi b'endpoint HTTP (REST, eċċ.) dejjem tiddefinixxi sonda ta' prontezza, li jiċċekkja jekk l-applikazzjoni (pod) hijiex lesta biex taċċetta traffiku.
Kun żgur li s-sonda tal-prontezza tkopri d-disponibbiltà tal-port attwali tas-server tal-web:
tuża portijiet għal skopijiet amministrattivi, imsejħa "admin" jew "management" (per eżempju, 9090), għal readinessProbe, kun żgur li l-endpoint jirritorna OK biss jekk il-port HTTP primarju (bħal 8080) ikun lest li jaċċetta traffiku*;
*Jien konxju ta’ mill-inqas każ wieħed f’Zalando fejn dan ma seħħx, i.e. readinessProbe Iċċekkja l-port ta '"ġestjoni", iżda s-server innifsu ma beda jaħdem minħabba problemi fit-tagħbija tal-cache.
it-twaħħil ta 'sonda ta' prontezza ma 'port separat jista' jwassal għall-fatt li tagħbija żejda fuq il-port prinċipali mhux se tkun riflessa fil-kontroll tas-saħħa (jiġifieri, il-grupp tal-ħajt fuq is-server huwa mimli, iżda l-kontroll tas-saħħa għadu juri li kollox huwa OK ).
Kun żgur li sonda ta' prontezza tippermetti l-inizjalizzazzjoni/il-migrazzjoni tad-database;
L-eħfef mod biex jinkiseb dan huwa li tikkuntattja s-server HTTP biss wara li titlesta l-inizjalizzazzjoni (pereżempju, il-migrazzjoni ta’ database minn Flyway u l-bqija.); jiġifieri, minflok ma tibdel l-istatus tal-kontroll tas-saħħa, sempliċiment ma tibdax is-server tal-web sakemm titlesta l-migrazzjoni tad-database*.
* Tista 'wkoll tmexxi migrazzjonijiet ta' database minn kontenituri init barra l-pod. Għadni fan ta 'applikazzjonijiet awtonomi, jiġifieri dawk li fihom il-kontenitur tal-applikazzjoni jaf kif iġib id-database fl-istat mixtieq mingħajr koordinazzjoni esterna.
Użu httpGet għal kontrolli ta’ prontezza permezz ta’ endpoints tipiċi ta’ kontroll tas-saħħa (pereżempju, /health).
l-għażliet default ifisser li l-pod se jsir mhux lest wara madwar 30 sekonda (3 kontrolli tas-sanità fallew).
Uża port separat għal "amministratur" jew "ġestjoni" jekk il-munzell tat-teknoloġija (eż. Java/Spring) jippermettilu, biex tissepara l-ġestjoni tas-saħħa u tal-metriċi mit-traffiku regolari:
imma tinsiex il-punt 2.
Jekk meħtieġ, is-sonda ta' prontezza tista' tintuża biex tissaħħan/tgħabbi l-cache u tirritorna kodiċi ta' status 503 sakemm il-kontenitur jisħon:
Nirrakkomanda wkoll li taqra l-kontroll il-ġdid startupProbe, deher fil-verżjoni 1.16(Ktibna dwarha bir-Russu hawn - madwar. trad.).
Tħejjijiet
Tistrieħx fuq dipendenzi esterni (bħal mħażen tad-dejta) meta jsiru testijiet ta' prontezza/ħajja - dan jista' jwassal għal fallimenti kaskata:
Bħala eżempju, ejja nieħdu servizz REST stateful b'10 imżiewed jiddependi fuq database Postgres waħda: meta l-verifika tiddependi fuq konnessjoni tax-xogħol mad-DB, l-10 imżiewed kollha jistgħu jfallu jekk ikun hemm dewmien fuq in-naħa tan-netwerk/DB - ġeneralment kollox jispiċċa agħar milli setgħet;
Jekk jogħġbok innota li Spring Data tiċċekkja l-konnessjoni tad-database awtomatikament*;
* Din hija l-imġieba awtomatika ta 'Spring Data Redis (għallinqas kienet l-aħħar darba li ċċekkja), li wasslet għal falliment "katastrofiku": meta Redis ma kienx disponibbli għal żmien qasir, il-miżwed kollha "ħabtu".
"estern" f'dan is-sens jista' jfisser ukoll imżiewed oħra tal-istess applikazzjoni, jiġifieri, idealment il-kontroll m'għandux jiddependi fuq l-istat ta 'miżwed oħra tal-istess cluster biex jipprevjeni ħabtiet kaskata:
ir-riżultati jistgħu jvarjaw għal applikazzjonijiet bi stat distribwit (per eżempju, caching fil-memorja fil-miżwed).
Tużax sonda tal-ħajja għall-imżiewed (l-eċċezzjonijiet huma każijiet meta huma verament meħtieġa u inti kompletament konxju tal-ispeċifiċitajiet u l-konsegwenzi tal-użu tagħhom):
Sonda tal-ħajja tista 'tgħin biex tirkupra kontenituri mdendla, iżda peress li għandek kontroll sħiħ fuq l-applikazzjoni tiegħek, affarijiet bħall-proċessi mdendla u l-imblokk idealment m'għandhomx iseħħu: l-aħjar alternattiva hija li tiġġarraf l-applikazzjoni deliberatament u terġa' lura għall-istat fiss preċedenti;
sonda tal-ħajja falluta tikkawża li l-kontenitur jerġa 'jibda, u b'hekk potenzjalment jaggrava l-effetti ta' żbalji relatati mal-but: il-bidu mill-ġdid tal-kontenitur se jirriżulta f'ħin ta 'waqfien (għall-inqas għat-tul tal-istartjar tal-applikazzjoni, ngħidu aħna 30+ sekonda), li jikkawża żbalji ġodda, tiżdied it-tagħbija fuq kontenituri oħra u tiżdied il-probabbiltà tal-falliment tagħhom, eċċ.;
il-kontrolli tal-ħajja flimkien ma 'dipendenza esterna huma l-agħar kombinazzjoni possibbli, li jheddu fallimenti kaskata: dewmien żgħir fuq in-naħa tad-database se jwassal għal bidu mill-ġdid tal-kontenituri kollha tiegħek!
Parametri ta' kontrolli tal-ħajja u tal-prontezza għandhom ikunu differenti:
tista' tuża sonda tal-ħajja bl-istess kontroll tas-saħħa, iżda limitu ta' rispons ogħla (failureThreshold), pereżempju, jassenja l-istatus mhux lest wara 3 tentattivi u tikkunsidra li s-sonda tal-ħajja falliet wara 10 tentattivi;
Tużax kontrolli exec, peress li huma assoċjati ma 'problemi magħrufa li jwasslu għad-dehra ta' proċessi zombie:
Fakkarni EJ dwar PDB: waħda mill-problemi bil-kontrolli tal-ħajja hija n-nuqqas ta 'koordinazzjoni bejn il-miżwed. Kubernetes għandu Baġits ta' Tfixkil tal-Pods (PDB) biex jiġi limitat in-numru ta' fallimenti konkorrenti li applikazzjoni tista' tesperjenza, madankollu l-kontrolli ma jqisux il-PDB. Idealment, nistgħu ngħidu lil K8s biex "Ibda mill-ġdid pod wieħed jekk it-test tiegħu jfalli, iżda ma jerġax ibdahom kollha biex jevitaw li jagħmlu l-affarijiet agħar."
Bryan poġġiha perfettament: “Uża liveness probing meta tkun taf eżattament xiex l-aħjar ħaġa li tagħmel huwa li joqtlu l-applikazzjoni"(għal darb'oħra, taqbadx).