Awọn iwadii igbesi aye ni Kubernetes le jẹ eewu

Akiyesi. itumọ.: Asiwaju ẹlẹrọ lati Zalando, Henning Jacobs, ti ṣe akiyesi awọn iṣoro leralera laarin awọn olumulo Kubernetes ni agbọye idi ti igbesi aye (ati imurasilẹ) awọn iwadii ati lilo deede wọn. Nitorinaa, o ṣajọ awọn ero rẹ ni akọsilẹ agbara yii, eyiti yoo bajẹ di apakan ti awọn iwe K8s.

Awọn iwadii igbesi aye ni Kubernetes le jẹ eewu

Awọn sọwedowo ilera, ti a mọ ni Kubernetes bi liveness wadi (ie, itumọ ọrọ gangan, “awọn idanwo ṣiṣeeṣe” - isunmọ. transl.), le jẹ ohun lewu. Mo ṣeduro yago fun wọn ti o ba ṣeeṣe: awọn imukuro nikan ni nigbati wọn jẹ pataki nitootọ ati pe o mọ ni kikun ti awọn pato ati awọn abajade ti lilo wọn. Atejade yii yoo sọrọ nipa igbesi aye ati awọn sọwedowo imurasilẹ, ati pe yoo tun sọ fun ọ ni awọn ọran wo aaye ayelujara ati pe o ko gbọdọ lo wọn.

Ọmọ ẹlẹgbẹ mi Sandor laipẹ pin lori Twitter awọn aṣiṣe ti o wọpọ julọ ti o ba pade, pẹlu awọn ti o ni ibatan si lilo awọn iwadii imurasilẹ / igbesi aye:

Awọn iwadii igbesi aye ni Kubernetes le jẹ eewu

Ti ṣe atunto ti ko tọ livenessProbe le buru si awọn ipo fifuye giga (tiipa bọọlu yinyin + agbara igba pipẹ / akoko ibẹrẹ ohun elo) ati ja si awọn abajade odi miiran gẹgẹbi awọn isunmọ igbẹkẹle (wo eleyi na mi laipe article nipa didin nọmba awọn ibeere ni apapọ K3s+ACME). O buru paapaa nigbati iwadii igbesi aye ba ni idapo pẹlu ayẹwo ilera kan, eyiti o jẹ data data ita: ikuna DB kan yoo tun bẹrẹ gbogbo awọn apoti rẹ!

Ifiranṣẹ gbogbogbo "Maṣe lo awọn iwadii igbesi aye" ninu ọran yii ko ṣe iranlọwọ pupọ, nitorinaa jẹ ki a wo kini imurasilẹ ati awọn sọwedowo igbesi aye jẹ fun.

Akiyesi: Pupọ julọ idanwo ti o wa ni isalẹ wa ni akọkọ pẹlu ninu iwe idagbasoke ti inu Zalando.

Imurasilẹ ati Liveness sọwedowo

Kubernetes pese awọn ọna ṣiṣe pataki meji ti a pe liveness wadi ati afefeayika wadi. Wọn ṣe iṣẹ kan lorekore-gẹgẹbi fifiranṣẹ ibeere HTTP kan, ṣiṣi asopọ TCP kan, tabi ṣiṣe pipaṣẹ kan ninu apo-lati jẹrisi pe ohun elo naa n ṣiṣẹ bi o ti ṣe yẹ.

Kubernetes nlo murasilẹ wadilati ni oye nigbati awọn eiyan ti šetan lati gba ijabọ. A kà podu ti o ti ṣetan fun lilo ti gbogbo awọn apoti rẹ ba ṣetan. Ọkan lilo ẹrọ yii ni lati ṣakoso iru awọn adarọ-ese ti a lo bi awọn ẹhin fun awọn iṣẹ Kubernetes (ati paapaa Ingress).

Awọn iwadii igbesi aye ṣe iranlọwọ Kubernetes ni oye nigbati o to akoko lati tun eiyan naa bẹrẹ. Fun apẹẹrẹ, iru ayẹwo yii ngbanilaaye lati ṣe idiwọ titiipa kan nigbati ohun elo ba di ni aaye kan. Atunbẹrẹ eiyan ni ipinlẹ yii ṣe iranlọwọ lati gba ohun elo kuro ni ilẹ laibikita awọn aṣiṣe, ṣugbọn o tun le ja si awọn ikuna cascading (wo isalẹ).

Ti o ba gbiyanju lati mu imudojuiwọn ohun elo kan ti o kuna awọn sọwedowo igbesi aye / imurasilẹ, yiyi rẹ yoo da duro bi Kubernetes ti n duro de ipo naa Ready lati gbogbo awọn ege.

Apeere:

Eyi jẹ apẹẹrẹ ti iwadii imurasilẹ ti n ṣayẹwo ọna kan /health nipasẹ HTTP pẹlu awọn eto aiyipada (aarin: 10 aaya, duro na: 1 iṣẹju-aaya, ala aseyori: 1, ala ikuna:3):

# часть общего описания deployment'а/стека
podTemplate:
  spec:
    containers:
    - name: my-container
      # ...
      readinessProbe:
        httpGet:
          path: /health
          port: 8080

Awọn iṣeduro

  1. Fun awọn iṣẹ microservices pẹlu aaye ipari HTTP (REST, ati bẹbẹ lọ) nigbagbogbo setumo a afefeayika ibere, eyi ti o ṣayẹwo boya ohun elo (pod) ti šetan lati gba ijabọ.
  2. Rii daju pe iwadii imurasilẹ bo wiwa ti ibudo olupin oju opo wẹẹbu gangan:
    • lilo awọn ibudo fun awọn idi iṣakoso, ti a npe ni "abojuto" tabi "isakoso" (fun apẹẹrẹ, 9090), fun readinessProbe, rii daju pe aaye ipari nikan pada O dara ti ibudo HTTP akọkọ (bii 8080) ti ṣetan lati gba ijabọ *;

      * Mo mọ pe o kere ju ẹjọ kan ni Zalando nibiti eyi ko ṣẹlẹ, i.e. readinessProbe Mo ṣayẹwo ibudo “isakoso”, ṣugbọn olupin funrararẹ ko bẹrẹ ṣiṣẹ nitori awọn iṣoro ikojọpọ kaṣe naa.

    • so wiwa imurasilẹ kan si ibudo ti o yatọ le ja si otitọ pe apọju lori ibudo akọkọ kii yoo han ninu ayẹwo ilera (iyẹn ni, adagun okun ti o wa lori olupin ti kun, ṣugbọn ayẹwo ilera tun fihan pe ohun gbogbo dara. ).
  3. Rii daju pe ibere afetigbọ kí database initialization / ijira;
    • Ọna to rọọrun lati ṣaṣeyọri eyi ni lati kan si olupin HTTP nikan lẹhin ibẹrẹ ibẹrẹ ti pari (fun apẹẹrẹ, gbigbe data data lati Flyway ati bẹbẹ lọ.); iyẹn ni, dipo iyipada ipo ayẹwo ilera, nìkan maṣe bẹrẹ olupin wẹẹbu titi ti iṣipopada data yoo ti pari *.

      * O tun le ṣiṣe awọn iṣipopada data data lati awọn apoti init ni ita adarọ-ese. Mo tun jẹ olufẹ ti awọn ohun elo ti ara ẹni, iyẹn ni, ninu eyiti apoti ohun elo mọ bi o ṣe le mu data wa sinu ipo ti o fẹ laisi isọdọkan ita.

  4. Lo httpGet fun awọn sọwedowo imurasilẹ nipasẹ awọn aaye ipari ayẹwo ilera aṣoju (fun apẹẹrẹ, /health).
  5. Loye awọn paramita ayẹwo aiyipada (interval: 10s, timeout: 1s, successThreshold: 1, failureThreshold: 3):
    • awọn aṣayan aiyipada tumọ si pe podu yoo di ko-setan lẹhin bii ọgbọn aaya 30 (awọn sọwedowo mimọ 3 kuna).
  6. Lo ibudo lọtọ fun “abojuto” tabi “isakoso” ti akopọ imọ-ẹrọ (fun apẹẹrẹ Java/Orisun omi) gba laaye, lati ya ara ilera ati iṣakoso awọn metiriki kuro ninu ijabọ deede:
    • ṣugbọn maṣe gbagbe nipa aaye 2.
  7. Ti o ba jẹ dandan, iwadii imurasilẹ le ṣee lo lati gbona / gbe kaṣe naa pada ki o da koodu ipo 503 pada titi ti eiyan yoo fi gbona:
    • Mo tun ṣeduro pe ki o ka ayẹwo tuntun naa startupProbe, han ni version 1.16 (a kowe nipa rẹ ni Russian nibi - isunmọ. itumọ.).

Awọn oju-iwe

  1. Maṣe gbẹkẹle awọn igbẹkẹle ita (gẹgẹbi awọn ile itaja data) nigbati o nṣiṣẹ awọn idanwo imurasilẹ / igbesi aye - eyi le ja si awọn ikuna cascading:
    • Gẹgẹbi apẹẹrẹ, jẹ ki a mu iṣẹ REST ti ipinlẹ pẹlu awọn adarọ-ese 10 ti o da lori ibi ipamọ data Postgres kan: nigbati ayẹwo ba da lori asopọ iṣẹ si DB, gbogbo awọn adarọ-ese 10 le kuna ti idaduro ba wa lori nẹtiwọọki / DB ẹgbẹ - nigbagbogbo o jẹ gbogbo dopin buru ju ti o le;
    • Jọwọ ṣe akiyesi pe Data Orisun omi sọwedowo asopọ data nipasẹ aiyipada *;

      * Eyi ni ihuwasi aiyipada ti Orisun Data Redis (o kere ju o jẹ akoko ikẹhin ti Mo ṣayẹwo), eyiti o yori si ikuna “ajalu”: nigbati Redis ko si fun igba diẹ, gbogbo awọn podu “jalẹ”.

    • “ita” ni itumọ yii tun le tumọ si awọn adarọ-ese miiran ti ohun elo kanna, iyẹn ni, apere ayẹwo ko yẹ ki o dale lori ipo awọn adarọ-ese miiran ti iṣupọ kanna lati ṣe idiwọ awọn ipadanu nla:
      • awọn abajade le yatọ fun awọn ohun elo pẹlu ipinlẹ pinpin (fun apẹẹrẹ, fifipamọ inu-iranti ni awọn adarọ-ese).
  2. Maṣe lo iwadii igbesi aye fun pods (awọn imukuro jẹ awọn ọran nigbati wọn ṣe pataki gaan ati pe o mọ ni kikun ti awọn pato ati awọn abajade ti lilo wọn):
    • Iwadii igbesi aye le ṣe iranlọwọ bọsipọ awọn apoti ti a fikọ, ṣugbọn niwọn igba ti o ni iṣakoso ni kikun lori ohun elo rẹ, awọn nkan bii awọn ilana ti a fikọ ati awọn titiipa ko yẹ ki o ṣẹlẹ ni apere: yiyan ti o dara julọ ni lati mọọmọ jamba ohun elo naa ki o mu pada si ipo iduroṣinṣin iṣaaju;
    • Iwadii igbesi aye ti o kuna yoo jẹ ki eiyan naa tun bẹrẹ, nitorinaa o le mu awọn ipa ti awọn aṣiṣe ti o ni ibatan si bata pọ si: atunbere eiyan yoo ja si akoko idinku (o kere ju fun iye akoko ibẹrẹ ohun elo, sọ awọn aaya 30+), nfa awọn aṣiṣe tuntun, jijẹ fifuye lori awọn apoti miiran ati jijẹ iṣeeṣe ti ikuna wọn, ati bẹbẹ lọ;
    • Awọn sọwedowo igbesi aye ni idapo pẹlu igbẹkẹle ita jẹ apapo ti o ṣeeṣe ti o buru julọ, idẹruba awọn ikuna cascading: idaduro diẹ lori ẹgbẹ data yoo ja si atunbere gbogbo awọn apoti rẹ!
  3. Paramita ti liveness ati afefeayika sọwedowo gbọdọ yatọ:
    • o le lo iwadii igbesi aye pẹlu ayẹwo ilera kanna, ṣugbọn iloro esi ti o ga julọ (failureThreshold), fun apẹẹrẹ, fi awọn ipo ko-setan lẹhin awọn igbiyanju 3 ati ki o ro pe iwadii igbesi aye ti kuna lẹhin awọn igbiyanju 10;
  4. Maṣe lo awọn sọwedowo exec, niwon wọn ni nkan ṣe pẹlu awọn iṣoro ti a mọ ti o yorisi ifarahan awọn ilana Zombie:

Akopọ

  • Lo awọn iwadii imurasilẹ lati pinnu nigbati adarọ ese ba ṣetan lati gba ijabọ.
  • Lo awọn iwadii igbesi aye nikan nigbati wọn nilo gaan.
  • Lilo aibojumu ti awọn iwadii imurasilẹ / igbesi aye le ja si idinku wiwa ati awọn ikuna cascading.

Awọn iwadii igbesi aye ni Kubernetes le jẹ eewu

Awọn ohun elo afikun lori koko -ọrọ naa

Imudojuiwọn No.. 1 lati 2019-09-29

Nipa awọn apoti init fun ijira data: A fi kun akọsilẹ ẹsẹ.

EJ leti mi nipa PDB: ọkan ninu awọn iṣoro pẹlu awọn sọwedowo igbesi aye ni aini isọdọkan laarin awọn pods. Kubernetes ni o ni Awọn isuna Idalọwọduro Pod (PDB) lati ṣe idinwo nọmba awọn ikuna nigbakanna ohun elo le ni iriri, sibẹsibẹ awọn sọwedowo ko ṣe akiyesi PDB. Bi o ṣe yẹ, a le sọ fun K8s lati “Tun bẹrẹ pọdu kan ti idanwo rẹ ba kuna, ṣugbọn maṣe tun bẹrẹ gbogbo wọn lati yago fun ṣiṣe awọn nkan buru.”

Bryan fi o daradaraLo: “Lo iwadii igbesi aye nigba ti o mọ kini kini ohun ti o dara julọ lati ṣe ni lati pa ohun elo naa"(lẹẹkansi, maṣe gbe lọ).

Awọn iwadii igbesi aye ni Kubernetes le jẹ eewu

Imudojuiwọn No.. 2 lati 2019-09-29

Nipa kika iwe ṣaaju lilo: Mo ṣẹda ibeere ti o baamu (ẹya beere) lati ṣafikun iwe nipa awọn iwadii igbesi aye.

PS lati onitumọ

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun