Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices

Aha m bụ Viktor Yagofarov, ana m etolite ikpo okwu Kubernetes na DomClick dị ka onye njikwa mmepe teknụzụ na otu Ops (ọrụ). Ọ ga-amasị m ikwu banyere usoro nke usoro Dev Ops anyị, njirimara nke ịrụ ọrụ otu n'ime ụyọkọ k8s kasị ukwuu na Russia, yana omume DevOps / SRE nke otu anyị na-etinye.

Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices

Otu ops

Ndị otu Ops nwere mmadụ iri na ise ugbu a. Atọ n'ime ha na-ahụ maka ọfịs, abụọ na-arụ ọrụ na mpaghara oge dị iche ma dị, gụnyere n'abalị. Ya mere, onye si Ops na-anọ mgbe niile na onye nleba anya ma dị njikere ịzaghachi ihe omume nke mgbagwoju anya ọ bụla. Anyị enweghị ọrụ abalị, nke na-echekwa psyche anyị ma na-enye onye ọ bụla ohere iji nweta ụra zuru oke ma nọrọ oge ntụrụndụ ọ bụghị naanị na kọmputa.

Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices

Onye ọ bụla nwere ikike dị iche iche: netwọkụ, DBAs, ọkachamara ELK stack, Kubernetes admins/mmepe, nlekota oru, virtualization, ngwaike ọkachamara, wdg. Otu ihe na-ejikọ onye ọ bụla - onye ọ bụla nwere ike dochie onye ọ bụla n'ime anyị ruo n'ókè ụfọdụ: dịka ọmụmaatụ, webata ọnụ ụzọ ọhụrụ n'ime ụyọkọ k8s, melite PostgreSQL, dee pipeline CI / CD + nwere ike ime, rụọ ọrụ ihe na Python / Bash / Go, jikọọ ngwaike na Ebe data. Ikike siri ike na mpaghara ọ bụla anaghị egbochi gị ịgbanwe ntụzịaka ọrụ gị wee malite imeziwanye n'akụkụ ọzọ. Dịka ọmụmaatụ, esonyere m ụlọ ọrụ dịka ọkachamara PostgreSQL, ma ugbu a isi ọrụ m bụ ụyọkọ Kubernetes. N'ime otu ahụ, a na-anabata ịdị elu ọ bụla na echiche nke leverage na-etolite nke ọma.

Site n'ụzọ, anyị na-achụ nta. Ihe ndị chọrọ maka ndị na-aga ime bụ ezigbo ọkọlọtọ. Maka m n'onwe m, ọ dị mkpa na mmadụ dabara n'ime otu ahụ, ọ bụghị esemokwu, ma marakwa otú e si agbachitere echiche ya, chọrọ ịzụlite ma ghara ịtụ egwu ime ihe ọhụrụ, na-enye echiche ya. Ọzọkwa, a chọrọ nkà mmemme n'asụsụ scripting, ihe ọmụma nke isi Linux na Bekee. Bekee dị mkpa ka ọ bụrụ na mmadụ nwere fakap nwere ike google ngwọta maka nsogbu ahụ na 10 sekọnd, ọ bụghị n'ime nkeji iri. Ọ bụ ihe siri ike ugbu a ịchọta ndị ọkachamara nwere ihe ọmụma miri emi nke Linux: ọ na-atọ ọchị, mana mmadụ abụọ n'ime atọ ndị na-aga ime enweghị ike ịza ajụjụ a "Gịnị bụ Nkezi Ibu? Kedu ihe a na-eme ya?", na ajụjụ bụ "Otu esi ejikọta isi ihe na mmemme C" ka a na-ewere dị ka ihe sitere na ụwa nke supermen ... ma ọ bụ dinosaurs. Anyị ga-anagide nke a, ebe ọ bụ na ndị mmadụ etolitela ikike ndị ọzọ nke ukwuu, mana anyị ga-akụzi Linux. Azịza nke ajụjụ a " gịnị kpatara onye injinia DevOps ji chọọ ịmata ihe a niile na ụwa nke igwe ojii nke oge a" ga-ahapụrịrị n'èzí nke isiokwu ahụ, mana n'okwu atọ: ihe a niile dị mkpa.

Ngwa otu

Otu ngwaọrụ na-arụ ọrụ dị mkpa na akpaaka. Ọrụ ha bụ isi bụ imepụta ngwa eserese na CLI dabara adaba maka ndị mmepe. Dịka ọmụmaatụ, Confer mmepe nke ime anyị na-enye gị ohere iji naanị pịa bọtịnụ ole na ole wepụta ngwa na Kubernetes, hazie akụrụngwa ya, igodo sitere na vault, wdg. Na mbụ, e nwere Jenkins + Helm 2, mana m ga-emepụta ngwá ọrụ nke m iji wepụ oyiri-paste ma weta ịdị n'otu na usoro ndụ ngwanrọ.

Ndị otu Ops anaghị ede pipeline maka ndị mmepe, mana ha nwere ike inye ndụmọdụ maka okwu ọ bụla na ederede ha (ụfọdụ ndị ka nwere Helm 3).

DevOps

Banyere DevOps, anyị na-ahụ ya dị ka nke a:

Ndị otu Dev na-ede koodu, bufee ya site na Confer to dev -> qa/stage -> prod. Ọrụ maka ịhụ na koodu anaghị akwụsịlata yana enweghị mperi dị n'etiti otu Dev na Ops. N'ehihie, onye na-arụ ọrụ site na otu Ops kwesịrị ibu ụzọ zaghachi ihe merenụ na ngwa ya, na mgbede na n'abalị, onye nchịkwa na-arụ ọrụ (Ops) kwesịrị ịkpọte onye mmepụta na ọrụ ma ọ bụrụ na ọ maara maka ya. jide n'aka na nsogbu ahụ adịghị na akụrụngwa. Metiriks na ọkwa niile dị na nlebanya na-apụta na akpaghị aka ma ọ bụ ọkara na-akpaghị aka.

Mpaghara Ops nke ọrụ na-amalite site na mgbe etinyere ngwa ahụ na mmepụta, mana ọrụ Dev anaghị akwụsị ebe ahụ - anyị na-eme otu ihe ahụ ma nọ n'otu ụgbọ mmiri.

Ndị mmepe na-adụ ọdụ admins ma ọ bụrụ na ha chọrọ enyemaka ide ihe nchịkwa microservice (dịka ọmụmaatụ, Go backend + HTML5), na ndị nchịkwa na-adụ ndị mmepe ọdụ n'ihe gbasara akụrụngwa ma ọ bụ okwu metụtara k8s.

Site n'ụzọ, anyị enweghị monolith ma ọlị, naanị microservices. Ọnụọgụ ha dị ugbu a na-agbanwe n'etiti 900 na 1000 na ụyọkọ prod k8s, ma ọ bụrụ na ejiri nọmba tụọ ya. nkenye ọnọdụ. Ọnụ ọgụgụ pọd na-agbanwe n'etiti 1700 na 2000. Enwere ugbu a ihe dị ka 2000 pods na ụyọkọ prod.

Enweghị m ike ịnye ọnụ ọgụgụ ziri ezi, ebe anyị na-enyocha microservices na-adịghị mkpa ma bepụ ha ọkara-akpaghị aka. K8s na-enyere anyị aka idobe ihe ndị na-adịghị mkpa onye na-abaghị uru, nke na-azọpụta ọtụtụ ihe onwunwe na ego.

Njikwa akụrụngwa

Nlekota oru

Nleba anya ahaziri nke ọma na ihe ọmụma na-aghọ isi nkuku na ọrụ nke nnukwu ụyọkọ. Anyị achọtabeghị ngwọta zuru ụwa ọnụ nke ga-ekpuchi 100% nke mkpa nlekota niile, ya mere anyị na-emepụta ihe ngwọta omenala dị iche iche na gburugburu ebe a.

  • Zabbix. Nlebanya ochie dị mma, nke e bu n'obi iji soro ọnọdụ ọnọdụ akụrụngwa. Ọ na-agwa anyị mgbe ọnụ na-anwụ n'ihe gbasara nhazi, ebe nchekwa, diski, netwọk, na ihe ndị ọzọ. Ọ dịghị ihe karịrị nke mmadụ, ma anyị nwekwara dị iche iche DaemonSet nke elekọta mmadụ, site n'enyemaka nke, n'ihi na ihe atụ, anyị nyochaa ala DNS na ụyọkọ: anyị na-achọ nzuzu coredns pods, anyị na-elele nnweta nke mpụga ụsụụ ndị agha. Ọ ga-adị ka ihe kpatara na-enye nsogbu na nke a, ma na nnukwu mpịakọta nke okporo ụzọ akụkụ a bụ ihe dị njọ nke ọdịda. m ugbua kọwara, ka m si gbalịsie ike na arụmọrụ DNS na ụyọkọ.
  • Onye ọrụ Prometheus. Otu ndị na-ebupụ ihe dị iche iche na-enye nkọwa buru ibu nke akụkụ niile nke ụyọkọ ahụ. Na-esote, anyị na-ahụ ihe ndị a niile na nnukwu dashboards na Grafana, ma jiri alertmanager maka ọkwa.

Ngwá ọrụ ọzọ bara uru nye anyị bụ ndepụta-nbanye. Anyị dere ya mgbe ọtụtụ ugboro, anyị zutere ọnọdụ ebe otu otu jikọtara ụzọ Ingress nke otu ọzọ, na-ebute njehie 50x. Ugbu a tupu itinye aka na mmepụta, ndị mmepe na-achọpụta na ọ dịghị onye ga-emetụta ya, na maka otu m nke a bụ ngwá ọrụ dị mma maka nchọpụta mbụ nke nsogbu na Ingresses. Ọ bụ ihe ọchị na na mbụ e dere ya maka ndị admins ma ọ dị ka “mgbagwoju anya”, mana mgbe ndị otu dev hụrụ ngwa ahụ n'anya, ọ gbanwere nke ukwuu wee malite ịdị ka “onye nchịkwa mere ihu webụ maka admins. ” N'oge na-adịghị anya, anyị ga-ahapụ ngwá ọrụ a na ọnọdụ ndị dị otú ahụ ga-akwado ọbụna tupu a na-ebupụ pipeline.

Akụrụngwa otu na Cube

Tupu anyị abanye n'ihe atụ, ọ bara uru ịkọwa otú anyị si ekenye ihe onwunwe microservices.

Iji ghọta otu na kedu ọnụọgụ na-eji ha akụrụngwa (processor, ebe nchekwa, SSD mpaghara), anyị na-ekenye onye ọ bụla iwu nke ya aha na "Cube" ma na-amachi ikike kachasị ya na usoro nhazi, ebe nchekwa na diski, na-atụlebu mkpa nke otu. N'ihi ya, otu iwu, n'ozuzu, agaghị egbochi ụyọkọ dum maka mbugharị, na-ekenye ọtụtụ puku cores na terabytes nke ebe nchekwa. A na-enye ohere ịnweta ohere aha site na AD (anyị na-eji RBAC). A na-agbakwunye oghere aha na oke ha site na ịrịọ arịrịọ na ebe nchekwa GIT, mgbe ahụ, a na-atụgharị ihe niile na-akpaghị aka site na pipeline nwere ike.

Ọmụmaatụ nke ekenye otu akụrụngwa akụrụngwa:

namespaces:

  chat-team:
    pods: 23
    limits:
      cpu: 11
      memory: 20Gi
    requests:
      cpu: 11
      memory: 20Gi

Arịrịọ na oke

Cubed" arịrịọ bụ ọnụ ọgụgụ nke echekwabara akụrụngwa maka pọdk (otu akpa docker ma ọ bụ karịa) n'ime ụyọkọ. Oke bụ kacha anaghị ekwe nkwa. Ị nwere ike ịhụ na eserese ahụ ka ụfọdụ ndị otu siri tinye onwe ha ọtụtụ arịrịọ maka ngwa ya niile na enweghị ike ibuga ngwa ahụ na "Cube", ebe ọ bụ na a na-emefu arịrịọ niile dị n'okpuru aha ha.

Ụzọ ziri ezi isi na ọnọdụ a bụ ileba anya n'ezie oriri akụrụngwa wee jiri ya tụnyere ego achọrọ (Arịrịọ).

Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices
Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices

Na nseta ihuenyo dị n'elu, ị nwere ike ịhụ na CPU "Arịrịọ" dabara na ọnụ ọgụgụ nke eri, na oke nwere ike gafere ezigbo ọnụọgụ CPU =)

Ugbu a, ka anyị leba anya na ụfọdụ namespace n'ụzọ zuru ezu (m họrọ namespace kube-system - the system namespace for the components of the "Cube") n'onwe ya) wee hụ oke nke oge nhazi oge na ebe nchekwa na onye a rịọrọ:

Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices

O doro anya na ọtụtụ ebe nchekwa na CPU ka edobere maka ọrụ sistemụ karịa ka ejiri n'ezie. N'ihe banyere sistemu kube, nke a ziri ezi: o mere na nginx ingress control ma ọ bụ nodelocaldns n'ọnụ ọnụ ha kụrụ CPU wee rie ọtụtụ RAM, yabụ ebe a ka edobere nke a ziri ezi. Na mgbakwunye, anyị enweghị ike ịdabere na eserese maka awa 3 gara aga: ọ na-achọsi ike ịhụ metrik akụkọ ihe mere eme n'ime nnukwu oge.

E mepụtara usoro "ndụmọdụ". Dịka ọmụmaatụ, ebe a ị nwere ike ịhụ ihe akụrụngwa ga-aka mma ịkwalite "oke" (ogwe aka nke elu) ka "ịkụgharị" ghara ime: oge ​​mgbe akụ ejirila CPU ma ọ bụ ebe nchekwa na oge nke oge na-eche ruo mgbe ọ ga-abụ "frozon":

Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices

Ma ebe a bụ pọọlụ kwesịrị igbochi agụụ ha:

Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices

on throtling + nlekota akụrụngwa, ị nwere ike dee ihe karịrị otu akụkọ, yabụ jụọ ajụjụ na nkwupụta. N'okwu ole na ole, enwere m ike ịsị na ọrụ nke ịmegharị metrics dị otú ahụ siri ike ma na-achọ oge dị ukwuu na imezi ihe na ọrụ "window" na "CTE" Prometheus / VictoriaMetrics (okwu ndị a dị na ntinye okwu, ebe ọ bụ na ọ fọrọ nke nta ka ọ bụrụ na ọ dị ntakịrị. Ọ dịghị ihe dị ka nke a na PromQL, na ị ga-kewaa egwu ajụjụ n'ime ọtụtụ ihuenyo nke ederede na ebuli ha).

N'ihi ya, ndị mmepe nwere ngwá ọrụ maka nyochaa aha ha na Cube, ha na-enwekwa ike ịhọrọ onwe ha ebe na oge ole ngwa nwere ike ịnweta ihe onwunwe ha "bechapụ," na nke sava nwere ike inye CPU dum abalị dum.

Usoro

Na ụlọ ọrụ dị ka ọ dị ugbu a ejiji, anyị na-agbaso DevOps- na SRE-eme ihe Mgbe ụlọ ọrụ nwere microservices 1000, ihe dị ka ndị mmepe 350 na ndị nchịkwa 15 maka akụrụngwa niile, ị ga-abụ “ihe ejiji”: n'azụ “baswords” ndị a niile, ọ dị mkpa ngwa ngwa imezi ihe niile na onye ọ bụla, yana ndị admins ekwesịghị ịbụ ihe mgbochi. na usoro.

Dịka Ops, anyị na-enye metrik na dashboard dị iche iche maka ndị mmepe metụtara ọnụego nzaghachi na mperi ọrụ.

Anyị na-eji usoro dị ka: Acha uhie uhie, Jiri и akara ngosi ọla edosite na ijikọta ha ọnụ. Anyị na-agbalị ibelata ọnụ ọgụgụ nke dashboards ka na nleba anya o doro anya na ọrụ na-eweda ugbu a (dịka ọmụmaatụ, koodu nzaghachi kwa nkeji, oge nzaghachi site na 99th percentile), na ihe ndị ọzọ. Ozugbo ụfọdụ metrik ọhụrụ ghọrọ ihe dị mkpa maka dashboard izugbe, anyị na-ese ozugbo wee tinye ha.

Esebeghị m eserese otu ọnwa. Nke a nwere ike ịbụ ezigbo ihe ịrịba ama: ọ pụtara na ọtụtụ n'ime "chọrọ" emezuworị. O mere na n'ime izu, m na-ese ụfọdụ eserese ọhụrụ ọbụlagodi otu ugboro n'ụbọchị.

Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices

Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices

Nsonaazụ nsonaazụ ya bara uru n'ihi na ugbu a ndị nrụpụta anaghị adịkarị na-aga na ndị admins nwere ajụjụ "ebe a ga-elele ụdị metric."

Mmezu Ngwa ọrụ dị n'akụkụ akụkụ ma kwesịrị ime ka ndụ dịkwuo mfe maka onye ọ bụla, ndị ọrụ ibe si na Ngwá Ọrụ adịlarị nso iji mejuputa abstract "Istio nke onye ahụike": usoro ndụ nke arịrịọ HTTP ọ bụla ga-apụta na nlekota, yana ya. ga-ekwe omume mgbe niile ịghọta "n'oge nke ihe niile mebiri" n'oge inter-service (na ọ bụghị naanị) mmekọrịta. Debanye aha na akụkọ sitere na DomClick hub. =)

Nkwado akụrụngwa Kubernetes

N'akụkọ ihe mere eme, anyị na-eji ụdị patched Kubespray - Ọrụ kwesịrị ekwesị maka ibuga, ịgbatị na imelite Kubernetes. N'oge ụfọdụ, a na-ebipụ nkwado maka nrụnye na-abụghị kubeadm site na isi alaka ụlọ ọrụ, na usoro nke ịgbanwere kubeadm adịghị atụ aro. N'ihi ya, ụlọ ọrụ Southbridge mere ndụdụ nke ya (site na nkwado kubeadm na ngwa ngwa maka nsogbu ndị siri ike).

Usoro maka imelite ụyọkọ k8 niile dị ka nke a:

  • Were Kubespray site na Southbridge, lelee eriri anyị, Merjim.
  • Anyị na-ebupụ mmelite ahụ ka nchegbu- "Cube".
  • Anyị na-ebupụ mmelite ahụ otu ọnụ n'otu oge (n'ike nke a bụ "usoro: 1") n'ime Nrụpụta- "Cube".
  • Anyị na-emelite akpali na mgbede Satọdee otu ọnụ n'otu oge.

Enwere atụmatụ iji dochie ya n'ọdịnihu Kubespray maka ihe ngwa ngwa wee gaa kubeadm.

Na mkpokọta anyị nwere "Cubes" atọ: Nchegbu, Dev na Prod. A na-atụ aro ka anyị mee otu ụzọ (na-ekpo ọkụ na njikere) Prod-"Cube" na nke abụọ data center. nchegbu и Nrụpụta bi na "igwe mebere" (oVirt maka Stress na igwe ojii VMWare maka Dev). akpali- "Cube" na-ebi na "igwe efu": ndị a bụ ọnụ ọnụ nwere eriri 32 CPU, 64-128 GB nke ebe nchekwa na 300 GB SSD RAID 10 - enwere 50 n'ime ha na mkpokọta. Arara ọnụ ụzọ atọ “dị mkpa” nye “ndị nna ukwu” akpali- "Cuba": 16 GB nke ebe nchekwa, 12 CPU eri.

Maka ire ere, anyị na-ahọrọ iji "igwe efu" ma zere akwa akwa na-enweghị isi dị ka OpenStack: anyị achọghị "ndị agbata obi na-eme mkpọtụ" na CPU izu ohi oge. Na mgbagwoju anya nke nchịkwa na-arịba okpukpu abụọ n'ihe gbasara OpenStack n'ime ụlọ.

Maka CI/CD “Cubic” na akụrụngwa akụrụngwa ndị ọzọ anyị na-eji sava GIT dị iche, Helm 3 (ọ bụ mgbanwe na-egbu mgbu site na Helm 2, mana anyị nwere obi ụtọ na nhọrọ ndị ahụ. atomik), Jenkins, Enwere ike na Docker. Anyị na-enwe mmasị na ngalaba atụmatụ na ibuga na gburugburu dị iche iche site na otu ebe nchekwa.

nkwubi

Kubernetes na DomClick: otu esi ehi ụra n'udo na-ejikwa ụyọkọ nke 1000 microservices
Nke a bụ, n'ozuzu okwu, ihe usoro DevOps dị na DomClick site n'echiche nke injinia arụmọrụ. Edemede ahụ wee bụrụ obere teknụzụ karịa ka m tụrụ anya ya: yabụ, soro akụkọ DomClick na Habré: a ga-enwekwu akụkọ “hardcore” gbasara Kubernetes na ndị ọzọ.

isi: www.habr.com

Tinye a comment