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.

Sondi tal-ħajja f'Kubernetes jistgħu jkunu perikolużi

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:

Sondi tal-ħajja f'Kubernetes jistgħu jkunu perikolużi

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

  1. 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.
  2. 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 ).
  3. 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.

  4. Użu httpGet għal kontrolli ta’ prontezza permezz ta’ endpoints tipiċi ta’ kontroll tas-saħħa (pereżempju, /health).
  5. Jifhmu l-parametri tal-verifika default (interval: 10s, timeout: 1s, successThreshold: 1, failureThreshold: 3):
    • l-għażliet default ifisser li l-pod se jsir mhux lest wara madwar 30 sekonda (3 kontrolli tas-sanità fallew).
  6. 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.
  7. 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:

Tħejjijiet

  1. 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).
  2. 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!
  3. 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;
  4. Tużax kontrolli exec, peress li huma assoċjati ma 'problemi magħrufa li jwasslu għad-dehra ta' proċessi zombie:

Sommarju

  • Uża sondi ta' prontezza biex tiddetermina meta pod ikun lest biex jirċievi traffiku.
  • Uża sondi tal-ħajja biss meta jkunu verament meħtieġa.
  • Użu mhux xieraq ta 'sondi ta' prontezza/ħajja jista 'jwassal għal disponibbiltà mnaqqsa u fallimenti kaskata.

Sondi tal-ħajja f'Kubernetes jistgħu jkunu perikolużi

Materjali addizzjonali dwar is-suġġett

Aġġornament Nru 1 minn 2019-09-29

Dwar init containers għall-migrazzjoni tad-database: Nota f'qiegħ il-paġna miżjuda.

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).

Sondi tal-ħajja f'Kubernetes jistgħu jkunu perikolużi

Aġġornament Nru 2 minn 2019-09-29

Rigward il-qari tad-dokumentazzjoni qabel l-użu: ħloqt it-talba korrispondenti (talba għal karatteristika) biex iżżid dokumentazzjoni dwar sondi tal-ħajja.

PS minn traduttur

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment