Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu

Mani sauc Viktors Jagofarovs, un es izstrādāju Kubernetes platformu DomClick kā tehniskās attīstības vadītājs Ops (operācijas) komandā. Es vēlos runāt par mūsu Dev <-> Ops procesu struktūru, viena no lielākajām k8s klasteru darbības iespējām Krievijā, kā arī DevOps/SRE praksi, ko piemēro mūsu komanda.

Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu

Ops komanda

Ops komandā Å”obrÄ«d ir 15 cilvēki. TrÄ«s no viņiem atbild par biroju, divi strādā citā laika joslā un ir pieejami, arÄ« naktÄ«. Tādējādi kāds no Ops vienmēr atrodas pie monitora un ir gatavs reaģēt uz jebkuras sarežģītÄ«bas incidentu. Mums nav nakts maiņas, kas saglabā mÅ«su psihi un dod iespēju ikvienam pietiekami izgulēties un pavadÄ«t brÄ«vo laiku ne tikai pie datora.

Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu

Katram ir dažādas kompetences: tÄ«klu veidotāji, DBA, ELK steka speciālisti, Kubernetes administratori/izstrādātāji, monitorings, virtualizācija, aparatÅ«ras speciālisti utt. Viena lieta visus vieno ā€“ ikviens var kaut kādā mērā aizstāt jebkuru no mums: piemēram, ieviest jaunus mezglus k8s klasterÄ«, atjaunināt PostgreSQL, uzrakstÄ«t CI/CD + Ansible cauruļvadu, automatizēt kaut ko Python/Bash/Go, savienot aparatÅ«ru Datu centrs. SpēcÄ«gas kompetences jebkurā jomā neliedz mainÄ«t darbÄ«bas virzienu un sākt pilnveidoties kādā citā jomā. Piemēram, es pievienojos kādam uzņēmumam kā PostgreSQL speciālists, un tagad mana galvenā atbildÄ«bas joma ir Kubernetes klasteri. Komandā jebkurÅ” augums ir apsveicams un sviras izjÅ«ta ir ļoti attÄ«stÄ«ta.

Starp citu, mēs medām. PrasÄ«bas kandidātiem ir diezgan standarta. Man personÄ«gi ir svarÄ«gi, lai cilvēks iekļaujas kolektÄ«vā, ir nekonfliktisks, bet arÄ« prot aizstāvēt savu viedokli, vēlas attÄ«stÄ«ties un nebaidās darÄ«t ko jaunu, piedāvā savas idejas. Tāpat nepiecieÅ”amas programmÄ“Å”anas prasmes skriptu valodās, Linux un angļu valodas pamatu zināŔanas. Angļu valoda ir vajadzÄ«ga vienkārÅ”i tāpēc, lai cilvēks fakapa gadÄ«jumā varētu google atrast problēmas risinājumu 10 sekundēs, nevis 10 minÅ«tēs. Tagad ir ļoti grÅ«ti atrast speciālistus ar dziļām zināŔanām par Linux: tas ir smieklÄ«gi, bet divi no trim kandidātiem nevar atbildēt uz jautājumu ā€œKas ir vidējā slodze? No kā tas ir izgatavots?ā€, un jautājums ā€œKā salikt kodolu no C programmasā€ tiek uzskatÄ«ts par kaut ko no supermenu... jeb dinozauru pasaules. Mums tas ir jāsamierinās, jo parasti cilvēkiem ir ļoti attÄ«stÄ«tas citas kompetences, bet mēs iemācÄ«sim Linux. Atbilde uz jautājumu ā€œkāpēc DevOps inženierim tas viss jāzina mÅ«sdienu mākoņu pasaulēā€ bÅ«s jāatstāj ārpus raksta tvēriena, taču trÄ«s vārdos: tas viss ir vajadzÄ«gs.

Komandas rīki

RÄ«ku komandai ir nozÄ«mÄ«ga loma automatizācijā. Viņu galvenais uzdevums ir izveidot izstrādātājiem ērtus grafiskos un CLI rÄ«kus. Piemēram, mÅ«su iekŔējā izstrāde Confer ļauj burtiski izlaist lietojumprogrammu Kubernetes tikai ar dažiem peles klikŔķiem, konfigurēt tās resursus, atslēgas no glabātuves utt. IepriekÅ” bija Jenkins + Helm 2, taču man bija jāizstrādā savs rÄ«ks, lai novērstu kopÄ“Å”anu un ielÄ«mÄ“Å”anu un programmatÅ«ras dzÄ«ves cikla vienveidÄ«bu.

Ops komanda neraksta konveijerus izstrādātājiem, taču var sniegt padomus par visiem rakstÄ«Å”anas jautājumiem (dažiem cilvēkiem joprojām ir Helm 3).

DevOps

Kas attiecas uz DevOps, mēs to redzam Ŕādi:

Izstrādātāju komandas raksta kodu, izlaiž to, izmantojot Confer to dev -> qa/stage -> prod. AtbildÄ«ba par to, lai kods nepalēninātu un nesaturētu kļūdas, ir Dev un Ops komandām. Dienas laikā dežūrējam no Ops komandas pirmām kārtām jāreaģē uz incidentu ar savu pieteikumu, savukārt vakarā un naktÄ« dežurējoÅ”ajam administratoram (Ops) jāpamodina dežurējoÅ”ais izstrādātājs, ja viņŔ zina par pārliecināts, ka problēma nav infrastruktÅ«rā. Visi pārraudzÄ«bas rādÄ«tāji un brÄ«dinājumi tiek parādÄ«ti automātiski vai daļēji automātiski.

Ops atbildÄ«bas joma sākas no brīža, kad lietojumprogramma tiek ieviesta ražoÅ”anā, taču Dev atbildÄ«ba ar to nebeidzas ā€” mēs darām to paÅ”u un esam vienā laivā.

Izstrādātāji konsultē administratorus, ja viņiem nepiecieÅ”ama palÄ«dzÄ«ba, rakstot administratora mikropakalpojumu (piemēram, Go backend + HTML5), un administratori konsultē izstrādātājus par jebkādām infrastruktÅ«ras problēmām vai problēmām, kas saistÄ«tas ar k8s.

Starp citu, mums vispār nav monolÄ«ta, tikai mikropakalpojumi. To skaits lÄ«dz Å”im svārstās no 900 lÄ«dz 1000 prod k8s klasterÄ«, ja to mēra pēc skaita izvietoÅ”anu. PākÅ”u skaits svārstās no 1700 lÄ«dz 2000. PaÅ”laik produktu klasterÄ« ir aptuveni 2000 pākÅ”u.

Es nevaru sniegt precīzus skaitļus, jo mēs uzraugām nevajadzīgos mikropakalpojumus un izgriežam tos pusautomātiski. K8s palīdz mums izsekot nevajadzīgām entītijām bezjēdzīgs operators, kas ietaupa daudz resursu un naudas.

Resursu vadība

Uzraudzība

Labi strukturēta un informatÄ«va uzraudzÄ«ba kļūst par stÅ«rakmeni liela klastera darbÄ«bā. Mēs vēl neesam atraduÅ”i universālu risinājumu, kas segtu 100% no visām monitoringa vajadzÄ«bām, tāpēc Å”ajā vidē periodiski veidojam dažādus pielāgotus risinājumus.

  • Zabbix. Vecais labais monitorings, kas galvenokārt paredzēts infrastruktÅ«ras kopējā stāvokļa izsekoÅ”anai. Tas norāda, kad mezgls nomirst apstrādes, atmiņas, disku, tÄ«kla un tā tālāk ziņā. Nekas pārdabisks, bet mums ir arÄ« atseviŔķs aÄ£entu DaemonSet, ar kura palÄ«dzÄ«bu mēs, piemēram, uzraugām DNS stāvokli klasterÄ«: meklējam stulbus coredns podus, pārbaudām ārējo hostu pieejamÄ«bu. Å Ä·iet, kāpēc ar to uztraukties, taču ar lielu satiksmes apjomu Å”is komponents ir nopietns neveiksmes punkts. Es jau aprakstÄ«ts, kā es cÄ«nÄ«jos ar DNS veiktspēju klasterÄ«.
  • Prometejs operators. Dažādu eksportētāju kopums sniedz plaÅ”u pārskatu par visām klastera sastāvdaļām. Tālāk mēs to visu vizualizējam lielos Grafana informācijas paneļos un brÄ«dinājumiem izmantojam alertmanager.

Vēl viens mums noderÄ«gs rÄ«ks bija saraksta iekļūŔana. Mēs to rakstÄ«jām pēc tam, kad vairākas reizes saskārāmies ar situāciju, kad viena komanda pārklājās ar citas komandas ieejas ceļiem, kā rezultātā radās 50 reizes kļūdas. Tagad pirms izvietoÅ”anas ražoÅ”anā izstrādātāji pārbauda, ā€‹ā€‹vai neviens netiks ietekmēts, un manai komandai tas ir labs rÄ«ks Ingresses problēmu sākotnējai diagnostikai. SmieklÄ«gi, ka sākumā tas bija rakstÄ«ts administratoriem un izskatÄ«jās diezgan ā€œneveiklsā€, bet pēc tam, kad izstrādātāju komandas iemÄ«lēja rÄ«ku, tas ļoti mainÄ«jās un sāka izskatÄ«ties ne tā, kā ā€œadmins izveidoja tÄ«mekļa seju administratoriem. ā€ DrÄ«zumā mēs atteiksim no Ŕī rÄ«ka, un Ŕādas situācijas tiks pārbaudÄ«tas pat pirms cauruļvada izvērÅ”anas.

Komandas resursi kubā

Pirms pievērÅ”amies piemēriem, ir vērts paskaidrot, kā mēs pieŔķiram resursus mikropakalpojumi.

Lai saprastu, kuras komandas un kādos daudzumos izmanto savas resursiem (procesors, atmiņa, vietējais SSD), mēs katrai komandai pieŔķiram savu namespace ā€œKubāā€ un ierobežot tā maksimālās iespējas procesora, atmiņas un diska ziņā, iepriekÅ” pārrunājot komandu vajadzÄ«bas. AttiecÄ«gi viena komanda kopumā nebloķēs visu klasteru izvietoÅ”anai, pieŔķirot tÅ«kstoÅ”iem kodolu un terabaitu atmiņas. Piekļuve nosaukumvietai tiek nodroÅ”ināta, izmantojot AD (mēs izmantojam RBAC). Nosaukumvietas un to ierobežojumi tiek pievienoti, izmantojot izvilkÅ”anas pieprasÄ«jumu GIT krātuvei, un pēc tam viss tiek automātiski izlaists caur Ansible konveijeru.

Piemērs resursu pieŔķirÅ”anai komandai:

namespaces:

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

Pieprasījumi un ierobežojumi

Kubisks" Pieprasīt ir garantēto rezervēto resursu skaits pāksts (viens vai vairāki doku konteineri) klasterī. Limits ir negarantētais maksimums. Diagrammos bieži var redzēt, kā kāda komanda ir iestatījusi sev pārāk daudz pieprasījumu visām savām lietojumprogrammām un nevar izvietot lietojumprogrammu kubā, jo visi pieprasījumi zem viņu nosaukumvietas jau ir "iztērēti".

Pareizā izeja no Ŕīs situācijas ir aplÅ«kot reālo resursu patēriņu un salÄ«dzināt to ar pieprasÄ«to summu (PieprasÄ«jums).

Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu
Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu

IepriekÅ” redzamajos ekrānuzņēmumos var redzēt, ka ā€œPieprasÄ«tieā€ CPU ir saskaņoti ar reālo pavedienu skaitu, un ierobežojumi var pārsniegt reālo CPU pavedienu skaitu =)

Tagad apskatÄ«sim sÄ«kāk kādu nosaukumvietu (es izvēlējos nosaukumvietu kube-system - sistēmas nosaukumvietu paÅ”am ā€œCubeā€ komponentiem) un redzēsim faktiski izmantotā procesora laika un atmiņas attiecÄ«bu pret pieprasÄ«to:

Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu

Ir skaidrs, ka sistēmas pakalpojumiem ir rezervēts daudz vairāk atmiņas un CPU, nekā faktiski tiek izmantots. Kube-sistēmas gadÄ«jumā tas ir pamatoti: gadÄ«jās, ka nginx ingress kontrolleris jeb nodelocaldns savā maksimumā trāpÄ«ja centrālajam procesoram un patērēja daudz RAM, tāpēc Å”eit Ŕāda rezerve ir pamatota. Turklāt mēs nevaram paļauties uz pēdējo 3 stundu diagrammām: ir vēlams redzēt vēsturiskos rādÄ«tājus par lielu laika periodu.

Tika izstrādāta ā€œieteikumuā€ sistēma. Piemēram, Å”eit var redzēt, kuriem resursiem labāk bÅ«tu paaugstināt ā€œlimitusā€ (augŔējo atļauto joslu), lai nenotiktu ā€œdroselÄ“Å”anaā€: brÄ«dis, kad resurss jau ir iztērējis centrālo procesoru vai atmiņu atvēlētajā laika griezumā un gaida, lÄ«dz tas tiks ā€œatsaldētsā€:

Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu

Un Å”eit ir pākstis, kurām vajadzētu ierobežot viņu apetÄ«ti:

Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu

uz droseles + resursu monitorings, vari uzrakstÄ«t vairāk nekā vienu rakstu, tāpēc uzdod jautājumus komentāros. Dažos vārdos varu teikt, ka Ŕādu metriku automatizācijas uzdevums ir ļoti sarežģīts un prasa daudz laika un lÄ«dzsvaroÅ”anas darbÄ«bu ar ā€œlogaā€ funkcijām un ā€œCTEā€ Prometheus / VictoriaMetrics (Å”ie termini ir pēdiņās, jo ir gandrÄ«z PromQL nekas tamlÄ«dzÄ«gs, un jums ir jāsadala biedējoÅ”ie vaicājumi vairākos teksta ekrānos un tie jāoptimizē).

Rezultātā izstrādātājiem ir pieejami rÄ«ki savu nosaukumvietu pārraudzÄ«bai Cube, un viņi paÅ”i var izvēlēties, kur un kurā brÄ«dÄ« kurām lietojumprogrammām var ā€œnogrieztā€ resursus un kuriem serveriem visu nakti var atdot visu CPU.

Metodoloģijas

Uzņēmumā, kāds tas ir tagad moderns, mēs ievērojam DevOps- un SRE-praktiÄ·is Kad uzņēmumam ir 1000 mikropakalpojumu, aptuveni 350 izstrādātāju un 15 administratori visai infrastruktÅ«rai, jums ir "jābÅ«t modÄ«gam": aiz visiem Å”iem "basvārdiem" ir steidzami jāautomatizē viss un visi, un administratori nedrÄ«kst bÅ«t saÅ”aurinājums. procesos.

Kā Ops mēs izstrādātājiem piedāvājam dažādus rādītājus un informācijas paneļus, kas saistīti ar pakalpojumu atbildes biežumu un kļūdām.

Mēs izmantojam tādas metodes kā: SARKANS, LIETOÅ ANAS Šø Zelta signāliapvienojot tos kopā. Mēs cenÅ”amies lÄ«dz minimumam samazināt informācijas paneļu skaitu, lai vienā mirklÄ« bÅ«tu skaidrs, kurÅ” pakalpojums paÅ”laik pasliktinās (piemēram, atbildes kodi sekundē, reakcijas laiks par 99. procentili) un tā tālāk. TiklÄ«dz vispārējiem informācijas paneļiem ir nepiecieÅ”ami jauni rādÄ«tāji, mēs tos nekavējoties izveidojam un pievienojam.

Neesmu zÄ«mējis grafikus jau mēnesi. Tā, iespējams, ir laba zÄ«me: tas nozÄ«mē, ka lielākā daļa ā€œvēlmjuā€ jau ir Ä«stenotas. GadÄ«jās, ka nedēļas laikā vismaz reizi dienā uzzÄ«mēju kādu jaunu grafiku.

Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu

Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu

IegÅ«tais rezultāts ir vērtÄ«gs, jo tagad izstrādātāji diezgan reti vērÅ”as pie administratoriem ar jautājumiem ā€œkur apskatÄ«t kādu metrikuā€.

ÄŖstenoÅ”ana Servisa tÄ«kls ir tepat aiz stÅ«ra, un tam vajadzētu padarÄ«t dzÄ«vi daudz vieglāku ikvienam, kolēģi no Tools jau ir tuvu abstraktā ā€œIstio of a vesela cilvēkaā€ ievieÅ”anai: uzraudzÄ«bā bÅ«s redzams katra HTTP(-u) pieprasÄ«juma dzÄ«ves cikls, un tas vienmēr bÅ«s iespējams saprast, ā€œkurā posmā viss salÅ«zaā€ starpdienestu (un ne tikai) mijiedarbÄ«bas laikā. Abonējiet ziņas no DomClick centra. =)

Kubernetes infrastruktūras atbalsts

Vēsturiski mēs izmantojam ielāpu versiju Kubespray ā€” Piemērota loma Kubernetes izvietoÅ”anai, paplaÅ”ināŔanai un atjaunināŔanai. Kādā brÄ«dÄ« atbalsts instalācijām, kas nav kubeadm, tika pārtraukts no galvenās filiāles, un pārslēgÅ”anās uz kubeadm process netika ierosināts. Rezultātā uzņēmums Southbridge izveidoja savu dakÅ”iņu (ar kubeadm atbalstu un ātru risinājumu kritiskām problēmām).

Visu k8s klasteru atjaunināŔanas process izskatās Ŕādi:

  • Ņem Kubespray no Southbridge, pārbaudiet mÅ«su pavedienu, Merjim.
  • Mēs izlaižam atjauninājumu uz Uzsvars- "Kubs".
  • Mēs izlaižam atjauninājumu pa vienam mezglam (Ansible versijā tas ir ā€œserial: 1ā€) dev- "Kubs".
  • Mēs atjauninām BikstÄ«t sestdienas vakarā pa vienam mezglam.

Nākotnē ir plānots to nomainīt Kubespray par kaut ko ātrāku un dodieties uz kubeadm.

Kopumā mums ir trÄ«s ā€œkubiā€: Stress, Dev un Prod. Mēs plānojam uzsākt vēl vienu (karstais gaidÄ«Å”anas režīms) Prod-ā€œCubeā€ otrajā datu centrā. Uzsvars Šø dev dzÄ«vot ā€œvirtuālajās maŔīnāsā€ (oVirt for Stress un VMWare mākonis for Dev). BikstÄ«t- "Cube" dzÄ«vo uz "plika metāla": tie ir identiski mezgli ar 32 CPU pavedieniem, 64-128 GB atmiņu un 300 GB SSD RAID 10 - kopā ir 50 no tiem. TrÄ«s ā€œplānieā€ mezgli ir veltÄ«ti ā€œmeistariemā€ BikstÄ«t- ā€œKubaā€: 16 GB atmiņa, 12 CPU pavedieni.

PārdoÅ”anā mēs dodam priekÅ”roku ā€œpliku metālaā€ izmantoÅ”anai un izvairāmies no nevajadzÄ«giem slāņiem, piemēram OpenStack: mums nav vajadzÄ«gi ā€œtrokŔņaini kaimiņiā€ un centrālais procesors zagt laiku. Un iekŔējās OpenStack gadÄ«jumā administrÄ“Å”anas sarežģītÄ«ba ir aptuveni divas reizes lielāka.

CI/CD ā€œCubicā€ un citiem infrastruktÅ«ras komponentiem izmantojam atseviŔķu GIT serveri Helm 3 (tā bija diezgan sāpÄ«ga pāreja no Helm 2, bet esam ļoti apmierināti ar iespējām atomu), Dženkinss, Ansible un Docker. Mums patÄ«k funkciju filiāles un izvietoÅ”ana dažādās vidēs no vienas krātuves.

Secinājums

Kubernetes vietnē DomClick: kā mierīgi gulēt, pārvaldot 1000 mikropakalpojumu kopu
Kopumā DevOps process izskatās DomClick no operāciju inženiera viedokļa. Raksts izrādÄ«jās mazāk tehnisks, nekā es gaidÄ«ju: tāpēc sekojiet DomClick ziņām HabrĆ©: bÅ«s vairāk "hardcore" rakstu par Kubernetes un daudz ko citu.

Avots: www.habr.com

Pievieno komentāru