Nga tohutohu me nga tinihanga a Kubernetes: nga ahuatanga o te katinga ataahua i NGINX me PHP-FPM

He ahuatanga angamaheni i te wa e whakatinana ana i te CI/CD ki Kubernetes: me kore e taea e te tono te whakaae ki nga tono a nga kiritaki hou i mua i te whakamutu katoa, me te mea nui, kia tutuki pai nga tono o mua.

Nga tohutohu me nga tinihanga a Kubernetes: nga ahuatanga o te katinga ataahua i NGINX me PHP-FPM

Ko te tutukitanga ki tenei tikanga ka taea e koe te whakatutuki i te kore o te wa heke i te wa tuku. Heoi, ahakoa te whakamahi i nga paihere tino rongonui (penei i te NGINX me te PHP-FPM), ka tupono koe ki nga uauatanga ka nui haere nga hapa me ia tukunga...

Te ariā. Pehea te ora o te pod

Kua oti i a matou te whakaputa korero mo te huringa ora o te poti tenei tuhinga. I roto i te horopaki o te kaupapa e whakaarohia ana, e hiahia ana matou ki nga mea e whai ake nei: i te wa ka uru te pod ki te kawanatanga Whakamutunga, ka mutu te tuku tono hou ki a ia (pod nekehia atu mai i te rarangi o nga waahi mutunga mo te ratonga). No reira, ki te karo i te waatea i te wa e tukuna ana, he nui ma maatau ki te whakaoti i te raru o te aukati tika i te tono.

Me mahara ano koe ko te wa aroha noa 30 hēkona: i muri i tenei, ka whakamutua te pod, me whai wa te tono ki te whakahaere i nga tono katoa i mua i tenei waa. parau: ahakoa ko nga tono ka neke ake i te 5-10 hēkona kua raru kee, a ka kore e taea e te katinga ataahua...

Kia pai ake ai te maarama ki te aha ka mutu ka mutu te poro, tirohia te hoahoa e whai ake nei:

Nga tohutohu me nga tinihanga a Kubernetes: nga ahuatanga o te katinga ataahua i NGINX me PHP-FPM

A1, B1 - Te whiwhi huringa mo te ahua o te ahi
A2 - Haerenga SIGTERM
B2 - Te tango i te pākākano mai i nga pito mutunga
B3 - Te whiwhi huringa (kua huri te rarangi o nga waahi mutunga)
B4 - Whakahou i nga ture iptables

Kia mahara: ko te whakakore i te porowhita mutunga me te tuku SIGTERM karekau e mahi raupapa, engari he whakarara. A, na te mea kaore a Ingress e whiwhi tonu i te raarangi whakahou o nga Whakamutunga, ka tukuna nga tono hou mai i nga kaihoko ki te pod, ka puta he hapa 500 i te wa e mutu ai te pod. (mo etahi atu korero mo tenei take, maatau i whakamaoritia). Me whakatika tenei raruraru i nga huarahi e whai ake nei:

  • Tuku Hononga: kati i roto i nga pane whakautu (mehemea e pa ana tenei ki tetahi tono HTTP).
  • Mena kaore e taea te whakarereke i te waehere, na te tuhinga e whai ake nei e whakaatu ana i tetahi otinga ka taea e koe te whakahaere i nga tono tae noa ki te mutunga o te waa pai.

Te ariā. Me pehea te whakamutu a NGINX me PHP-FPM i a raatau mahi

NGINX

Me timata ma te NGINX, na te mea he nui ake, he iti ake ranei nga mea katoa. Ka ruku ki roto i te ariā, ka mohio tatou he kotahi te mahi matua a NGINX me etahi "kaimahi" - he mahinga tamariki enei e whakahaere ana i nga tono a nga kaihoko. Ka whakaratohia he whiringa pai: te whakamahi i te whakahau nginx -s <SIGNAL> whakamutua nga tukanga i roto i te katinga tere, i te aratau katinga ataahua ranei. Ma te mohio, ko te waahanga whakamutunga e pai ana ki a maatau.

Na he ngawari nga mea katoa: me taapiri koe preStop-matau he whakahau ka tukuna he tohu whakaweto ataahua. Ka taea tenei i roto i te Whakamahinga, i te paraka ipu:

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

Inaianei, ka kati te pona, ka kite tatou i nga mea e whai ake nei i roto i nga raarangi ipu 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

A ko te tikanga tenei e hiahiatia ana e tatou: Kei te tatari a NGINX mo nga tono kia oti, ka patu i te mahi. Heoi, i raro nei ka whakaaro ano tatou he raruraru noa na te mea, ahakoa te whakahau nginx -s quit ka mutu te mahi i te he.

A i tenei waahanga kua oti taatau ki te NGINX: mai i nga raarangi ka mohio koe kei te mahi nga mea katoa.

He aha te mahi ki te PHP-FPM? He pehea tana whakahaere i te katinga ataahua? Kia mohio tatou.

PHP-FPM

Mo te PHP-FPM, he iti ake nga korero. Mena ka arotahi koe pukapuka mana e ai ki te PHP-FPM, ka kii ka whakaaetia nga tohu POSIX e whai ake nei:

  1. SIGINT, SIGTERM — tere katinga;
  2. SIGQUIT — graceful shutdown (what we need).

Ko nga tohu e toe ana kaore e hiahiatia i roto i tenei mahi, no reira ka whakakorehia e matou o raatau tātaritanga. Hei whakamutu tika i te tukanga, me tuhi koe i te matau preStop e whai ake nei:

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

I te titiro tuatahi, koinei anake te mea e hiahiatia ana kia pai te kati i roto i nga ipu e rua. Heoi, he uaua ake te mahi i te ahua. Kei raro nei e rua nga keehi kaore i pai te kati me te kore e waatea te kaupapa mo te wa poto i te wa tukunga.

Parakatihi. Ka raru pea me te katinga ataahua

NGINX

Tuatahi, he pai ki te mahara: i tua atu i te whakahaere i te whakahau nginx -s quit Tera ano tetahi atamira e tika ana kia aro atu. I pa ki a matou he take ka tukuna tonu e NGINX a SIGTERM hei utu mo te tohu SIGQUIT, na reira ka kore e oti tika nga tono. Ka kitea nga keehi penei, hei tauira, konei. Engari, kaore i taea e matou te whakatau i te take motuhake mo tenei whanonga: he whakapae mo te putanga NGINX, engari kaore i whakapumautia. Ko te tohu ko nga karere i kitea i roto i nga raarangi ipu NGINX: "tuwhera turanga #10 i toe ki te hononga 5", i muri iho ka mutu te pene.

Ka taea e tatou te kite i tenei raruraru, hei tauira, mai i nga whakautu i runga i te Ingress e hiahiatia ana e tatou:

Nga tohutohu me nga tinihanga a Kubernetes: nga ahuatanga o te katinga ataahua i NGINX me PHP-FPM
Nga tohu tohu tohu mana i te wa o te tuku

I tenei keehi, ka whiwhi noa matou i te waehere hapa 503 mai i a Ingress ake: kaore e taea te uru atu ki te ipu NGINX, na te mea kua kore e uru atu. Mena ka titiro koe ki nga raarangi ipu me NGINX, kei roto enei e whai ake nei:

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

I muri i te whakarereketanga o te tohu whakamutu, ka timata te ipu ki te mutu tika: ka whakapumautia tenei e te meka kaore e kitea te hapa 503.

Mena ka raru koe, he mea tika ki te whakaaro he aha te tohu aukati e whakamahia ana i roto i te ipu me te ahua o te matau preStop. Ka taea pea te take kei roto tonu i tenei.

PHP-FPM... me etahi atu

Ko te raruraru ki te PHP-FPM e whakaahuahia ana i roto i te ahua iti: kaore e tatari mo te whakaotinga o nga tukanga tamaiti, ka mutu, na reira ka puta nga hapa 502 i te wa e tukuna ana me etahi atu mahi. He maha nga purongo bug i runga i bugs.php.net mai i te tau 2005 (hei tauira konei и konei), e whakaatu ana i tenei raruraru. Engari kaore pea koe e kite i tetahi mea i roto i nga raarangi: Ka panuihia e PHP-FPM te otinga o tana mahi kaore he hapa, he panui tuatoru ranei.

He mea tika ki te whakamarama ko te raru ano ka whakawhirinaki ki te iti ake, nui ake ranei i runga i te tono ake, a kaore pea e kitea, hei tauira, i te tirotiro. Mena ka pa ki a koe, ka puta ake he mahi ngawari ki te whakaaro tuatahi: taapirihia he matau preStop me sleep(30). Ka taea e koe te whakaoti i nga tono katoa o mua (kaore matou e whakaae ki nga mea hou, na te pod kua kaha o Whakamutunga), a i muri i te 30 hēkona ka mutu te pākākano me te tohu SIGTERM.

Ka huri te reira lifecycle ka penei te ahua o te ipu:

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

Heoi, na te 30-hekona sleep ko tatou kaha ka whakanuia e matou te wa tuku, na te mea ka mutu ia pod iti noa 30 hēkona, he kino. He aha te mahi mo tenei?

Me tahuri tatou ki te roopu e whakahaere tika ana i te tono. I roto i to tatou take te reira PHP-FPM, e ma te taunoa e kore e aro turuki i te mahia o ana tukanga tamaiti: Ka mutu tonu te tukanga matua. Ka taea e koe te whakarereke i tenei whanonga ma te whakamahi i te tohutohu process_control_timeout, e tohu ana i nga waahi mo nga tukanga tamaiti ki te tatari mo nga tohu mai i te rangatira. Mena ka tautuhia e koe te uara ki te 20 hēkona, ka kapi te nuinga o nga patai kei roto i te ipu ka mutu te mahi matua ina oti ana.

Ma tenei matauranga, ka hoki ano tatou ki to tatou raru whakamutunga. Ka rite ki te korero, ehara a Kubernetes i te kaupapa monolithic: he wa roa te korero i waenga i ona waahanga rereke. He tino pono tenei ka whakaarohia e maatau te mahi a Ingresses me etahi atu waahanga e pa ana, na te mea he roa te wa i te wa o te tuku he ngawari ki te piki ake o nga hapa 500. Hei tauira, ka puta he hapa i te wa o te tuku tono ki te awa whakarunga, engari he poto te "wa wa" o te taunekeneke i waenga i nga waahanga - iti iho i te hekona.

Na reira, Hui katoa me te tohutohu kua whakahuatia ake nei process_control_timeout ka taea e koe te whakamahi i te hanga e whai ake nei mo lifecycle:

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

I tenei keehi, ka utua e matou mo te whakaroa ki te whakahau sleep a kaua e tino whakanuia te wa tuku: he rereke te rereketanga i waenga i te 30 hēkona me te kotahi?.. Inaa, ko te process_control_timeouta lifecycle ka whakamahia anake hei "kupenga haumaru" mena ka takamuri.

Ko te tikanga, ko te whanonga kua whakaahuatia me te otinga e pa ana ki te PHP-FPM anake. Ka puta mai ano he ahuatanga penei i te wa e whakamahi ana i etahi atu reo/anga. Mena kaore e taea e koe te whakatika i etahi atu huarahi - hei tauira, ma te tuhi ano i te waehere kia tika ai te mahi a te tono i nga tohu whakamutu - ka taea e koe te whakamahi i te tikanga kua whakaahuatia. Kaore pea i te mea tino ataahua, engari ka mahi.

Parakatihi. Utaina te whakamatautau ki te tirotiro i te mahi o te poti

Ko te whakamatautau utaina tetahi o nga huarahi ki te tirotiro me pehea te mahi o te ipu, na te mea ka tata atu tenei tikanga ki nga tikanga whawhai ka toro atu nga kaiwhakamahi ki te waahi. Hei whakamatautau i nga taunakitanga o runga ake nei, ka taea e koe te whakamahi Yandex.Tankom: Ka kapi katoa o tatou hiahia. E whai ake nei nga tohutohu me nga tohutohu mo te whakahaere i nga whakamatautau me te tauira marama mai i o maatau wheako whakawhetai ki nga kauwhata o Grafana me Yandex.Tank ake.

Ko te mea nui i konei tirohia nga huringa ma te taahiraa. Whai muri i te taapiri i tetahi whakatika hou, whakahaere i te whakamatautau ka kite mena kua rereke nga hua ki te oma whakamutunga. Ki te kore, he uaua ki te tautuhi i nga otinga koretake, a ka roa ka taea e ia te kino noa (hei tauira, te whakanui i te wa tuku).

Ko tetahi atu ahuatanga ko te titiro ki nga raarangi ipu i te wa e mutu ana. Kei reira nga korero e pa ana ki te katinga ataahua? He hapa kei roto i nga raarangi ka uru atu ki etahi atu rauemi (hei tauira, ki tetahi ipu PHP-FPM tata)? Nga hapa i roto i te tono ake (penei i te keehi i whakaahuahia i runga ake nei me NGINX)? Te ti'aturi nei au ma nga korero whakataki mai i tenei tuhinga ka awhina koe ki te mohio ake ki nga mea ka pa ki te ipu i te wa e mutu ana.

Na, ko te oma whakamatautau tuatahi i puta i waho lifecycle me te kore he tohutohu taapiri mo te tūmau tono (process_control_timeout i roto i te PHP-FPM). Ko te kaupapa o tenei whakamatautau he tautuhi i te tata o nga hapa (mehemea he hapa). I tua atu, mai i nga korero taapiri, me mohio koe ko te wa tohatoha mo ia pene he 5-10 hēkona kia rite ra ano. Ko nga hua ko:

Nga tohutohu me nga tinihanga a Kubernetes: nga ahuatanga o te katinga ataahua i NGINX me PHP-FPM

Ko te panui korero a Yandex.Tank e whakaatu ana i te pikinga o nga hapa 502, i puta i te wa o te tuku me te roa o te toharite ki te 5 hēkona. Ko te mea pea na te mea i whakamutua nga tono o mua ki te pota tawhito i te wa e whakamutua ana. I muri i tenei, ka puta nga hapa 503, ko te hua o te ipu NGINX kua mutu, i heke ano nga hononga na te taha o muri (i aukati i a Ingress ki te hono atu).

Kia kite tatou me pehea process_control_timeout i roto i te PHP-FPM ka awhina i a tatou ki te tatari mo te otinga o nga tukanga tamariki, i.e. whakatika i aua hapa. Hoatu ano ma te whakamahi i tenei tohutohu:

Nga tohutohu me nga tinihanga a Kubernetes: nga ahuatanga o te katinga ataahua i NGINX me PHP-FPM

Karekau he hapa i te wa o te tukunga 500th! He angitu te tukunga, he pai te kati.

Heoi, he mea pai kia maumahara te take ki nga ipu Ingress, he iti te paheketanga o nga hapa ka riro mai i a maatau na te wa o te wa. Hei karo i a raatau, ko te toenga ko te taapiri i tetahi hanganga sleep me te tukurua i te whakatakotoranga. Heoi, i roto i ta maatau keehi, kaore he huringa i kitea (ano, kaore he hapa).

mutunga

Kia pai ai te whakamutu i te mahi, e tumanako ana matou ko nga whanonga e whai ake nei mai i te tono:

  1. Tatari mo etahi hēkona ka mutu te whakaae ki nga hononga hou.
  2. Taria kia oti nga tono katoa me te kati i nga hononga keepalive katoa kaore i te whakahaere tono.
  3. Whakamutua to tukanga.

Heoi, kaore e taea e nga tono katoa te mahi penei. Ko tetahi otinga ki te raru i roto i nga ahuatanga o Kubernetes ko:

  • te taapiri i te matau i mua i te whakamutu ka tatari mo etahi hēkona;
  • e ako ana i te konae whirihoranga o to maatau tuara mo nga tawhā e tika ana.

Ko te tauira me te NGINX e whakamarama ana ahakoa ko te tono kia tika te whakahaere i nga tohu whakamutu i te tuatahi kare pea e pera, na reira he mea nui kia tirohia nga hapa 500 i te wa e tukuna ana te tono. Ma tenei ka taea e koe te titiro whanui atu ki te raru, kia kaua e aro ki te peera kotahi, ipu ranei, engari me titiro ki nga hanganga katoa.

Hei taputapu whakamatautau, ka taea e koe te whakamahi i te Yandex.Tank i te taha o tetahi punaha aroturuki (i to maatau, i tangohia nga raraunga mai i Grafana me te Prometheus backend mo te whakamatautau). Ko nga raru o te katinga ataahua ka tino kitea i raro i nga kawenga taumaha ka taea e te tohu tohu te whakaputa, a ka awhina te aro turuki ki te tātari i nga ahuatanga i roto i te waa, i muri ranei i te whakamatautau.

Hei whakautu i nga urupare mo te tuhinga: he mea tika kia whakahuahia ko nga raruraru me nga otinga e whakaahuahia ana i konei mo te NGINX Ingress. Mo etahi atu keehi, tera ano etahi atu otinga, ka whakaarohia e tatou i roto i nga rauemi e whai ake nei o te raupapa.

PS

Ko etahi atu mai i nga raupapa tohutohu me nga tinihanga K8s:

Source: will.com

Tāpiri i te kōrero