Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Eprel 27 na ogbako Mbu 2019, dị ka akụkụ nke ngalaba "DevOps", e nyere akụkọ "Akụkọ akpaaka na njikwa akụrụngwa na Kubernetes". Ọ na-ekwu maka otu ị ga-esi jiri K8s hụ na enwere ngwa gị dị elu ma hụ na arụmọrụ kacha elu.

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Site na ọdịnala, anyị nwere obi ụtọ iweta vidiyo nke akụkọ (Nkeji 44, ọtụtụ ihe ọmụma karịa akụkọ) na nchịkọta isi na ụdị ederede. Gaba!

Ka anyị nyochaa isiokwu nke akụkọ a site na okwu wee malite na njedebe.

Kubernetes

Пусть у нас на хосте есть Docker-контейнеры. Зачем? Для обеспечения повторяемости и изоляции, которые в свою очередь позволяют сделать просто и хорошо деплой, CI/CD. Таких машин с контейнерами у нас много.

Kedu ihe Kubernetes na-enye na nke a?

  1. Anyị kwụsịrị iche echiche maka igwe ndị a wee malite ịrụ ọrụ na "igwe ojii" ụyọkọ arịa ma ọ bụ pods (otu nke arịa).
  2. Ọzọkwa, anyị anaghị eche maka pọd onye ọ bụla, mana jikwaa karịaоnnukwu otu. Dị otú ahụ elu-larịị primitives ekwe ka anyị kwuo na e nwere template maka ịrụ ọrụ ụfọdụ, na ebe a bụ ọnụ ọgụgụ achọrọ nke oge iji mee ya. Ọ bụrụ na anyị emechaa gbanwee ndebiri, ọnọdụ niile ga-agbanwe.
  3. Site n'enyemaka nke API nkwupụta мы вместо выполнения последовательности конкретных команд описываем «устройство мира» (в YAML), который создаётся Kubernetes’ом. И снова: при изменениях описания будет меняться и его реально отображение.

Njikwa akụrụngwa

CPU

Ka anyị mee nginx, php-fpm na mysql na sava ahụ. Ọrụ ndị a ga-enwe ọtụtụ usoro na-agba ọsọ, nke ọ bụla n'ime ha chọrọ akụrụngwa mgbakọ:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)
(nọmba ndị dị na slide bụ "parrots", mkpa nkịtị nke usoro ọ bụla maka ike ịgbakọ)

Iji mee ka ọ dịkwuo mfe ịrụ ọrụ na nke a, ọ bụ ihe ezi uche dị na ya ijikọta usoro n'ime otu (dịka ọmụmaatụ, usoro nginx niile n'ime otu "nginx"). Ụzọ dị mfe na nke doro anya isi mee nke a bụ itinye otu ọ bụla n'ime akpa:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Iji gaa n'ihu, ịkwesịrị icheta ihe akpa bụ (na Linux). Emere ka ọdịdị ha kwe omume n'ihi njirimara isi atọ dị na kernel, etinyere ogologo oge gara aga: ike, aha и ìgwè. Na teknụzụ ndị ọzọ kwadoro mmepe ọzọ (gụnyere "shells" dị ka Docker):

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

В контексте доклада нас интересует только ìgwè, n'ihi na otu njikwa bụ akụkụ nke ọrụ nke arịa (Docker, wdg) na-emejuputa njikwa akụrụngwa. Usoro jikọtara n'ime otu, dịka anyị chọrọ, bụ otu njikwa.

Вернёмся к потребностям в CPU у этих процессов, а теперь уже — у групп процессов:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)
(Ana m ekwughachi na ọnụọgụ niile bụ ngosipụta nkịtị nke mkpa akụrụngwa)

N'otu oge ahụ, CPU n'onwe ya nwere ụfọdụ akụrụngwa nwere njedebe (n'ihe atụ nke a bụ 1000), nke onye ọ bụla nwere ike ghara (nchịkọta mkpa nke otu niile bụ 150+850+460=1460). Gịnị ga-eme na nke a?

The kernel na-amalite ikesa akụrụngwa ma mee ya "n'ụzọ ziri ezi", na-enye otu ego otu ọ bụla. Ma na nke mbụ, e nwere ọtụtụ n'ime ha karịa ka achọrọ (333>150), ya mere ngafe (333-150 = 183) na-anọgide na-echekwa, nke a na-ekesakwa n'etiti akpa abụọ ọzọ:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

N'ihi ya: akpa akpa nwere ihe zuru oke, nke abụọ - enweghị ego zuru oke, nke atọ - enweghị ihe onwunwe zuru oke. Nke a bụ nsonaazụ omume "Onye na-eme ihe n'eziokwu" na Linux - CFS. Enwere ike ịhazigharị ọrụ ya site na iji ọrụ ahụ igwe nke ọ bụla nke containers. Dịka ọmụmaatụ, dịka nke a:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Ka anyị leba anya n'ihe gbasara enweghị akụrụngwa na akpa nke abụọ (php-fpm). A na-ekesa akụrụngwa niile otu nha n'etiti usoro. N'ihi ya, usoro nna ukwu na-arụ ọrụ nke ọma, ma ndị ọrụ niile na-ebelata, na-enweta ihe na-erughị ọkara nke ihe ha chọrọ:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Так работает планировщик CFS. Веса, которые мы назначаем контейнерам, в дальнейшем будем назвать arịrịọ. Kedu ihe kpatara nke a - lee anya.

Ka anyị leba anya n'ọnọdụ niile site n'akụkụ nke ọzọ. Dị ka ị maara, ụzọ niile na-eduga na Rome, na n'ihe banyere kọmputa, na CPU. Otu CPU, ọtụtụ ọrụ - ịchọrọ ọkụ okporo ụzọ. Ụzọ kachasị mfe iji jikwaa akụrụngwa bụ "ọkụ okporo ụzọ": ha nyere otu usoro oge ohere ịnweta CPU, emesia nke ọzọ, wdg.

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

A na-akpọ usoro a oke oke (mmachi siri ike). Ka anyị cheta ya dị ka oke. Однако, если раздать всем контейнерами лимиты, возникает проблема: mysql ехал по дороге и в какой-то момент его потребность в CPU закончилась, но все остальные процессы вынуждены ждать, пока CPU ejighi oru.

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Ka anyị laghachi na Linux kernel na mmekọrịta ya na CPU - foto n'ozuzu ya bụ nke a:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

cgroup nwere ntọala abụọ - n'ụzọ bụ isi ndị a bụ "mgbagọ" abụọ dị mfe nke na-enye gị ohere ikpebi:

  1. arọ maka akpa (arịrịọ) bụ mbak;
  2. Pasent ngụkọta oge CPU maka ịrụ ọrụ na akpa (oke) bụ nkwụsị.

В чём мерить CPU?

Enwere ụzọ dị iche iche:

  1. Gịnị icheoku, Ọ dịghị onye maara - mkpa ka ị kpakọrịta oge ọ bụla.
  2. Mmasị doro anya, mana ikwu: 50% nke ihe nkesa nwere cores 4 yana 20 cores bụ ihe dị iche iche.
  3. Ị nwere ike iji ndị a kpọtụrụ aha igwe, nke Linux maara, mana ha bụkwa ndị ikwu.
  4. Nhọrọ kachasị mma bụ ịlele akụrụngwa mgbakọ na mwepụ sekọnd. Т.е. в секундах процессорного времени по отношению к секундам реального времени: выдали 1 секунду процессорного времени в 1 реальную секунду — это одно ядро CPU целиком.

Iji mee ka ọ dịkwuo mfe ikwu okwu, ha malitere ịtụ ihe ozugbo ndụ, nke pụtara site na ha otu oge CPU n'ihe metụtara n'ezie. Ebe ọ bụ na Linux na-aghọta ihe ọ̀tụ̀tụ̀ dị arọ, ma ọ bụghị nke ukwuu oge/cores CPU, a chọrọ usoro iji tụgharịa si n'otu gaa na nke ọzọ.

Рассмотрим простой пример с сервером с 3 ядрами CPU, где трём pod’ам будут выбраны такие веса (500, 1000 и 1500), которые легко конвертируются в соответствующие части выделенных им ядер (0,5, 1 и 1,5).

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Ọ bụrụ na ị were sava nke abụọ, ebe a ga-enwe okpukpu abụọ nke cores (6), ma tinye otu pọd ahụ n'ebe ahụ, enwere ike ịgbakọ nkesa cores n'ụzọ dị mfe site n'ịba ụba site na 2 (1, 2 na 3, n'otu n'otu). Mana oge dị mkpa na-eme mgbe pọd nke anọ pụtara na ihe nkesa a, nke ịdị arọ ya, maka ịdị mma, ga-abụ 3000. Ọ na-ewepụ akụkụ nke ihe onwunwe CPU (ọkara cores), na maka pods fọdụrụnụ, a na-atụgharịghachi ya (hapụrụ):

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Kubernetes na akụrụngwa CPU

Na Kubernetes, a na-atụkarị akụrụngwa CPU milliadrax, т.е. в качестве базового веса берётся 0,001 ядра. (Otu ihe dị na Linux/cgroups terminology ka a na-akpọ oke CPU, ọ bụ ezie na, karịa, 1000 millicores = 1024 CPU mbak.) K8s na-achọpụta na ọ naghị etinye ọtụtụ pọd na sava karịa ka enwere akụrụngwa CPU maka nchikota nke pọd niile.

Kedu ka nke a si eme? Mgbe ị gbakwunyere ihe nkesa na ụyọkọ Kubernetes, a na-akọ ọnụọgụ cores CPU ole ọ dị. Na mgbe ị na-ekepụta pọd ọhụrụ, onye nhazi Kubernetes maara ọtụtụ cores pọd a ga-achọ. Ya mere, a ga-ekenye pọd ahụ na sava ebe enwere cores zuru oke.

Gịnị ga-eme ma ọ bụrụ bụghị a kapịrị ọnụ arịrịọ (ya bụ, pọd ahụ enweghị ọnụọgụ cores akọwapụtara ọ chọrọ)? Ka anyị chọpụta ka Kubernetes na-agụkarị akụrụngwa.

Maka pọd ị nwere ike ịkọwa arịrịọ abụọ ahụ (CFS nhazi) yana oke (cheta ọkụ okporo ụzọ?):

  • Ọ bụrụ na akọwapụtara ha nhata, mgbe ahụ, a na-ekenye pọd ahụ klas QoS ejiri n'aka. A na-ekwe nkwa ọnụọgụ cores a mgbe niile.
  • Ọ bụrụ na arịrịọ ahụ erughị oke - klas QoS mgbawa. Ndị ahụ. Anyị na-atụ anya ka pọd, dịka ọmụmaatụ, na-eji 1 isi mgbe niile, mana uru a abụghị njedebe maka ya: ike pod nwere ike iji karịa (mgbe ihe nkesa nwere akụrụngwa efu maka nke a).
  • Enwekwara klaasị QoS ike kacha mma - ọ na-agụnye pods ndị ahụ nke akọwapụtaghị arịrịọ maka ya. A na-enye ha akụ ikpeazụ.

ebe nchekwa

Na ebe nchekwa, ọnọdụ ahụ yiri, ma dịtụ iche - mgbe niile, ọdịdị nke ihe ndị a dị iche iche. N'ozuzu, ntụnyere bụ nke a:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Ka anyị hụ ka esi etinye arịrịọ na ebe nchekwa. Mee ka pọd ndị ahụ dị ndụ na ihe nkesa, na-agbanwe oriri ebe nchekwa, ruo mgbe otu n'ime ha na-ebuwanye ibu nke na ọ na-agwụ na ebe nchekwa. N'okwu a, onye na-egbu OOM pụtara ma gbuo usoro kachasị ukwuu:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Nke a anaghị adabara anyị mgbe niile, ya mere ọ ga-ekwe omume ịhazi usoro nke dị anyị mkpa ma ghara igbu ya. Iji mee nke a, jiri paramita oom_score_adj.

Ka anyị laghachi na klaasị QoS nke CPU wee see ihe atụ na ụkpụrụ oom_score_adj nke na-ekpebi ihe ndị kacha mkpa oriri ebe nchekwa maka pọd:

  • Uru oom_score_adj kacha ala maka pọd - -998 - pụtara na ekwesịrị igbu ụdị pọd dị otú ahụ n'ikpeazụ, nke a ejiri n'aka.
  • Nke kacha elu - 1000 - bụ ike kacha mma, a na-ebu ụzọ gbuo pọd ndị dị otú ahụ.
  • Iji gbakọọ ụkpụrụ ndị fọdụrụ (mgbawa) e nwere usoro, nke isi ya gbadara n'eziokwu ahụ bụ na ka akụ nke pọd rịọrọ, ọ ga-abụrịrị na a ga-egbu ya.

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Nke abụọ "gbagọ" - limit_in_bytes - maka oke. Na ya, ihe niile dị mfe: anyị na-ekenye oke nke ebe nchekwa enyere, na ebe a (n'adịghị ka CPU) enweghị ajụjụ maka otu esi atụ ya (ncheta).

Ọnụ

A na-enye pọd ọ bụla na Kubernetes requests и limits - ma parampat maka CPU na ebe nchekwa:

  1. dabere na arịrịọ, onye nhazi oge Kubernetes na-arụ ọrụ, nke na-ekesa pọd n'etiti sava;
  2. dabere na parampat niile, a na-ekpebi klaasị QoS nke pod;
  3. A na-agbakọ nha ndị ikwu dabere na arịrịọ CPU;
  4. A na-ahazi onye nhazi CFS dabere na arịrịọ CPU;
  5. A haziri onye na-egbu OOM dabere na arịrịọ ebe nchekwa;
  6. a na-ahazi “ọkụ okporo ụzọ” dabere na oke CPU;
  7. Dabere na oke ebe nchekwa, a na-ahazi oke maka otu.

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

N'ozuzu, foto a na-aza ajụjụ niile gbasara otu akụkụ bụ isi nke njikwa ihe onwunwe si eme na Kubernetes.

Autoscaling

K8s ụyọkọ-autoscaler

Ka anyị were were were n'ụyọkọ ahụ niile na ọ dị mkpa ka e mepụta pọd ọhụrụ. Ebe pọd enweghị ike ịpụta, ọ kwụgidere na ọkwa rue mgbe. Ka ọ pụta ìhè, anyị nwere ike jikọọ ihe nkesa ọhụrụ na ụyọkọ ma ọ bụ ... wụnye cluster-autoscaler, nke ga-emere anyị ya: nye iwu igwe mebere igwe sitere na igwe ojii (iji arịrịọ API) wee jikọọ ya na ụyọkọ ahụ. , mgbe nke ahụ gasịrị, a ga-agbakwunye pọd ahụ.

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Nke a bụ autoscaling nke Kubernetes ụyọkọ, nke na-arụ ọrụ nke ukwuu (na anyị ahụmahụ). Agbanyeghị, dị ka ebe ndị ọzọ, enwere ụfọdụ nuances ebe a ...

Ọ bụrụhaala na anyị na-abawanye nha ụyọkọ ahụ, ihe niile dị mma, mana ihe na-eme mgbe ụyọkọ ahụ malitere ịtọhapụ onwe ya? Nsogbu a bụ na pọd ịkwaga (iji tọhapụ ndị ọbịa) bụ ihe siri ike na teknụzụ ma dị oke ọnụ n'ihe gbasara akụrụngwa. Kubernetes na-eji ụzọ dị iche iche.

Tụlee ụyọkọ nke sava 3 nwere Deployment. O nwere 6 pọd: ugbu a enwere 2 maka nkesa ọ bụla. N'ihi ihe ụfọdụ anyị chọrọ gbanyụọ otu n'ime sava ahụ. Iji mee nke a, anyị ga-eji iwu ahụ kubectl drain, nke:

  • ga-amachibido izipu pọd ọhụrụ na nkesa a;
  • ga-ehichapụ pọd ndị dị na sava ahụ.

Ebe ọ bụ na Kubernetes na-ahụ maka idobe ọnụ ọgụgụ pọd (6), ọ dị mfe ga-emepụtaghachi ha n'ọnụ ụzọ ndị ọzọ, mana ọ bụghị na nke nwere nkwarụ, ebe ọ bụ na edobelarị ya dị ka ọ nweghị maka ịnabata pọd ọhụrụ. Nke a bụ makaniiki bụ isi maka Kubernetes.

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Agbanyeghị, enwerekwa nuance ebe a. N'ọnọdụ yiri nke ahụ, maka StatefulSet (kama ntinye), omume ga-adị iche. Ugbu a, anyị enweelarị ngwa steeti - dịka ọmụmaatụ, pọd atọ nwere MongoDB, otu n'ime ha nwere ụdị nsogbu (data emebiela ma ọ bụ njehie ọzọ na-egbochi pods ịmalite nke ọma). Anyị na-ekpebi ọzọ iji gbanyụọ otu ihe nkesa. Gịnị ga-eme?

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

MongoDB nwere ike anwụ n'ihi na ọ chọrọ quorum: maka ụyọkọ nke nrụnye atọ, opekata mpe abụọ ga-arụ ọrụ. Agbanyeghị, nke a adịghị eme - ekele BuddisruptionBudget. Oke a na-ekpebi ọnụ ọgụgụ pọd na-arụ ọrụ kacha nta achọrọ. Ịmara na otu n'ime pọd MongoDB anaghịzi arụ ọrụ, yana ịhụ na edobere PodDisruptionBudget maka MongoDB minAvailable: 2, Kubernetes agaghị ekwe ka ihichapụ pọd.

N'okpuru ala: ka mmegharị ahụ (na n'eziokwu, nrụpụtagharị) nke pọd ka ọ rụọ ọrụ nke ọma mgbe a tọhapụrụ ụyọkọ ahụ, ọ dị mkpa ịhazi PodDisruptionBudget.

Ntụle kwụ ọtọ

Ka anyị tụlee ọnọdụ ọzọ. Enwere ngwa na-agba ọsọ dị ka ntinye na Kubernetes. Okporo ụzọ onye ọrụ na-abịa na pọd ya (dịka ọmụmaatụ, enwere atọ n'ime ha), anyị na-atụkwa otu ihe ngosi n'ime ha (sị, ibu CPU). Mgbe ibu na-abawanye, anyị na-edekọ nke a na nhazi oge ma mee ka ọnụ ọgụgụ nke pods kesaa arịrịọ.

Taa na Kubernetes nke a ekwesịghị iji aka mee nke a: a na-ahazi mmụba / mbelata akpaka na ọnụ ọgụgụ nke pọd dabere na ụkpụrụ nke ihe ngosi ibu tụrụ.

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Ajụjụ ndị bụ isi ebe a bụ: что именно измерять и ka esi akọwa nwetara ụkpụrụ (maka ime mkpebi na-agbanwe ọnụ ọgụgụ nke pọd). Ị nwere ike ịlele ọtụtụ:

Nleba anya na njikwa akụrụngwa na Kubernetes (nyocha na akụkọ vidiyo)

Как делать это технически — собирать метрики и т.п. — я подробно рассказывал в докладе про Nleba anya na Kubernetes. Na ndụmọdụ bụ isi maka ịhọrọ parampat kacha mma bụ nnwale!

E nwere Jiri usoro (Saturation na mmejọ eji eme ihe), ihe ọ pụtara bụ nke a. Na kedu ihe ndabere ka ọ bara uru iji tụọ, dịka ọmụmaatụ, php-fpm? Dabere n'eziokwu na ndị ọrụ na-agba ọsọ, nke a bụ itinye n'ọrụ. А если worker’ы закончились и новые подключения не принимаются — это уже anwu. A ghaghị tụọ akụkụ abụọ ndị a, ma dabere na ụkpụrụ, a ga-emerịrị nhazi.

Kama nkwubi okwu

Akụkọ ahụ nwere ihe na-aga n'ihu: gbasara nhazi nke kwụ ọtọ na otu esi ahọrọ akụrụngwa ziri ezi. M ga-ekwu maka nke a na vidiyo n'ọdịnihu YouTube anyị - denye aha ka ị ghara ịgbaghara!

Vidiyo na slide

Видео с выступления (44 минуты):

Ngosipụta akụkọ a:

PS

Akụkọ ndị ọzọ gbasara Kubernetes na blọọgụ anyị:

isi: www.habr.com

Tinye a comment