MĂ€rkus tĂ”lke kohta.: Kubernetes'i rakendamine GitLab'is peetakse ĂŒheks kahest peamisest tegurist, mis soodustavad ettevĂ”tte kasvu. Siiski, kuni hiljutise ajani oli GitLab.com'i veebiteenuse infrastruktuur rajatud virtuaalmasinatele ning migratsioon K8s-i algas alles umbes aasta tagasi ning pole siiani lĂ”ppenud. Oleme rÔÔmsad, et saame esitleda tĂ”lget GitLabi SRE-inseneri hiljutisest artiklist selle kohta, kuidas see kĂ€ib ja milliseid jĂ€reldusi teevad projekti kaasavad insenerid.

Meie infrastruktuuri osakond on juba umbes aasta tegelenud kĂ”igi GitLab.com'i teenuste migreerimisega Kubernetes'i. Selle aja jooksul oleme silmitsi seisnud probleemidega, mis on seotud mitte ainult teenuste liigutamisega Kubernetes'i, vaid ka hĂŒbriidse deployment'i juhtimisega ĂŒlemineku ajal. KĂ€esolevas artiklis rÀÀgitakse meile saadud vÀÀrtuslikest Ă”ppetundidest.
Alates GitLab.com'i loomisest töötasid selle serverid pilves virtuaalmasinatel. Nende virtuaalmasinate ĂŒle haldab Chef ning nende paigaldamine toimub meie . rakenduse uuendamiseks seisneb serverite pargi koordineeritud jĂ€rjestikku ajakohastamises CI-pipeline'i abil. See meetod â kuigi aeglane ja veidi â garanteerib, et GitLab.com rakendab samu paigaldus- ja konfigureerimismeetodeid nagu iseseisvad (self-managed) GitLabi paigaldused, mis kasutavad selleks meie Linuxi pakette.
Kasutame seda meetodit, kuna on ÀÀrmiselt oluline tunda omal nahal kogemusi ja rÔÔme, millega kogukonna tavalised liikmed silmitsi seisavad, kui nad installivad ja seadistavad oma GitLabi koopiad. See lĂ€henemine toimis mĂ”nda aega hĂ€sti, kuid kui projektide arv GitLab'is ĂŒletas 10 miljoni piiri, mĂ”istsime, et see ei rahulda enam meie vajadusi skaleerimise ja deploy'imise osas.
Esimesed sammud Kubernetes'i ja cloud-native GitLab'i suunas
2017. aastal loodi projekt GitLabi ettevalmistamiseks pilves kasutamiseks ja selleks, et anda kasutajatele vĂ”imalus installida GitLab Kubernetesi klastritesse. Siis teadsime, et GitLabi ĂŒleviimine Kubernetesesse suurendab SaaS-platvormi skaleerimisvĂ”imalusi, lihtsustab kasutuselevĂ”tteid ja parandab arvutusressursside efektiivsust. Samal ajal sĂ”ltus palju meie rakenduse funktsioone monteeritud NFS-osade kasutamisest, mis aeglustas ĂŒleminekut virtuaalmasinatelt.
PĂŒĂŒd cloud native ja Kubernetesi suunas vĂ”imaldas meie inseneridel planeerida jĂ€rkjĂ€rgulist ĂŒleminekut, mil me loobusime mĂ”nest rakenduse sĂ”ltuvusest vĂ”rguhoiust, jĂ€tkates samal ajal uute funktsioonide arendamist. Alates sellest ajast, kui me hakkasime migratsiooni planeerima 2019. suvel, on paljusid neist piirangutest eradud ja GitLab.com'i ĂŒleviimine Kubernetesesse kĂ€ib nĂŒĂŒd tĂ€ie hooga!
GitLab.com-i töömudeli eripÀrad Kuberneteses
GitLab.com-i jaoks kasutame ĂŒhtset piirkondlikku GKE klastri, mis töötleb kogu rakenduse liiklust. Et minimeerida migratsiooni keerukust (juba niigi segast), keskendume teenustele, mis ei sĂ”ltu kohalikest salvestusruumidest vĂ”i NFS-ist. GitLab.com kasutab peamiselt monoliitset koodibaasi Railsil ning suuname liikluse töökoormuse omaduste pĂ”hjal erinevatele lĂ”pp-punktidele, mis on isolatsioonis oma node'ide basseinides.
Frontend'i puhul jaguneb see liiklus veebiversiooniks, API-ks, Git SSH/HTTPS-ks ja Registry-ks. Backend'i puhul jagame tĂ¶Ă¶ĂŒlesandeid jĂ€rjestustesse vastavalt , mis vĂ”imaldavad meil seada teenindustaseme eesmĂ€rke (Service-Level Objectives, SLOs) erinevate koormuste jaoks.
KÔik need GitLab.com teenused on seadistatud muudetud Helm'i kaardi abil. Konfiguratsioon toimub alakaardil, mis vÔivad olla valikuliselt aktiveeritud, kui me jÀrk-jÀrgult viime teenused klastrisse. Isegi arvestades, et on otsustatud mitte kaasata mÔned meie stateful-teenused, nagu Redis, Postgres, GitLab Pages ja Gitaly, vÔimaldab Kubernetes radikaalselt vÀhendada Chef'i haldavat VM-i arvu.
Kubernetes'i lÀbipaistvus ja konfiguratsiooni haldamine
KĂ”ik seaded hallatakse GitLabi poolt ise. Selleks kasutatakse kolme Terraformi ja Helmi pĂ”hist konfiguratsiooniprojekti. PĂŒĂŒame igal vĂ”imalusel kasutada GitLabi GitLabi kĂ€itamiseks, kuid tootmisĂŒlesannete jaoks töötab meil eraldi GitLabi installatsioon. See on vajalik, et mitte sĂ”ltuda GitLab.com-i kĂ€ttesaadavusest GitLab.com-i juurutuste ja uuenduste tegemisel.
Kuigi meie Kubernetes klastrite torujuhtmed töötavad eraldi GitLabi installatsioonil, on koodirepositooriumidel peeglid, mis on avalikult saadaval jÀrgmistel aadressidel:
- â GitLab.com-i Helmi kaardi konfiguratsiooni ĂŒmbritsev konfiguratsioon;
- â sisaldab konfigureerimisi teenustele, mis ei ole otseselt seotud GitLab rakendusega. Nende hulka kuuluvad seadistused logimise ja klastrite jĂ€lgimise jaoks, samuti integreeritud tööriistad nagu PlantUML;
- â Terraformi konfiguratsioon Kubernetes ja vana (legacy) VM-infrastruktuuri jaoks. Siin seadistatakse kĂ”ik vajalikud ressursid, et klastrit kĂ€ivitada, sealhulgas klaster ise, sĂ”lmede pooled, teenusekontod, IP-aadresside reserveerimine.

Muudatuste tegemisel kuvatakse avalik lingiga detailse diff'i juurde, mida SRE analĂŒĂŒsib enne muudatuste tegemist klastris.
SRE jaoks viib link detailse diff'ini GitLabi installatsioonis, mida kasutatakse tootmiseks ja millele on juurdepÀÀs piiratud. See vĂ”imaldab töötajatel ja kogukonnal, kellel ei ole juurdepÀÀsu tootmisprojektile (millele pÀÀsevad juurde ainult SRE), vaadata ettepanekud konfiguratsiooni muudatusteks. Liitmine avaliku GitLabi nĂ€idis koodiga ja suletud nĂ€idis CI-toru juures sĂ€ilitab ĂŒhtse töövoo, tagades samal ajal sĂ”ltumatuse GitLab.com-ist konfiguratsiooni uuendamisel.
Mida oleme vÀlja selgitanu migratsiooni ajal
RĂ€nde protsessis on omandatud kogemus, mida rakendame uute migratsioonide ja juurutuste puhul Kuberneteses.
1. Kulude kasv ligikaudses liikluses erinevate kÀttesaadavuspiirkondade vahel

IgapÀevane vÀljamineku statistika (baiti pÀevas) meie GitLabi hoidlate kogumi kohaselt GitLab.com-il.
Google jagab oma vĂ”rgustiku piirkondadeks. Need jagunevad omakorda kĂ€ttesaadavuspiirkondadeks (AZ). Git-i hostimine on seotud suure andmemahtudega, seetĂ”ttu on meie jaoks oluline kontrollida vĂ”rgu egressi. Sisemise liikluse puhul on egress tasuta ainult juhul, kui see jÀÀb ĂŒhe kĂ€ttesaadavuspiirkonna piiridesse. KĂ€esoleva artikli kirjutamise seisuga edastame ligikaudu 100 TB andmeid harilikul tööpĂ€eval (ja see on ainult Git-repositooriumide jaoks). Teenused, mis meie vanas VM-pĂ”hises topoloogias asusid ĂŒhel ja samal virtuaalsel masinal, töötavad nĂŒĂŒd erinevates Kubernetes'i pod'ides. See tĂ€hendab, et osa liiklust, mis varem oli kohaliku VM-i jaoks, vĂ”ib potentsiaalselt ĂŒletada kĂ€ttesaadavuspiirkondade piire.
Regionaalsed GKE klastrid vÔimaldavad katta mitmeid kÀttesaadavuspiirkondi varundamiseks. Me kaalume vÔimalust teenustele, mis genereerivad suurt liikluse mahtu. See vÔimaldab vÀhendada egressi kulusid, sÀilitades samas klastritasandi varundamise.
2. Limitid, ressursside taotlused ja skaleerimine

Replikate arv, mis töötleb production-liiklust registry.gitlab.com. Liiklus saavutab haripunkti umbes kell 15:00 UTC.
Meie migreerimise lugu algas 2019. aasta augustis, kui me kandsime esimesena ĂŒle teenuse â GitLabi konteineriregistri (GitLab Container Registry) â Kubernetesesse. See kriitilise tĂ€htsusega kĂ”rge liiklusega teenus sobis esimeseks migreerimiseks hĂ€sti, kuna see on stateless rakendus, millel on vĂ€he vĂ€liseid sĂ”ltuvusi. Esimese probleemina, millega me silmitsi seisime, oli suur hulk vĂ€ljutatud pod'e, mis oli pĂ”hjustatud mĂ€lu puudumisest sĂ”lmedes. SeetĂ”ttu pidime muutma taotlusi ja limite.
Leiti, et rakenduse puhul, mille mĂ€lu tarbimine kasvab aja jooksul, madalad vÀÀrtused taotluste (iga pod'i jaoks mĂ€lu reserveerimise) kombineerimisel 'lahke' jĂ€iga limiidiga kasutamisele viisid sĂ”lmede kĂŒllastumisele (kĂŒllastus) ja kĂ”rgele vĂ€ljutamise mÀÀrale. Selle probleemiga tegelemiseks otsustati . See tĂ”i koormuse sĂ”lmedelt maha ja tagas pod'ide elutsĂŒkli, mis ei avaldanud sĂ”lmele liiga suurt survet. NĂŒĂŒd alustame migreerimist heldete (ja peaaegu ĂŒhesuguste) nĂ”udmiste ja limiitidega, kohandades neid vajaduse korral.
3. NĂ€itajad ja logid

InfrastruktuuriĂŒksus keskendub viivitustele, vigade protsendile ja kĂŒllastusele paigaldatud (SLO), mis on seotud .
Viimase aasta jooksul oli infrastruktuuriĂŒksuse jaoks ĂŒheks tĂ€htsaks saavutuseks tĂ€iustused jĂ€lgimises ja SLO-dega töötamises. SLO-d vĂ”imaldasid meil seada eesmĂ€rke eraldi teenustele, mida me migreerimise ajal tĂ€helepanelikult jĂ€lgisime. Kuid isegi sellise tĂ€iustatud jĂ€lgimisega ei pruugi me probleeme kohe mĂ€rkida, kasutades nĂ€itajaid ja hĂ€ireid. NĂ€iteks keskendudes viivitustele ja vigade protsendile, ei hĂ”lma me tĂ€ielikult kĂ”iki teenuse kasutamise stsenaariume, mis migreerivad.
See probleem avastati peaaegu kohe pĂ€rast osade töökoormuste ĂŒleviimist klastrisse. Erakordselt tĂ”siselt ilmnes see, kui tuli kontrollida funktsioone, mille arvamised olid vĂ€ikesed, kuid millel olid vĂ€ga spetsiifilised konfiguratsioonilised sĂ”ltuvused. Ăks peamisi Ă”ppetunde pĂ€rast migreerimist oli vajadus jĂ€lgimisel arvesse vĂ”tta mitte ainult nĂ€itajaid, vaid ka logisid ja 'pikka saba' (rÀÀgime graafikul â toim. tĂ”l.) vigu. NĂŒĂŒd sisaldab iga migreerimine ĂŒksikasjalikku logikĂŒsimuste loendit (log queries) ja plaanime selged taasteprotseduurid, mida probleemide korral saab ĂŒlekanda ĂŒhe vahetuse kĂ€est teise.
Samaaegne sama pĂ€ringu teenindamine vana VM-infrastruktuuri ja uue, Kubernetesel pĂ”hineva, esindas ainulaadset vĂ€ljakutset. Erinevalt lift-and-shift tĂŒĂŒpi migreerimisest (rakenduste kiire ĂŒleviimine 'nagu on' uude infrastruktuuri; lĂ€hemalt saab lugeda nĂ€iteks, â toimetaja mĂ€rkus), samaaegne töö âvanaâ VM ja Kubernetes nĂ”uab, et jĂ€lgimistööriistad oleksid ĂŒhilduvad mĂ”lema keskkonnaga ja suudaksid ĂŒhendada metrikat ĂŒhte vaatesse. Oluline on, et me kasutame samu dashboardâe ja logikĂŒsimusi, et saavutada jĂ€rjepidev jĂ€lgitavus ĂŒleminekuperioodil.
4. Liikluse suunamine uuele klastrile
GitLab.com jaoks on osa serveritest eraldatud . Kanarapark teenindab meie sisemisi projekte ja vÔib . Kuid peamiselt on see ette nÀhtud infrastruktuuri ja rakenduste muudatuste testimiseks. Esimene viidatud teenus hakkas vastu vÔtma piiratud hulga sisest sissetulevat liiklust ja jÀtkame selle meetodi kasutamist, et veenduda SLO tÀitmises enne, kui suuname kogu liikluse klastrisse.
Migratsiooni puhul tĂ€hendab see, et kĂ”igepealt suunatakse Kubernetesesse pĂ€ringud sisemistele projektidele ja seejĂ€rel suuname jĂ€rk-jĂ€rgult ĂŒlejÀÀnud liikluse klastrisse, muutes HAProxy kaudu tagaside kaalu. Ăleminekul VM-ilt Kubernetesesse sai selgeks, et on vĂ€ga mugav omada lihtsat viisi liikluse suunamiseks vana ja uue infrastruktuuri vahel ning hoida vana infrastruktuuri valmis tagasipöördeks esimestel pĂ€evadel pĂ€rast migratsiooni.
5. Podâide varuvĂ”imsus ja nende kasutamine
Peaaegu kohe ilmnes jĂ€rgmine probleem: Registry teenuse podâid kĂ€ivitusid kiiresti, kuid Sidekiqi podâide kĂ€ivitamine vĂ”ttis kuni . Pikem podâide kĂ€ivitamine Sidekiqi jaoks muutus probleemiks, kui alustasime Kubernetesesse töökoormuste migreerimist töötlusprotsesside jaoks, mis peavad kiiresti töökohtadega toime tulema ja kiiresti skaleeruma.
Selles osas oli Ă”ppetund see, et kuigi Kuberneteses toimib Horisontaalne Pod Automaatautomaator (HPA) hĂ€sti liikluse kasvuga, on oluline arvesse vĂ”tta töökoormuste omadusi ja jaotada podâide varuressursse (eriti ebaĂŒhtlase nĂ”udluse korral). Meie juhul esines Ă€kiline töökohtade laine, mis nĂ”udis kiiret skaleerimist, mis viis CPU ressursside kĂŒllastumiseni enne, kui jĂ”udsime node'ide hulka skaleerida.
Alati on ahvatlev proovida klastrist vĂ”imalikult palju "vĂ€lja pigistada", kuid me alustasime algselt, silmitsi seistes jĂ”udlusprobleemidega, helde pod-eelarvega ja vĂ€hendame seda hiljem, jĂ€lgides tĂ€helepanelikult SLO-d. Pod-ide kĂ€ivitamine Sidekiq teenuse jaoks on mĂ€rkimisvÀÀrselt kiireneb ja nĂŒĂŒd kestab keskmiselt umbes 40 sekundit. on kasu toonud nii GitLab.com-ile kui ka meie self-managed instalatsioonide kasutajatele, kes töötavad GitLabi ametliku Helm-chart'i abil.
KokkuvÔte
Iga teenuse migreerimise jÀrel nautisime Kubernetes'e kasutamise eeliseid tootmises: rakenduse kiirem ja turvalisem juurutamine, skaleerimine ja tÔhusam ressursijaotus. Samuti ulatuvad migratsiooni eelised kaugemale GitLab.com-ist. Iga ametliku Helm-chart'i tÀiustamisest saavad kasu ka selle kasutajad.
Loodan, et teile meeldis meie lugu seiklustest Kubernetes'e migreerimisega. JÀtkame uute teenuste kolimist klastrisse. Lisainfot leiate jÀrgmistest avaldustest:
- «»;
- «»;
- .
P.S. tÔlkijalt
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
