Sond Liveness nan Kubernetes ka danjere

Remak. trad.: Enjenyè plon ki soti nan Zalando, Henning Jacobs, te repete remake pwoblèm nan mitan itilizatè Kubernetes nan konpreyansyon nan bi pou yo viv (ak preparasyon) sond ak itilizasyon kòrèk yo. Se poutèt sa, li te kolekte panse li nan nòt sa a gwo, ki pral evantyèlman vin yon pati nan dokiman K8s la.

Sond Liveness nan Kubernetes ka danjere

Chèk sante, ke yo rekonèt nan Kubernetes kòm sond lavi (sa vle di, literalman, "tès viabilite" - apeprè tradiksyon), kapab byen danjere. Mwen rekòmande pou evite yo si sa posib: eksepsyon yo sèlman se lè yo vrèman nesesè epi ou konplètman okouran de spesifik yo ak konsekans itilizasyon yo. Piblikasyon sa a pral pale sou chèk pou viv ak preparasyon, epi tou li pral di w nan ki ka se epi ou pa ta dwe itilize yo.

Kolèg mwen an Sandor fèk pataje sou Twitter erè ki pi komen li rankontre yo, tankou sa ki gen rapò ak itilizasyon sond preparasyon/vivans:

Sond Liveness nan Kubernetes ka danjere

Mal configuré livenessProbe ka agrave sitiyasyon gwo chaj (fè boul nèj + potansyèlman tan veso/aplikasyon demaraj) epi mennen nan lòt konsekans negatif tankou gout depandans. (Gade tou atik resan mwen an sou limite kantite demann nan konbinezon K3s + ACME). Li vin pi mal toujou lè yo konbine pwofonde lavi a ak yon chèk sante, ki se yon baz done ekstèn: yon sèl echèk DB pral rekòmanse tout resipyan ou yo!

Mesaj jeneral "Pa sèvi ak sond liveness" nan ka sa a li pa ede anpil, kidonk ann gade nan kisa chèk preparasyon yo ak lavi yo ye.

Remak: Pifò nan tès ki anba a te orijinèlman enkli nan dokiman entèn pwomotè Zalando a.

Preparasyon ak chèk Liveness

Kubernetes bay de mekanis enpòtan yo rele sond liveness ak sond preparasyon pou. Yo fè detanzantan kèk aksyon-tankou voye yon demann HTTP, louvri yon koneksyon TCP, oswa egzekite yon lòd nan veso a-pou konfime ke aplikasyon an ap travay jan yo espere.

Kubernetes itilize sond preparasyon poupou konprann ki lè veso a pare pou aksepte trafik. Yon gous konsidere kòm pare pou itilize si tout resipyan li yo pare. Youn nan itilizasyon mekanis sa a se kontwole ki gous yo itilize kòm backend pou sèvis Kubernetes (epi espesyalman Ingress).

Sond Liveness ede Kubernetes konprann lè li lè pou rekòmanse veso a. Pou egzanp, yon chèk sa a pèmèt ou entèsepte yon enpas lè yon aplikasyon vin bloke nan yon sèl kote. Rekòmanse veso a nan eta sa a ede fè aplikasyon an sou tè a malgre erè, men li ka mennen tou nan echèk kaskad (gade anba a).

Si w eseye deplwaye yon aktyalizasyon aplikasyon ki echwe chèk lavi/preparasyon yo, deplwaye li a ap bloke pandan Kubernetes ap tann estati a. Ready soti nan tout gous.

Egzanp

Men yon egzanp yon tès preparasyon pou tcheke yon chemen /health atravè HTTP ak paramèt default (entèval: 10 segonn, poz: 1 segonn, papòt siksè: 1, papòt echèk:3):

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

Rekòmandasyon

  1. Pou mikwosèvis ak pwen final HTTP (REST, elatriye) toujou defini yon sond preparasyon pou, ki tcheke si aplikasyon an (gous) pare pou aksepte trafik.
  2. Asire w ke sonde preparasyon an kouvri disponiblite aktyèl pò sèvè entènèt la:
    • itilize pò pou rezon administratif, yo rele "admin" oswa "jesyon" (pa egzanp, 9090), pou readinessProbe, asire w ke pwen final la retounen OK sèlman si pò HTTP prensipal la (tankou 8080) pare pou aksepte trafik*;

      *Mwen okouran omwen yon ka nan Zalando kote sa pa t rive, i.e. readinessProbe Mwen tcheke pò a "jesyon", men sèvè a li menm pa t 'kòmanse travay akòz pwoblèm chaje kachèt la.

    • tache yon pwofonde preparasyon pou yon pò separe ka mennen nan lefèt ke surcharge sou pò prensipal la pa pral reflete nan chèk sante a (ki se, pisin nan fil sou sèvè a plen, men chèk la sante toujou montre ke tout bagay se OK. ).
  3. Asire w ke sonde preparasyon pèmèt baz done inisyalizasyon/migrasyon;
    • Fason ki pi fasil pou reyalize sa a se kontakte sèvè HTTP a sèlman apre inisyalizasyon fini (pa egzanp, imigre yon baz done soti nan Flyway ak sou sa.); sa vle di, olye pou yo chanje estati chèk sante a, tou senpleman pa kòmanse sèvè entènèt la jiskaske migrasyon baz done a fini*.

      * Ou kapab tou kouri migrasyon baz done soti nan resipyan init deyò gous la. Mwen toujou yon fanatik aplikasyon endepandan, se sa ki, sa yo nan ki veso aplikasyon an konnen ki jan yo pote baz done a nan eta a vle san kowòdinasyon ekstèn.

  4. Itilize httpGet pou tcheke preparasyon yo atravè pwen final chèk sante tipik (pa egzanp, /health).
  5. Konprann paramèt chèk default yo (interval: 10s, timeout: 1s, successThreshold: 1, failureThreshold: 3):
    • opsyon yo default vle di gous la ap vin pa-pare apre apeprè 30 segonn (3 chèk saniti echwe).
  6. Sèvi ak yon pò separe pou "admin" oswa "jesyon" si pil teknoloji a (egzanp Java/Spring) pèmèt li, pou separe sante ak jesyon metrik ak trafik regilye:
    • men pa bliye pwen 2.
  7. Si sa nesesè, yo ka itilize sond preparasyon an pou chofe/chaje kachèt la epi retounen yon kòd estati 503 jiskaske veso a chofe:

Opozisyon

  1. Pa konte sou depandans ekstèn (tankou depo done) lè w ap fè tès preparasyon/vivans - sa ka mennen nan echèk kaskad:
    • Kòm yon egzanp, ann pran yon sèvis REST eta ak 10 gous depann sou yon baz done Postgres: lè chèk la depann sou yon koneksyon k ap travay ak DB a, tout gous 10 ka echwe si gen yon reta sou rezo a / bò DB - anjeneral li. tout fini pi mal pase sa li te kapab;
    • Tanpri sonje Spring Data tcheke koneksyon baz done a pa defo*;

      * Sa a se konpòtman an default nan Spring Data Redis (omwen se te dènye fwa mwen tcheke), ki te mennen nan yon echèk "katastwofik": lè Redis pa disponib pou yon ti tan, tout gous "te fè aksidan".

    • "ekstèn" nan sans sa a ka vle di tou lòt gous nan menm aplikasyon an, se sa ki, depreferans chèk la pa ta dwe depann sou eta a nan lòt gous nan menm gwoup la pou anpeche aksidan kaskad:
      • rezilta yo ka varye pou aplikasyon ki gen eta distribye (pa egzanp, kachèt nan memwa nan gous).
  2. Pa sèvi ak yon sond liveness pou gous (eksepsyon yo se ka lè yo reyèlman nesesè epi ou konplètman okouran de spesifik yo ak konsekans itilizasyon yo):
    • Yon pwofonde lavi ka ede rekipere veso ki pandye, men depi ou gen kontwòl konplè sou aplikasyon w lan, bagay tankou pwosesis kwoke ak enpas yo ta dwe depreferans pa rive: pi bon altènatif la se fè espre fè aksidan aplikasyon an epi pote l tounen nan eta anvan an fiks;
    • yon pwofonde echwe lavi pral lakòz veso a rekòmanse, kidonk potansyèlman agrave efè erè ki gen rapò ak bòt yo: rekòmanse veso a pral lakòz D '(omwen pou dire a nan demaraj aplikasyon an, di plis pase 30 segonn), sa ki lakòz nouvo erè, ogmante chaj la sou lòt resipyan ak ogmante chans pou echèk yo, elatriye;
    • chèk vivan konbine avèk yon depandans ekstèn yo se konbinezon ki pi move posib, menase echèk kaskad: yon ti reta sou bò baz done a ap mennen nan yon rekòmanse nan tout resipyan ou yo!
  3. Paramèt nan chèk vivan ak preparasyon dwe diferan:
    • ou ka itilize yon sond liveness ak menm chèk sante a, men yon papòt repons ki pi wo (failureThreshold), pou egzanp, bay estati a pa-pare apre 3 tantativ epi konsidere ke sond vivan an echwe apre 10 tantativ;
  4. Pa sèvi ak chèk exec, depi yo asosye ak pwoblèm li te ye ki mennen nan aparans nan pwosesis zonbi:

Rezime

  • Sèvi ak sond preparasyon pou detèmine lè yon gous pare pou resevwa trafik.
  • Sèvi ak sond liveness sèlman lè yo vrèman nesesè.
  • Move itilizasyon sond preparasyon/vivans ka mennen nan disponiblite redwi ak echèk kaskad.

Sond Liveness nan Kubernetes ka danjere

Materyèl adisyonèl sou sijè a

Mizajou No 1 soti nan 2019-09-29

Konsènan resipyan init pou migrasyon baz done: Nòt anba a te ajoute.

EJ fè m sonje sou PDB: youn nan pwoblèm yo ak chèk liveness se mank de kowòdinasyon ant gous. Kubernetes gen Bidjè Disruption Pod (PDB) limite kantite echèk konkouran yon aplikasyon ka fè eksperyans, sepandan chèk yo pa pran an kont PDB la. Idealman, nou ta ka di K8s "Rekòmanse yon gous si tès li a echwe, men pa rekòmanse yo tout pou evite fè bagay sa yo vin pi mal."

Bryan mete li parfe: "Sèvi ak sonde liveness lè ou konnen egzakteman kisa pi bon bagay pou fè se touye aplikasyon an"(ankò, pa kite depòte).

Sond Liveness nan Kubernetes ka danjere

Mizajou No 2 soti nan 2019-09-29

Konsènan lekti dokiman an anvan ou itilize: Mwen te kreye demann ki koresponn lan (karakteristik demann) pou ajoute dokiman sou sond liveness.

PS soti nan tradiktè

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè