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.
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.
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.
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).
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:
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ā:
Un Å”eit ir pÄkstis, kurÄm vajadzÄtu ierobežot viÅu apetÄ«ti:
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.
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.