Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Aperira 27 i te huihuinga Patua 2019, hei waahanga o te waahanga "DevOps", i tukuna te purongo "Te Whakatairanga Aunoa me te whakahaere rauemi i Kubernetes". E korero ana me pehea e taea ai e koe te whakamahi i nga K8s ki te whakarite kia nui te watea o o tono me te tino mahi.

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Ma nga korero tuku iho, ka koa matou ki te whakaatu ataata o te purongo (44 meneti, he nui ake nga korero i te tuhinga) me te whakarāpopototanga matua i roto i te puka tuhinga. Haere!

Kia wetewetehia te kaupapa o te ripoata kupu ma ia kupu ka timata mai i te mutunga.

Kubernetes

Me kii kei a tatou nga ipu Docker kei runga i to tatou kaihautu. Hei aha? Hei whakarite i te tukuruatanga me te wehe, ka taea hoki te tuku ngawari me te pai, CI/CD. He maha nga waka penei me nga ipu.

He aha nga mahi a Kubernetes mo tenei keehi?

  1. Ka mutu ta maatau whakaaro mo enei miihini ka tiimata ki te mahi me te "kapua" kahui ipu he peera ranei (nga roopu ipu).
  2. I tua atu, kaore matou e whakaaro mo nga pene takitahi, engari ka nui ake te whakahaereоnga roopu nui ake. He penei taumata teitei o mua tukua matou ki te kii he tauira mo te whakahaere i etahi mahi, a koinei te maha o nga waa hei whakahaere. Mena ka huri tatou i te tauira, ka rereke nga ahuatanga katoa.
  3. Ma te awhina o API whakapuaki Engari ki te mahi i te raupapa o nga whakahau motuhake, ka whakaahuahia e matou te "hanganga o te ao" (kei roto i te YAML), i hangaia e Kubernetes. Ano ano: ka huri te whakaahuatanga, ka huri ano tona whakaaturanga.

Te whakahaere rauemi

PTM

Me whakahaere tatou i te nginx, php-fpm me mysql i runga i te tūmau. Ko enei ratonga ka nui ake nga tukanga e whakahaere ana, me whai rauemi rorohiko mo ia ratonga:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)
(Ko nga nama kei runga i te kiriata he "kaka", ko te hiahia o ia tukanga mo te hiko rorohiko)

Kia ngawari ake te mahi me tenei, he mea tika ki te whakakotahi i nga tukanga ki nga roopu (hei tauira, nga tukanga nginx katoa ki te roopu "nginx"). Ko te huarahi ngawari me te maarama ki te mahi ko te whakatakoto i ia roopu ki roto i tetahi ipu:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Hei haere tonu, me mahara koe he aha te ipu (i Linux). Ko o raatau ahua i taea te mihi ki nga waahanga matua e toru i roto i te kernel, i whakatinanahia i nga wa roa i mua: āheinga, whakaingoa и Tuhinga. Na etahi atu whanaketanga i awhinahia e etahi atu hangarau (tae atu ki nga "anga" ngawari penei i a Docker):

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

I roto i te horopaki o te purongo, ko taatau anake te hiahia Tuhinga, no te mea ko nga roopu whakahaere te waahanga o nga mahi o nga ipu (Docker, me etahi atu) e whakamahi ana i te whakahaere rauemi. Ko nga tukanga kua whakauruhia ki roto i nga roopu, i ta matou i hiahia ai, ko nga roopu whakahaere.

Me hoki ano ki nga whakaritenga a te PTM mo enei tukanga, inaianei mo nga roopu o nga tukanga:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)
(Ka hoki ano ahau ko nga nama katoa he whakaaturanga mo te hiahia mo nga rauemi)

I te wa ano, ko te PTM ake he rauemi mutunga (i te tauira ko te 1000 tenei), ka ngaro pea te katoa (ko te tapeke o nga hiahia o nga roopu katoa ko te 150+850+460=1460). Ka ahatia i tenei keehi?

Ka timata te kernel ki te tohatoha rauemi me te mahi "tika", ka hoatu te nui o nga rauemi ki ia roopu. Engari i te keehi tuatahi, he nui ake i nga mea e hiahiatia ana (333>150), no reira ka noho rahui te taikaha (333-150=183), he rite ano te tohatoha ki waenga i etahi atu ipu e rua:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Ko te mutunga: ko te ipu tuatahi he nui nga rauemi, ko te tuarua - kaore i te nui nga rauemi, ko te tuatoru - kaore i te nui nga rauemi. Ko te hua tenei o nga mahi "pono" kaihōtaka i Linux - CFS. Ka taea te whakatika i tana mahi ma te whakamahi i te taumahi te taimaha ia ipu. Hei tauira, penei:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Ka titiro tatou ki te take o te kore rawa o nga rauemi i te ipu tuarua (php-fpm). Ka tohatohahia nga rauemi ipu katoa ki waenga i nga tukanga. Ko te mutunga, he pai te mahi a te mahinga matua, engari ka puhoi nga kaimahi katoa, ka iti iho i te haurua o nga mea e hiahiatia ana e ratou:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Koinei te mahi a te CFS scheduler. Ka kiia ano e matou nga taumaha ka tohua e matou ki nga ipu tono. He aha i penei ai - tirohia atu.

Kia titiro tatou ki nga ahuatanga katoa o tera taha. E mohio ana koe, ko nga rori katoa e ahu atu ana ki Roma, a, mo te rorohiko, ki te PTM. Kotahi te PTM, he maha nga mahi - me whai rama waka. Ko te huarahi ngawari ki te whakahaere i nga rauemi ko te "marama hiko": i hoatu e ratou tetahi tukanga he wa whakauru ki te PTM, katahi ka whai ake, aha atu.

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Ko tenei huarahi e kiia ana ko nga motunga pakeke (whakawhāiti pakeke). Kia maumahara noa tatou rohe. Heoi, ki te tohatoha koe i nga rohe ki nga ipu katoa, ka puta he raru: kei te taraiwa a mysql i te huarahi, a, i etahi wa ka mutu tana hiahia mo te PTM, engari ko etahi atu tukanga me tatari kia tae noa ki te PTM. mangere.

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Me hoki ano ki te kernel Linux me tana taunekeneke ki te PTM - ko te pikitia katoa e whai ake nei:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

E rua nga tautuhinga cgroup - ko enei e rua nga "takahuri" ngawari e taea ai e koe te whakatau:

  1. taimaha mo ipu (tono). hea;
  2. ōrau o te tapeke wā PTM mo te mahi i runga i nga mahi ipu (tepe) he Tuhinga.

Me pehea te ine i te PTM?

He rereke nga huarahi:

  1. He aha Tuhinga, kaore tetahi e mohio - me whiriwhiri koe i nga wa katoa.
  2. Pai he maamaa ake, engari he whanaunga: 50% o te tūmau me te 4 nga matua me te 20 nga waahanga he mea rereke.
  3. Ka taea e koe te whakamahi i nga mea kua whakahuahia te taimaha, e mohio ana a Linux, engari he whanaunga ano.
  4. Ko te huarahi tino tika ko te ine i nga rauemi rorohiko hēkona. Ko era. i roto i te hēkona o te wā pūtukatuka e pā ana ki te hēkona o te wā tūturu: 1 te hēkona o te wā pūtukatuka i hoatu mō te 1 te hēkona tūturu - kotahi te matua PTM katoa tenei.

Kia ngawari ake te korero, ka timata ratou ki te ine tika kākano, te tikanga na ratou te wa PTM kotahi e pa ana ki te mea pono. I te mea e mohio ana a Linux ki nga taumahatanga, engari kaore i te nui o te wa CPU/cores, i hiahiatia he tikanga hei whakamaori mai i tetahi ki tetahi.

Me whakaaro tatou ki tetahi tauira ngawari me te tūmau me te 3 cores CPU, i reira ka hoatu nga pauna e toru nga pene (500, 1000 me 1500) ka ngawari te huri ki nga waahanga o nga waahanga kua tohaina ki a raatau (0,5, 1 me 1,5).

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Ki te tango koe i te tūmau tuarua, ka rua ake te maha o nga matua (6), ka tuu i nga peera ano ki reira, ka ngawari te tatau i te tohatoha o nga matua ma te whakarea noa ki te 2 (1, 2 me te 3, ia). Engari he wa nui ka puta mai te wha o nga pene i runga i tenei tūmau, ko tona taumaha, mo te waatea, ka 3000. Ka tangohia e ia tetahi waahanga o nga rauemi CPU (te haurua o nga putunga), mo nga toenga o nga pene ka tatauhia (kua hauruatia):

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Kubernetes me nga rauemi CPU

I roto i nga Kubernetes, ko te nuinga o nga wa ka inehia nga rauemi CPU miriadrax, i.e. Ko te 0,001 nga matua ka tangohia hei taumaha turanga. (Ko te mea ano i roto i nga kupu kupu Linux/cgroups e kiia ana ko te wahanga CPU, ahakoa, tino tika, 1000 millicores = 1024 nga hea CPU.) Ka whakarite a K8s kia kaua e nui ake nga pene ki runga i te tūmau i te maha o nga rauemi CPU mo te tapeke o nga taumaha o nga pene katoa.

Me pehea e tupu ai? Ina tāpiri koe i tētahi tūmau ki tētahi kāhui Kubernetes, ka whakaatuhia e hia ngā uho PTM e wātea ana. A, i te wa e hanga ana i tetahi poti hou, ka mohio te Kaituhituhi Kubernetes e hia nga uho e hiahiatia ana e tenei pene. No reira, ka tautapahia te pod ki te tūmau kei reira te nui o nga matua.

Ka aha mehemea e kore kua tohua te tono (arā, karekau he tau kua tautuhia e te pod)? Kia mohio tatou me pehea te tatau a Kubernetes i nga rauemi.

Mo te peera ka taea e koe te tohu i nga tono e rua (kaiwhakarite CFS) me nga rohe (mahara ki te rama waka?):

  • Mena kua tohua kia rite, ka tohua te pene ki te karaehe QoS kī taurangi. Ko tenei maha o nga matua e waatea ana ki a ia ka whakamanahia.
  • Mena he iti ake te tono i te tepe - te karaehe QoS pakaru. Ko era. Kei te tumanako matou he pona, hei tauira, ka whakamahi i nga wa katoa 1 matua, engari ehara tenei uara i te herenga mo tena: i etahi wa Ka taea e pod te whakamahi ake (ina he rauemi kore utu te tūmau mo tenei).
  • He akomanga QoS ano hoki nga mahi pai rawa atu — kei roto ko nga putunga kaore i tohua te tono. Ko nga rauemi ka tukuna ki a raatau.

Maharahara

Ma te mahara, he rite tonu te ahuatanga, engari he paku rereke - i muri i nga mea katoa, he rereke te ahua o enei rauemi. I te nuinga o te waa, ko te whakataurite e whai ake nei:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Kia kite tatou me pehea te whakatinana i nga tono ki te mahara. Kia ora nga poti ki runga i te tūmau, me te huri i te kohi mahara, kia nui rawa te rahi o tetahi ka pau te mahara. I tenei keehi, ka puta te kaipatu OOM ka patu i te mahinga nui rawa atu:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Kaore tenei e pai ana ki a tatou i nga wa katoa, na reira ka taea te whakarite ko wai nga tikanga he mea nui ki a tatou, me te kore e mate. Ki te mahi i tenei, whakamahia te tawhā oom_Score_adj.

Me hoki ano ki nga karaehe QoS o te PTM ka tuhia he whakataurite me nga uara oom_score_adj e whakatau ana i nga kaupapa matua mo te kai maumahara mo nga pene:

  • Ko te uara oom_score_adj iti rawa mo te poti - -998 - ko te tikanga me patu tera poti i te mutunga, tenei kī taurangi.
  • Ko te teitei - 1000 - ko nga mahi pai rawa atu, ka patua i te tuatahi nga peera.
  • Hei tatau i nga uara e toe ana (pakaru) he tātai, ko te ngako o te mea e pa ana ki te nui ake o nga rauemi kua tonohia e te pod, ka iti ake te mate.

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Ko te tuarua "takahuri" - rohe_i_paita - mo nga rohe. Ma tenei, he maamaa ake nga mea katoa: ka tohua noa e matou te nui o te maharatanga kua tukuna, a i konei (kaore i te PTM) kaore he patai me pehea te ine (mahara).

Te tapeke

Ka hoatu ki ia pene i Kubernetes requests и limits - nga tawhā e rua mo te PTM me te mahara:

  1. i runga i nga tono, ka mahi te Kaihoko Kubernetes, e tohatoha ana i nga pona ki waenga i nga kaitoro;
  2. i runga i nga tawhā katoa, ka whakatauhia te karaehe QoS o te pod;
  3. Ka tatauhia nga taumahatanga i runga i nga tono PTM;
  4. kua whirihorahia te kaihōtaka CFS i runga i nga tono a te PTM;
  5. Kua whirihorahia te kaipatu OOM i runga i nga tono mahara;
  6. kua whirihorahia he "rama hiko" i runga i nga rohe CPU;
  7. I runga i nga rohe mahara, ka whirihorahia he rohe mo te cgroup.

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

I te nuinga o te waa, ka whakautua e tenei pikitia nga paatai ​​​​katoa mo te ahuatanga o te waahanga matua o te whakahaere rauemi ki Kubernetes.

Tauineaunoa

K8s tautau-autoscaler

Me whakaaro kua noho kee te kahui katoa, me hanga he putunga hou. Ahakoa kaore e taea te puta mai, ka iri te mana tārewa. Kia puta mai, ka taea e tatou te hono atu i tetahi tūmau hou ki te tautau, ki te ... tāuta cluster-autoscaler, ka mahi ma tatou: tono he miihini mariko mai i te kaiwhakarato kapua (ma te whakamahi i te tono API) ka hono atu ki te roopu. , muri iho ka taapirihia te poti.

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Koinei te whakahiato aunoa o te roopu Kubernetes, he pai te mahi (i roto i o maatau wheako). Heoi, pera i etahi atu waahi, kei konei etahi ahuatanga ...

I te wa i whakanuia e matou te rahi o te tautau, he pai nga mea katoa, engari he aha te mea ka tupu te tautau ka timata ia ki te wewete i a ia ano? Ko te raruraru ko te heke o nga pene (ki te whakaatea i nga kaihautu) he tino uaua me te utu nui i runga i nga rauemi. Ka whakamahia e Kubernetes tetahi huarahi rereke.

Whakaarohia he huinga o nga tūmau e 3 kei te Whakamahinga. E 6 nga pene: inaianei e 2 mo ia tūmau. Mo etahi take i hiahia matou ki te whakaweto i tetahi o nga tūmau. Ki te mahi i tenei ka whakamahia e matou te whakahau kubectl drain, e:

  • ka aukati i te tuku poti hou ki tenei tūmau;
  • ka mukua nga putunga kei runga i te tūmau.

I te mea ko Kubernetes te kawenga mo te pupuri i te maha o nga poti (6), he ngawari noa ka hanga ano i runga i etahi atu pona, engari kaua i runga i te mea e monoa ana, i te mea kua tohua kua kore e waatea mo te manaaki i nga pene hou. He miihini taketake tenei mo Kubernetes.

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Heoi ano, he ahua ano kei konei. I roto i te ahua rite, mo StatefulSet (hei utu mo te Whakamahinga), ka rereke nga mahi. Inaianei kei a maatau he tono whaimana - hei tauira, e toru nga pene me MongoDB, he raru tetahi (kua kino nga raraunga, tetahi atu hapa ranei e aukati ana i te tiimata tika). Na ka whakatau ano matou ki te whakakore i tetahi tūmau. Ka ahatia?

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

MongoDB taea ka mate na te mea me whai koorama: mo te roopu e toru nga whakaurunga, me mahi kia rua neke atu. Heoi, ko tenei e kore e tupu - whakawhetai ki PodDisruptionBudget. Ka whakatauhia e tenei tawhā te iti rawa o te maha e hiahiatia ana o nga pene mahi. Ma te mohio kua kore e mahi tetahi o nga pene MongoDB, me te kite kua whakaritea te PodDisruptionBudget mo MongoDB minAvailable: 2, Karekau a Kubernetes e whakaae kia mukua e koe he poti.

Rarangi raro: kia tika ai te mahi o te nekehanga (me te mea ano, ko te hanga ano) o nga pene ka tukuna te tautau, me whirihora i te PodDisruptionBudget.

Tauine Whakapae

Ka whakaarohia e tatou tetahi atu ahuatanga. He tono kei te whakahaere hei Hoatutanga ki Kubernetes. Ka tae mai nga waka a nga kaiwhakamahi ki ona pokano (hei tauira, e toru o raatau), ka inehia e matou tetahi tohu kei roto (me kii, utaina CPU). Ka piki ake te kawenga, ka tuhia e matou ki runga i te waarangi me te whakanui ake i te maha o nga pene ki te tohatoha i nga tono.

I tenei ra i Kubernetes kaore tenei e tika kia mahia a-ringa: ka whirihorahia te pikinga / whakaheke aunoa i te maha o nga poti i runga i nga uara o nga tohu kawenga ine.

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Ko nga patai matua i konei ko: he aha te mea hei ine и me pehea te whakamaori kua whiwhi uara (mo te whakatau i te whakarereke i te maha o nga pene). Ka taea e koe te ine nui:

Te whakatauira aunoa me te whakahaere rauemi i Kubernetes (te arotake me te purongo ataata)

Me pehea te mahi hangarau - kohikohi ine, etc. — I korero ahau i roto i nga korero i roto i te ripoata mo Aroturuki me nga Kubernetes. A ko te tohutohu matua mo te whiriwhiri i nga tawhā tino pai ko whakamātau!

He WHAKAMAHI tikanga (Te Whakamahinga Mahinga me nga Hapa), ko te tikanga e whai ake nei. He aha te tikanga o te tauine, hei tauira, php-fpm? I runga i te mea kei te rere nga kaimahi, koinei whakamahinga. A, ki te mutu nga kaimahi, karekau e whakaaehia nga hononga hou, kua oti tenei kohurutanga. Ko enei tawhā e rua me ine, a, i runga i nga uara, me mahi te whakatauine.

Engari o te mutunga

He haere tonu te purongo: mo te whakatauira poutū me te huarahi ki te kowhiri i nga rauemi tika. Ka korero ahau mo tenei i nga riipene ataata kei te heke mai to tatou YouTube - ohauru kia kore koe e ngaro!

Ataata me nga kiriata

Ataata mai i te whakaaturanga (44 meneti):

Whakaaturanga o te ripoata:

PS

Ko etahi atu korero mo Kubernetes i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero