Kubernetes fautuaga & togafiti: foliga o le tapunia matagofie i NGINX ma PHP-FPM

O se tulaga masani pe a faʻaaogaina CI/CD i Kubernetes: e tatau ona le talia e le talosaga ni talosaga fou a le tagata o tausia aʻo leʻi taofi atoa, ma sili ona taua, faʻamaeʻaina ma le manuia mea o iai.

Kubernetes fautuaga & togafiti: foliga o le tapunia matagofie i NGINX ma PHP-FPM

O le tausisia o lenei tulaga e mafai ai ona e ausia le leai o se taimi malolo i le taimi o le faʻaogaina. Ae ui i lea, e tusa lava pe faʻaaogaina fusi taʻutaʻua (pei o NGINX ma PHP-FPM), e mafai ona e feagai ma faʻafitauli e mafua ai le faʻateleina o mea sese i faʻatonuga taʻitasi ...

A'oa'oga. E faapefea ona ola pod

Ua uma ona matou faʻasalalau faʻamatalaga e uiga i le taamilosaga o le olaga o se pod lenei tusitusiga. I le tulaga o le autu o loʻo iloiloina, matou te fiafia i mea nei: i le taimi e ulufale ai le pod i le setete Faʻamuta, o talosaga fou e taofi le lafoina i ai (pod aveʻese mai le lisi o fa'ai'uga mo le tautua). O lea la, ina ia aloese mai le downtime i le taimi o le faʻapipiʻiina, ua lava mo i matou e foia le faʻafitauli o le taofi saʻo o le talosaga.

E tatau fo'i ona e manatua o le taimi fa'ato'ato'a fa'aletonu ole 30 sekone: a maeʻa lenei mea, o le a faʻamutaina le pod ma o le talosaga e tatau ona i ai se taimi e faʻagasolo ai talosaga uma aʻo leʻi oʻo i lenei vaitaimi. mataʻi: e ui lava o soʻo se talosaga e sili atu nai lo le 5-10 sekone ua leva ona faʻafitauli, ma o le tapunia lelei o le a le toe fesoasoani i ai ...

Ina ia malamalama atili i le mea e tupu pe a muta se pod, naʻo le vaʻai i le ata o loʻo i lalo:

Kubernetes fautuaga & togafiti: foliga o le tapunia matagofie i NGINX ma PHP-FPM

A1, B1 - Mauaina suiga e uiga i le tulaga o le tafu
A2 - Tu'u ese SIGTERM
B2 - Ave'esea se pusa mai pito pito
B3 - Mauaina suiga (ua suia le lisi o fa'ai'uga)
B4 - Faʻafouina tulafono iptables

Fa'amolemole maitau: tapeina o le endpoint pod ma le auina atu o le SIGTERM e le tupu fa'asolosolo, ae fa'atasi. Ma ona o le mea moni e le maua vave e Ingress le lisi fou o Endpoints, o talosaga fou mai tagata faʻatau o le a lafoina i le pod, lea o le a mafua ai se mea sese 500 i le taimi o le faʻamutaina o le pod. (mo nisi faʻamatalaga auiliili i lenei mataupu, matou faaliliuina). O lenei faʻafitauli e manaʻomia ona foia i auala nei:

  • Auina Fesoʻotaʻiga: tapuni i ulutala tali (pe a faʻatatau i se talosaga HTTP).
  • Afai e le mafai ona faia suiga i le code, ona faʻamatalaina lea e le tusiga o loʻo mulimuli mai se fofo e mafai ai ona e faʻagasolo talosaga seia oʻo i le faaiuga o le taimi alofa.

A'oa'oga. E faʻafefea e NGINX ma PHP-FPM ona faʻamutaina a latou gaioiga

NGINX

Tatou amata i le NGINX, talu ai o mea uma e sili atu pe itiiti ifo le manino i ai. Ile i totonu o le talitonuga, matou te iloa ai o le NGINX e tasi le faiga faʻapitoa ma le tele o "tagata faigaluega" - o faiga nei a tamaiti e faʻatautaia talosaga a tagata o tausia. O loʻo tuʻuina atu se filifiliga faigofie: faʻaaoga le poloaiga nginx -s <SIGNAL> fa'amutaina fa'agasologa a le o le tapuni vave po'o le tapuni fa'alelei. E manino lava, o le filifiliga mulimuli lea tatou te fiafia i ai.

Ona faigofie lea o mea uma: e tatau ona e faʻaopopo i muaStop-matau o se poloaiga o le a auina atu ai se faailo tapuni matagofie. E mafai ona faia lenei mea i le Fa'atulagaina, i totonu o le pusa pusa:

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

I le taimi nei, pe a tapuni le pod, o le a tatou vaʻai i mea nei ile NGINX container logs:

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

Ma o lona uiga o le mea tatou te manaʻomia: NGINX faʻatali mo talosaga e faʻamaeʻa, ona faʻaumatia lea o le faagasologa. Ae ui i lea, i lalo ifo o le a tatou mafaufau foi i se faʻafitauli masani ona o lea, e oʻo lava i le faʻatonuga nginx -s quit ua sese le faiga.

Ma i lenei laʻasaga ua matou faia i le NGINX: a itiiti mai mai ogalaau e mafai ona e malamalama o loʻo galue mea uma e pei ona tatau ai.

O le a le mea e fai ma PHP-FPM? E fa'afefea ona fa'atautaia le tapuni fa'alelei? Sei o tatou mafaufau i ai.

PHP-FPM

I le tulaga o le PHP-FPM, o loʻo i ai sina faʻamatalaga itiiti. Afai e te taulai atu i ai tusi lesona aloaia e tusa ai ma PHP-FPM, o le a fai mai o faʻailoga POSIX nei e talia:

  1. SIGINT, SIGTERM - tapuni vave;
  2. SIGQUIT - tapuni fa'alelei (mea tatou te mana'omia).

O faʻailoga o loʻo totoe e le manaʻomia i lenei galuega, o lea o le a matou faʻaumatia a latou auiliiliga. Ina ia fa'amuta sa'o le fa'agasologa, e mana'omia lou tusiaina o le matau mua'iStop:

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

I le tepa muamua, naʻo le pau lea o le mea e manaʻomia e faia ai se tapuni faʻalelei i pusa uma e lua. Ae ui i lea, o le galuega e sili atu ona faigata nai lo le foliga mai. O lo'o i lalo ni mataupu se lua na le'i manuia ai le tapuni fa'alelei ma mafua ai le le maua o le poloketi mo se taimi pu'upu'u i le taimi o le fa'agaoioiga.

Faataitai. Fa'afitauli fa'aletonu ile tapuni fa'alelei

NGINX

Muamua lava, e aoga le manatua: faʻaopoopo i le faʻatinoina o le poloaiga nginx -s quit E tasi le isi laasaga e tatau ona gauai i ai. Na matou fetaia'i ma se fa'afitauli lea o le a lafo ai pea e le NGINX le SIGTERM nai lo le fa'ailoga SIGQUIT, ma mafua ai ona le fa'atumu sa'o talosaga. E mafai ona maua tulaga faapena, mo se faataitaiga, iinei. Ae paga lea, sa le mafai ona matou fuafuaina le mafuaaga patino o lenei amioga: sa i ai se masalosaloga e uiga i le NGINX version, ae e leʻi faʻamaonia. O le faʻailoga o le vaʻaia o feʻau i totonu o faʻamaumauga NGINX container: "talatala so'o #10 totoe i le feso'ota'iga 5", ina ua uma ona taofi le pod.

E mafai ona tatou matauina sea faʻafitauli, mo se faʻataʻitaʻiga, mai tali ile Ingress tatou te manaʻomia:

Kubernetes fautuaga & togafiti: foliga o le tapunia matagofie i NGINX ma PHP-FPM
Fa'ailoga o fa'ailoga tulaga i le taimi o le fa'apipi'iina

I lenei tulaga, matou te mauaina naʻo se 503 code error mai Ingress lava ia: e le mafai ona maua le pusa NGINX, talu ai ua le toe mafai. Afai e te vaʻavaʻai i ogalaau pusa ma NGINX, o loʻo i ai mea nei:

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

A maeʻa ona suia le faailo taofi, e amata ona taofi saʻo le koneteina: ua faʻamaonia e le mea moni e le o toe matauina le sese 503.

Afai e te feagai ma se fa'afitauli fa'apena, e talafeagai le su'esu'eina po'o le a le fa'ailo taofi o lo'o fa'aogaina i totonu o le koneteina ma pe fa'apefea tonu le matau preStop. E mafai lava ona taoto tonu le mafuaaga i lenei mea.

PHP-FPM... ma isi

O le faʻafitauli i le PHP-FPM o loʻo faʻamatalaina i se auala le taua: e le faʻatali mo le maeʻa o gaioiga a tamaiti, e faʻamutaina, o le mea lea e tupu ai mea sese 502 i le taimi o le faʻaogaina ma isi gaioiga. O lo'o i ai le tele o lipoti o le bugs.php.net talu mai le 2005 (eg iinei и iinei), lea e faamatalaina ai lenei faafitauli. Ae e foliga mai e te le vaʻai i se mea i totonu o ogalaau: PHP-FPM o le a faʻasalalau le maeʻa o lana faʻagasologa e aunoa ma ni mea sese poʻo ni faʻamatalaga lona tolu.

E taua le faʻamalamalamaina o le faʻafitauli lava ia e mafai ona faʻalagolago i se tulaga laʻititi pe sili atu i luga o le talosaga lava ia ma atonu e le faʻaalia, mo se faʻataʻitaʻiga, i le mataʻituina. Afai e te fetaia'i, e sau muamua i lou mafaufau se fofo faigofie: fa'aopoopo se matau preStop ma sleep(30). O le a faʻatagaina oe e faʻatumu uma talosaga na i ai muamua (ma matou te le taliaina ni mea fou, talu ai pod uma gafatia Faʻamuta), ma a maeʻa le 30 sekone o le pod lava ia o le a faʻaiʻu i se faailo SIGTERM.

E fesuiaʻi lena mea lifecycle aua o le atigipusa e pei o lenei:

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

Ae peitai, ona o le 30-lua sleep tatou tele o le a matou faʻateleina le taimi faʻapipiʻi, talu ai o pod taʻitasi o le a faʻamutaina maualalo 30 sekone, e leaga. O le a se mea e mafai ona fai i lenei mea?

Sei o tatou liliu atu i le itu e nafa ma le faʻatinoina saʻo o le talosaga. I lo tatou tulaga o lea PHP-FPM, lea e le mafai ona mataituina le faatinoga o ana faiga tamaitiiti: E fa'agata vave le fa'agasologa o matai. E mafai ona e suia lenei amio e faʻaaoga ai le faʻatonuga process_control_timeout, lea e faʻamaoti ai taimi faʻatapulaʻa mo gaioiga a tamaiti e faʻatali mo faʻailoga mai le matai. Afai e te setiina le tau i le 20 sekone, o le a aofia ai le tele o fesili o loʻo taʻavale i totonu o le koneteina ma o le a taofia le faʻagasologa o matai pe a maeʻa.

Faatasi ai ma lenei malamalama, tatou toe foi i lo tatou faafitauli mulimuli. E pei ona taʻua, Kubernetes e le o se faʻavae monolithic: o fesoʻotaʻiga i le va o ona vaega eseese e umi se taimi. E moni lava lenei mea pe a tatou mafaufau i le faʻaogaina o Ingresses ma isi vaega e fesoʻotai i ai, talu ai ona o se faʻatuai i le taimi o le faʻapipiʻiina e faigofie ona maua se siʻitia o 500 mea sese. Mo se faʻataʻitaʻiga, e mafai ona tupu se mea sese i le tulaga o le tuʻuina atu o se talosaga i luga o le vaitafe, ae o le "taimi tuai" o fegalegaleaiga i le va o vaega e fai si puupuu - itiiti ifo ma le sekone.

O le mea lea, I le aotelega faatasi ai ma le faatonuga ua uma ona taua process_control_timeout e mafai ona e faʻaogaina le fausiaina o loʻo i lalo mo lifecycle:

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

I lenei tulaga, o le a tatou totogi mo le tuai i le poloaiga sleep ma aua le faʻateleina le faʻatupuina o le taimi: pe a uma, o le eseesega i le va o le 30 sekone ma le tasi e iloagofie?.. O le mea moni, o le process_control_timeoutma lifecycle e fa'aaogaina na'o se "upega saogalemu" pe a fa'aletonu.

Faʻamatala masani o le amio fa'amatalaina ma le fa'aogaina o feso'ota'iga e fa'atatau e le gata ile PHP-FPM. Ole tulaga fa'apena e ono tula'i mai pe a fa'aogaina isi gagana/fa'avae. Afai e le mafai ona e faʻaleleia le tapunia lelei i isi auala - mo se faʻataʻitaʻiga, e ala i le toe tusia o le code ina ia faʻagasolo lelei e le talosaga faʻailoga faʻamutaina - e mafai ona e faʻaogaina le auala faʻamatalaina. Atonu e le sili ona matagofie, ae aoga.

Faataitai. Su'ega uta e siaki ai le fa'agaioiga o le pod

O suʻega uta o se tasi lea o auala e siaki ai pe faʻafefea ona galue le koneteina, talu ai o lenei faiga e faʻalatalata atu ai i tulaga moni o taua pe a asiasi tagata faʻaoga i le saite. Mo le suʻeina o fautuaga o loʻo i luga, e mafai ona e faʻaaogaina Yandex.Tankom: E atoatoa ona atoatoa o tatou manaoga uma. O fautuaga nei ma fautuaga mo le faʻatinoina o suʻega ma se faʻataʻitaʻiga manino mai lo matou poto masani faʻafetai i kalafi o Grafana ma Yandex.Tank lava ia.

O le mea sili ona taua iinei siaki suiga i lea laasaga ma lea laasaga. A mae'a ona fa'aopoopo se mea fou, fa'ata'ita'i le su'ega ma va'ai pe ua suia i'uga pe a fa'atusatusa i le ta'aloga mulimuli. A leai, o le a faigata ona iloa fofo le aoga, ma i se taimi umi e mafai ona afaina ai (mo se faʻataʻitaʻiga, faʻateleina le taimi faʻapipiʻi).

O le isi faʻaaliga o le vaʻavaʻai i ogalaau pusa i le taimi o lona faʻamutaina. O fa'amaumauga e uiga i le tapunia fa'alelei o lo'o fa'amauina iina? E i ai ni mea sese i totonu o ogalaau pe a maua isi punaoa (mo se faʻataʻitaʻiga, i se pusa PHP-FPM tuaoi)? O mea sese i le talosaga lava ia (pei o le tulaga i le NGINX o loʻo faʻamatalaina i luga)? Ou te faʻamoemoe o le faʻamatalaga faʻamatalaga mai lenei tusiga o le a fesoasoani ia te oe e malamalama atili ai i le mea e tupu i le atigipusa i le taimi o lona faʻamutaina.

O lea, o le suʻega muamua na faia e aunoa ma lifecycle ma e aunoa ma ni faatonuga faaopoopo mo le server o talosaga (process_control_timeout i le PHP-FPM). O le fa'amoemoega o lenei su'ega o le fa'ailoaina lea o le aofa'i o fa'aletonu (ma pe iai). E le gata i lea, mai faʻamatalaga faaopoopo, e tatau ona e iloa o le averesi taimi faʻapipiʻi mo pod taʻitasi e tusa ma le 5-10 sekone seia oʻo ina saunia atoatoa. O i'uga o:

Kubernetes fautuaga & togafiti: foliga o le tapunia matagofie i NGINX ma PHP-FPM

O le Yandex.Tank faʻamatalaga faʻamatalaga o loʻo faʻaalia ai le maualuga o le 502 mea sese, lea na tupu i le taimi o le faʻapipiʻiina ma tumau i le averesi e oʻo atu i le 5 sekone. Masalo na mafua ona o talosaga o loʻo i ai i le pod tuai na faʻamutaina ina ua faʻamutaina. Ina ua maeʻa, 503 mea sese na aliali mai, o le taunuuga lea o se pusa NGINX taofi, lea na paʻu ai foi fesoʻotaʻiga ona o le pito i tua (lea na taofia ai Ingress mai le faʻafesoʻotaʻi i ai).

Sei o tatou vaai pe faapefea process_control_timeout i le PHP-FPM o le a fesoasoani ia i matou e faʻatali mo le maeʻa o faiga a tamaiti, i.e. faasa'o ia mea sese. Toe fa'aaoga le fa'atonuga lenei:

Kubernetes fautuaga & togafiti: foliga o le tapunia matagofie i NGINX ma PHP-FPM

E leai ni mea sese i le taimi o le 500th deployment! Ua manuia le fa'apipi'iina, fa'alelei lelei galuega tapuni.

Ae ui i lea, e taua le manatuaina o le mataupu i totonu o pusa o Ingress, o se pasene laʻititi o mea sese e mafai ona tatou maua ona o se taimi tuai. Ina ia aloese mai ai, pau lava le mea o totoe o le faʻaopoopoina o se fausaga ma sleep ma toe fai le fa'atulagaina. Ae ui i lea, i la matou tulaga faapitoa, e leai ni suiga na vaaia (toe, leai ni mea sese).

iʻuga

Ina ia faʻamutaina le faʻagasologa ma le alofa, matou te faʻamoemoeina le amio nei mai le talosaga:

  1. Faatali mo ni nai sekone ona taofi lea o le taliaina o feso'ota'iga fou.
  2. Fa'atali mo talosaga uma e fa'auma ma tapuni uma feso'ota'iga keepalive e le o fa'atinoina talosaga.
  3. Fa'ai'u lau fa'agasologa.

Ae ui i lea, e le o talosaga uma e mafai ona galue i lenei auala. O se tasi o fofo i le faʻafitauli i mea moni Kubernetes o le:

  • fa'aopoopoina se matau mua'i taofi e fa'atali mo ni nai sekone;
  • su'esu'e le faila fa'atulagaina o la tatou pito pito i tua mo ta'iala talafeagai.

O le faʻataʻitaʻiga ma NGINX o loʻo faʻamalamalama manino ai e oʻo lava i se talosaga e tatau ona faʻagasolo saʻo faʻamutaina faʻailoga atonu e le faia, o lea e taua ai le siakiina o mea sese 500 i le taimi o le faʻaogaina o talosaga. O lenei mea e mafai ai foi ona e vaʻavaʻai i le faʻafitauli i se tulaga lautele ma aua le taulaʻi i luga o se pusa poʻo se atigipusa, ae vaʻavaʻai i le atinaʻe atoa atoa.

I le avea ai o se meafaigaluega faʻataʻitaʻi, e mafai ona e faʻaogaina Yandex.Tank faʻatasi ma soʻo se faiga mataʻituina (i la matou tulaga, o faʻamaumauga na maua mai le Grafana ma le Prometheus backend mo le suʻega). O faʻafitauli i le tapuni faʻalelei e manino le vaʻaia i lalo o uta mamafa e mafai e le faʻailoga e mafai ona faʻatupuina, ma o le mataʻituina e fesoasoani e iloilo atili le tulaga i le taimi poʻo le maeʻa o le suʻega.

I le tali atu i manatu faaalia i luga o le tusiga: e taua le taʻua o faʻafitauli ma fofo o loʻo faʻamatalaina iinei e faʻatatau ile NGINX Ingress. Mo isi tulaga, o loʻo i ai isi fofo, lea e mafai ona tatou mafaufau i ai i mea nei o le faasologa.

SALA

O isi mai le K8s tips & tricks series:

puna: www.habr.com

Faaopoopo i ai se faamatalaga