Ndụmọdụ na aghụghọ Kubernetes: atụmatụ nke mmechi mara mma na NGINX na PHP-FPM

Ọnọdụ a na-ahụkarị mgbe ị na-emejuputa CI / CD na Kubernetes: ngwa ahụ ga-enwerịrị ike ịnakwere arịrịọ ndị ahịa ọhụrụ tupu ịkwụsị kpamkpam, na nke kachasị mkpa, mezue nke ọma dị adị.

Ndụmọdụ na aghụghọ Kubernetes: atụmatụ nke mmechi mara mma na NGINX na PHP-FPM

Nrube isi na ọnọdụ a na-enye gị ohere ịnweta oge efu efu n'oge ntinye. Agbanyeghị, ọbụlagodi mgbe ị na-eji ngwugwu ama ama (dị ka NGINX na PHP-FPM), ị nwere ike izute ihe isi ike ndị ga-eduga n'ọtụtụ njehie na ntinye ọ bụla…

Ozizi. Kedu ka pọd si ebi

Anyị ebipụtalarị nke ọma gbasara usoro ndụ nke pọd Akụkọ a. N'ihe gbasara isiokwu a na-atụle, anyị nwere mmasị na ihe ndị a: n'oge mgbe pod na-abanye na steeti Nbibi, Akwụsị iziga arịrịọ ọhụrụ na ya (pod wepụrụ site na ndepụta njedebe maka ọrụ). Ya mere, iji zere oge nkwụsịtụ n'oge nnyefe, ọ ga-ezuru anyị iji dozie nsogbu nke ịkwụsị ngwa ahụ n'ụzọ ziri ezi.

I kwesịkwara icheta na oge amara nke ndabara bụ 30 sekọnd: mgbe nke a gasịrị, a ga-akwụsị pọd ahụ na ngwa ahụ ga-enwerịrị oge iji hazie arịrịọ niile tupu oge a. Примечание: ọ bụ ezie na arịrịọ ọ bụla na-ewe ihe karịrị 5-10 sekọnd abụrụlarị nsogbu, na mmechi amara agaghịkwa enyere ya aka ...

Iji ghọta nke ọma ihe na-eme mgbe pọd kwụsịrị, lee anya na eserese a:

Ndụmọdụ na aghụghọ Kubernetes: atụmatụ nke mmechi mara mma na NGINX na PHP-FPM

A1, B1 - Ịnata mgbanwe gbasara ọnọdụ obi
A2 - Ọpụpụ SIGTERM
B2 - Wepụ pọd site na njedebe njedebe
B3 - Ịnata mgbanwe (ndepụta nke njedebe agbanweela)
B4 - Melite iwu iptables

Biko mara: ihichapụ ebe njedebe na izipu SIGTERM anaghị eme n'usoro, mana n'otu aka ahụ. Na n'ihi eziokwu ahụ bụ na Ingress anaghị enweta ozugbo ndepụta nke Endpoints emelitere, a ga-eziga arịrịọ ọhụrụ sitere na ndị ahịa na pọd, nke ga-eme ka njehie 500 n'oge nkwụsị pod. (maka nkọwa zuru ezu gbasara okwu a, anyị sụgharịa). Ekwesịrị idozi nsogbu a n'ụzọ ndị a:

  • Zipu njikọ: mechie isi okwu nzaghachi (ọ bụrụ na nke a metụtara ngwa HTTP).
  • Ọ bụrụ na ọ gaghị ekwe omume ịme mgbanwe na koodu ahụ, mgbe ahụ isiokwu na-esonụ na-akọwa ngwọta nke ga-enye gị ohere ịhazi arịrịọ ruo mgbe njedebe nke oge amara.

Ozizi. Otu NGINX na PHP-FPM si akwụsị usoro ha

NGINX

Ka anyị bido na NGINX, ebe ọ bụ na ihe niile na-apụtachaghị ìhè na ya. N'ịbanye na tiori, anyị na-amụta na NGINX nwere otu usoro nna ukwu yana ọtụtụ "ndị ọrụ" - ndị a bụ usoro ụmụaka na-edozi arịrịọ ndị ahịa. A na-enye nhọrọ dabara adaba: iji iwu nginx -s <SIGNAL> kwụsị usoro ma ọ bụ na nkwụsị ngwa ngwa ma ọ bụ ọnọdụ mmechi mara mma. N'ụzọ doro anya, ọ bụ nhọrọ ikpeazụ na-amasị anyị.

Mgbe ahụ ihe niile dị mfe: ịkwesịrị ịgbakwunye na preStop-nko iwu nke ga-ezite mgbaama mmechi mara mma. Enwere ike ime nke a na ntinye, na ngọngọ akpa:

       lifecycle:
          preStop:
            exec:
              command:
              - /usr/sbin/nginx
              - -s
              - quit

Ugbu a, mgbe pọd ahụ kwụsịrị, anyị ga-ahụ ihe ndị a na ndekọ akpa NGINX:

2018/01/25 13:58:31 [notice] 1#1: signal 3 (SIGQUIT) received, shutting down
2018/01/25 13:58:31 [notice] 11#11: gracefully shutting down

Na nke a ga-apụta ihe anyị chọrọ: NGINX na-echere arịrịọ iji mezue, wee gbuo usoro ahụ. Otú ọ dị, n'okpuru ebe a, anyị ga-atụlekwa nsogbu nkịtị n'ihi nke, ọbụna na iwu nginx -s quit usoro ahụ na-akwụsị ezighi ezi.

Na n'oge a, anyị na-eme NGINX: ọ dịkarịa ala site na ndekọ ị nwere ike ịghọta na ihe niile na-arụ ọrụ dị ka o kwesịrị.

Kedu ihe bụ nkwekọrịta na PHP-FPM? Kedu ka ọ na-esi edozi nkwụsị nke ọma? Ka anyị chọpụta ya.

PHP-FPM

N'ihe banyere PHP-FPM, enwere ntakịrị ozi. Ọ bụrụ na ị na-elekwasị anya akwụkwọ ntuziaka dị ka PHP-FPM si kwuo, ọ ga-ekwu na anabatara akara POSIX ndị a:

  1. SIGINT, SIGTERM - nkwụsị ngwa ngwa;
  2. SIGQUIT - ihe na-atọ ụtọ (ihe anyị chọrọ).

Achọghị akara ndị fọdụrụ na ọrụ a, yabụ anyị ga-ahapụ nyocha ha. Iji kwụsị usoro a nke ọma, ị ga-achọ ide nko preStop ndị a:

        lifecycle:
          preStop:
            exec:
              command:
              - /bin/kill
              - -SIGQUIT
              - "1"

Na ilele mbụ, nke a bụ naanị ihe achọrọ iji mee nkwụsị nke ọma n'ime akpa abụọ ahụ. Otú ọ dị, ọrụ ahụ siri ike karịa ka ọ dị. N'okpuru ebe a bụ ikpe abụọ nke mmechi mara mma na-arụghị ọrụ ma kpatara enweghị oge dị mkpirikpi nke ọrụ ahụ n'oge ebuga ya.

Mee omume. Nsogbu ndị nwere ike ime na mmechi mara mma

NGINX

Nke mbụ, ọ bara uru icheta: na mgbakwunye na ime iwu ahụ nginx -s quit Enwere otu ọkwa ọzọ kwesịrị ịṅa ntị na ya. Anyị zutere esemokwu ebe NGINX ka ga-eziga SIGTERM kama akara ngosi SIGQUIT, na-eme ka arịrịọ emezughị nke ọma. Enwere ike ịchọta ikpe ndị yiri ya, dịka ọmụmaatụ, ebe a. N'ụzọ dị mwute, anyị enweghị ike ịchọpụta kpọmkwem ihe kpatara omume a: enwere enyo banyere ụdị NGINX, mana ekwenyeghị ya. Ihe mgbaàmà bụ na a hụrụ ozi n'ime ndekọ akpa NGINX: "oghere mepere #10 aka ekpe na njikọ 5", mgbe nke ahụ gasịrị, pọd ahụ kwụsịrị.

Anyị nwere ike ịhụ nsogbu dị otú ahụ, dịka ọmụmaatụ, site na nzaghachi na Ingress anyị chọrọ:

Ndụmọdụ na aghụghọ Kubernetes: atụmatụ nke mmechi mara mma na NGINX na PHP-FPM
Ndị na-egosi koodu ọkwa n'oge ebuga ya

N'okwu a, anyị na-enweta naanị koodu njehie 503 site na Ingress n'onwe ya: ọ nweghị ike ịnweta akpa NGINX, ebe ọ bụ na ọ nweghịzi ike ịnweta. Ọ bụrụ na ị lelee ndekọ akpa na NGINX, ha nwere ihe ndị a:

[alert] 13939#0: *154 open socket #3 left in connection 16
[alert] 13939#0: *168 open socket #6 left in connection 13

Mgbe ịgbanwere mgbaàmà nkwụsị ahụ, akpa ahụ na-amalite ịkwụsị n'ụzọ ziri ezi: nke a kwadoro site n'eziokwu ahụ bụ na 503 adịghịzi ahụ njehie.

Ọ bụrụ na ị zutere nsogbu yiri nke ahụ, ọ bụ ihe ezi uche dị na ya ịchọpụta ihe nkwụsị nkwụsị na-eji na akpa na ihe kpọmkwem nko preStop yiri. O kwere omume na ihe kpatara ya dabere na nke a.

PHP-FPM... na ndị ọzọ

A na-akọwa nsogbu na PHP-FPM n'ụzọ na-enweghị isi: ọ naghị echere mmezu nke usoro ụmụaka, ọ na-akwụsị ha, ya mere njehie 502 ji eme n'oge ntinye na ọrụ ndị ọzọ. Enwere ọtụtụ akụkọ ahụhụ na bugs.php.net kemgbe 2005 (dịka ọmụmaatụ ebe a и ebe a), nke na-akọwa nsogbu a. Mana o yikarịrị ka ị gaghị ahụ ihe ọ bụla na ndekọ: PHP-FPM ga-ekwupụta mmecha nke usoro ya na-enweghị njehie ọ bụla ma ọ bụ ọkwa ndị ọzọ.

Ọ bara uru ịkọwa na nsogbu ahụ n'onwe ya nwere ike ịdabere na ntakịrị ma ọ bụ karịa na ngwa ahụ n'onwe ya ma ghara igosipụta onwe ya, dịka ọmụmaatụ, na nlekota. Ọ bụrụ na ị ga-ezute ya, ụzọ dị mfe na-abata n'uche: tinye nko preStop na sleep(30). Ọ ga-enye gị ohere imezu arịrịọ niile dị na mbụ (ma anyị anaghị anabata nke ọhụrụ, ebe ọ bụ na pod ama ike nke Nbibi), ma mgbe 30 sekọnd, pọd n'onwe ya ga-eji akara mechie SIGTERM.

Ọ na-apụta na lifecycle n'ihi na akpa ahụ ga-adị ka nke a:

    lifecycle:
      preStop:
        exec:
          command:
          - /bin/sleep
          - "30"

Otú ọ dị, n'ihi na 30-sekọnd sleep mu nke ukwuu anyị ga-abawanye oge mbugharị, ebe ọ bụ na a ga-akwụsị pọd ọ bụla opekempe 30 sekọnd, nke dị njọ. Gịnị ka a pụrụ ime banyere nke a?

Ka anyị tụgharịa gaa na ndị otu na-ahụ maka mmezu ngwa ahụ ozugbo. N'ọnọdụ anyị ọ bụ PHP-FPMnke na ndabara adịghị nyochaa ogbugbu nke ya nwa Filiks: A na-akwụsị usoro nna ukwu ozugbo. Ị nwere ike ịgbanwe omume a site na iji ntuziaka process_control_timeout, nke na-akọwapụta oge njedebe maka usoro ụmụaka na-echere akara sitere na nna ukwu. Ọ bụrụ na ị tọọ uru ahụ na 20 sekọnd, nke a ga-ekpuchi ọtụtụ ajụjụ na-agba ọsọ n'ime akpa ahụ ma kwụsị usoro nhazi ahụ ozugbo emechara ha.

Site na ihe ọmụma a, ka anyị laghachi na nsogbu ikpeazụ anyị. Dị ka e kwuru, Kubernetes abụghị ikpo okwu monolithic: nkwurịta okwu n'etiti akụkụ ya dị iche iche na-ewe oge. Nke a bụ eziokwu karịsịa mgbe anyị na-atụle ọrụ nke Ingresses na ihe ndị ọzọ metụtara ya, ebe ọ bụ na n'ihi nkwụsị dị otú ahụ n'oge a na-ebuga ya, ọ dị mfe ịnweta nkwụsị nke 500 njehie. Dịka ọmụmaatụ, njehie nwere ike ime na ọkwa nke izipu arịrịọ na elu, mana "oge nkwụsị" nke mmekọrịta n'etiti akụrụngwa dị mkpụmkpụ - ihe na-erughị otu sekọnd.

Ya mere, Na mkpokọta site na ntuziaka ekwurula process_control_timeout ị nwere ike iji ihe owuwu a maka lifecycle:

lifecycle:
  preStop:
    exec:
      command: ["/bin/bash","-c","/bin/sleep 1; kill -QUIT 1"]

N'okwu a, anyị ga-akwụ ụgwọ maka igbu oge na iwu ahụ sleep na emela ka oge ntinye ya dị ukwuu: enwere ọdịiche pụtara ìhè n'etiti 30 sekọnd na otu? .. N'ezie, ọ bụ process_control_timeoutna lifecycle eji naanị dị ka “ụgbụ nchekwa” ma ọ bụrụ na ọ dị ala.

Na-ekwukarị omume akọwara na usoro ọrụ kwekọrọ na-emetụta ọ bụghị naanị na PHP-FPM. Ọnọdụ yiri nke ahụ nwere ike ibilite n'otu ụzọ ma ọ bụ ọzọ mgbe ị na-eji asụsụ/ụkpụrụ ndị ọzọ. Ọ bụrụ na ịnweghị ike idozi mmechi nke ọma n'ụzọ ndị ọzọ - dịka ọmụmaatụ, site na idegharị koodu ahụ ka ngwa ahụ wee hazie akara nkwụsị nke ọma - ịnwere ike iji usoro akọwara. O nwere ike ọ gaghị abụ nke kachasị mma, mana ọ na-arụ ọrụ.

Mee omume. Nleba ule iji lelee ọrụ nke pọd ahụ

Nnwale ibu bụ otu n'ime ụzọ isi lelee otú akpa ahụ si arụ ọrụ, ebe ọ bụ na usoro a na-eme ka ọ dịkwuo nso na ọnọdụ ọgụ n'ezie mgbe ndị ọrụ na-aga na saịtị ahụ. Iji nwalee ndụmọdụ ndị dị n'elu, ị nwere ike iji Yandex.Tankom: Ọ na-ekpuchi mkpa anyị niile nke ọma. Ndị na-esonụ bụ ndụmọdụ na ndụmọdụ maka ịme ule na ihe atụ doro anya site na ahụmahụ anyị site na eserese nke Grafana na Yandex.Tank n'onwe ya.

Ihe kacha mkpa ebe a bụ lelee mgbanwe nzọụkwụ site nzọụkwụ. Mgbe agbakwunyere ndozi ọhụrụ, mee ule ahụ wee hụ ma nsonaazụ agbanweela ma e jiri ya tụnyere ọsọ ikpeazụ. Ma ọ bụghị ya, ọ ga-esi ike ịchọpụta ngwọta na-adịghị arụ ọrụ, na n'ikpeazụ ọ nwere ike ime naanị ihe ọjọọ (dịka ọmụmaatụ, ịbawanye oge ntinye).

Ihe ọzọ nuance bụ ileba anya na ndekọ akpa ahụ n'oge nkwụsị ya. Edekọbara ozi gbasara mmechi mara mma ebe ahụ? Enwere mperi ọ bụla na ndekọ mgbe ị na-enweta akụrụngwa ndị ọzọ (dịka ọmụmaatụ, akpa PHP-FPM gbara agbata obi)? Njehie na ngwa n'onwe ya (dị ka ọ dị na NGINX akọwara n'elu)? Enwere m olileanya na ozi mmeghe sitere na isiokwu a ga-enyere gị aka ịghọta nke ọma ihe na-eme akpa ahụ n'oge nkwụsị ya.

Ya mere, agba ọsọ ule mbụ mere na-enweghị lifecycle na enweghị ntuziaka agbakwunyere maka nkesa ngwa (process_control_timeout na PHP-FPM). Ebumnuche nke ule a bụ iji chọpụta ọnụọgụ mmejọ dị nso (na ma ọ dị). Ọzọkwa, site na ozi ndị ọzọ, ị kwesịrị ịma na nkezi oge ntinye maka pọd ọ bụla bụ ihe dịka 5-10 sekọnd ruo mgbe ọ dị njikere. Nsonaazụ bụ:

Ndụmọdụ na aghụghọ Kubernetes: atụmatụ nke mmechi mara mma na NGINX na PHP-FPM

Ogwe ozi Yandex.Tank na-egosi mmụba nke njehie 502, nke mere n'oge ntinye ma dịruo na nkezi ruo 5 sekọnd. Eleghị anya nke a bụ n'ihi na a na-akwụsị arịrịọ ndị dị na pọd ochie mgbe a na-akwụsị ya. Mgbe nke a gasịrị, njehie 503 pụtara, bụ nke sitere na akpa NGINX kwụsịrị, bụ nke kwụsịrị njikọ n'ihi azụ azụ (nke gbochiri Ingress iji jikọọ na ya).

Ka anyị hụ otú process_control_timeout na PHP-FPM ga-enyere anyị aka ichere maka mmecha usoro ụmụaka, ya bụ. dozie njehie ndị dị otú ahụ. Tinyegharịa site na iji ntuziaka a:

Ndụmọdụ na aghụghọ Kubernetes: atụmatụ nke mmechi mara mma na NGINX na PHP-FPM

Enweghị mmejọ ọzọ n'oge ntinye 500th! Nkwanye ahụ na-aga nke ọma, ọrụ mmechi mara mma.

Otú ọ dị, ọ bara uru icheta okwu ahụ na igbe Ingress, obere pasent nke njehie nke anyị nwere ike ịnweta n'ihi nkwụsị oge. Iji zere ha, ihe niile fọdụrụ bụ ịgbakwunye usoro ya sleep ma kwugharịa ntinye ahụ. Otú ọ dị, n'ọnọdụ anyị, ọ dịghị mgbanwe ọ bụla a hụrụ (ọzọ, ọ dịghị njehie).

nkwubi

Iji kwụsị usoro a n'ụzọ amara, anyị na-atụ anya omume ndị a site na ngwa:

  1. Chere sekọnd ole na ole wee kwụsị ịnakwere njikọ ọhụrụ.
  2. Chere arịrịọ niile iji mechaa ma mechie njikọ niile na-adị ndụ na-adịghị eme arịrịọ.
  3. Kwụsị usoro gị.

Agbanyeghị, ọ bụghị ngwa niile nwere ike ịrụ ọrụ otu a. Otu ngwọta maka nsogbu ahụ na eziokwu Kubernetes bụ:

  • na-agbakwụnye nko tupu nkwụsị nke ga-echere sekọnd ole na ole;
  • na-amụ faịlụ nhazi nke backend anyị maka paramita kwesịrị ekwesị.

Ihe atụ na NGINX na-eme ka o doo anya na ọbụna ngwa nke kwesịrị ịmalite nhazi njedebe nkwụsị n'ụzọ ziri ezi nwere ike ọ gaghị eme ya, ya mere ọ dị oké mkpa ịlele maka njehie 500 n'oge ntinye ngwa. Nke a na-enye gị ohere ilele nsogbu ahụ anya n'ụzọ sara mbara ma ghara ilekwasị anya na otu pọd ma ọ bụ akpa, kama lelee akụrụngwa niile n'ozuzu ya.

Dị ka ngwá ọrụ ule, ị nwere ike iji Yandex.Tank na njikọ ọ bụla usoro nlekota oru (n'ọnọdụ anyị, e weere data na Grafana na Prometheus backend maka ule). A na-ahụ nke ọma nsogbu na nkwụsị nke ọma n'okpuru ibu dị arọ nke akara ngosi nwere ike ịmepụta, na nlekota na-enyere aka nyochaa ọnọdụ ahụ n'ụzọ zuru ezu n'oge ma ọ bụ mgbe ule gasịrị.

Na nzaghachi nye nzaghachi na isiokwu: ọ bara uru ịkọwa na a na-akọwa nsogbu na ngwọta ebe a gbasara NGINX Ingress. Maka ikpe ndị ọzọ, enwere ngwọta ndị ọzọ, nke anyị nwere ike ịtụle na ihe ndị na-esonụ nke usoro.

PS

Ndị ọzọ sitere na usoro ndụmọdụ na usoro aghụghọ K8:

isi: www.habr.com

Tinye a comment