MÅ«su uzÅÄmumÄ notiek SRE komandas izveides process. Es ienÄcu visÄ Å”ajÄ stÄstÄ no attÄ«stÄ«bas puses. Å ajÄ procesÄ man radÄs domas un atziÅas, ar kurÄm vÄlos dalÄ«ties ar citiem izstrÄdÄtÄjiem. Å ajÄ pÄrdomu rakstÄ es runÄju par to, kas notiek, kÄ tas notiek un kÄ ikviens var turpinÄt ar to sadzÄ«vot.
TurpinÄjums rakstu sÄrijai, kas tapusi, balstoties uz runÄm mÅ«su iekÅ”ÄjÄ pasÄkumÄ DevForum:
NolÄmÄm izveidot SRE komandu, realizÄjot idejas google sre. ViÅi pieÅÄma darbÄ programmÄtÄjus no savu izstrÄdÄtÄju vidus un nosÅ«tÄ«ja tos apmÄcÄ«t vairÄkus mÄneÅ”us.
Komandai bija Å”Ädi treniÅu uzdevumi:
Aprakstiet mÅ«su infrastruktÅ«ru, kas galvenokÄrt ir Microsoft Azure koda veidÄ (Terraform un viss apkÄrt).
MÄciet izstrÄdÄtÄjiem strÄdÄt ar infrastruktÅ«ru.
Sagatavojiet izstrÄdÄtÄjus darbam.
MÄs ievieÅ”am jÄdzienu InfrastruktÅ«ra kÄ kods
ParastajÄ pasaules modelÄ« (klasiskÄ administrÄcija) zinÄÅ”anas par infrastruktÅ«ru atrodas divÄs vietÄs:
Vai zinÄÅ”anu veidÄ ekspertu galvÄs.
Vai arÄ« Ŕī informÄcija ir uz dažÄm rakstÄmmaŔīnÄm, no kurÄm dažas ir zinÄmas ekspertiem. Bet tas nav fakts, ka cilvÄks no malas (ja visa mÅ«su komanda pÄkÅ”Åi nomirst) varÄs saprast, kas darbojas un kÄ tas darbojas. Par maŔīnu var bÅ«t daudz informÄcijas: piederumi, cronjobs, iebiedÄti (sk. diska montÄža) disku un tikai bezgalÄ«gs saraksts ar to, kas var notikt. GrÅ«ti saprast, kas Ä«sti notiek.
Abos gadÄ«jumos mÄs esam iesprostoti, kļūstot atkarÄ«gi:
vai no cilvÄka, kurÅ” ir mirstÄ«gs, pakļauts slimÄ«bÄm, iemÄ«lÄÅ”anÄs, garastÄvokļa svÄrstÄ«bÄm un vienkÄrÅ”i banÄlÄm atlaiÅ”anÄm;
vai no fiziski strÄdÄjoÅ”as maŔīnas, kura arÄ« krÄ«t, tiek nozagta un sagÄdÄ pÄrsteigumus un neÄrtÄ«bas.
Pats par sevi saprotams, ka ideÄlÄ gadÄ«jumÄ viss bÅ«tu jÄpÄrtulko cilvÄkam lasÄmÄ, apkopÄjamÄ, labi uzrakstÄ«tÄ kodÄ.
TÄdÄjÄdi infrastruktÅ«ra kÄ kods (Incfastructure as Code - IaC) ir visas esoÅ”Äs infrastruktÅ«ras apraksts koda formÄ, kÄ arÄ« ar to saistÄ«tie rÄ«ki darbam ar to un reÄlas infrastruktÅ«ras ievieÅ”anai no tÄs.
KÄpÄc visu tulkot kodÄ?CilvÄki nav maŔīnas. ViÅi nevar atcerÄties visu. CilvÄka un maŔīnas reakcija ir atŔķirÄ«ga. Jebkas automatizÄts ir potenciÄli ÄtrÄks nekÄ jebkas, ko dara cilvÄks. VissvarÄ«gÄkais ir viens patiesÄ«bas avots.
No kurienes nÄk jauni SRE inženieri?TÄtad, mÄs nolÄmÄm nolÄ«gt jaunus SRE inženierus, bet no kurienes tos iegÅ«t? GrÄmata ar pareizÄm atbildÄm (Google SRE grÄmata) stÄsta: no izstrÄdÄtÄjiem. Galu galÄ viÅi strÄdÄ ar kodu, un jÅ«s sasniedzat ideÄlo stÄvokli.
MÄs ilgu laiku viÅus daudz meklÄjÄm personÄla tirgÅ« Ärpus mÅ«su uzÅÄmuma. Bet mums jÄatzÄ«st, ka mÄs neatradÄm nevienu, kas atbilstu mÅ«su prasÄ«bÄm. Man vajadzÄja meklÄt starp savÄjiem.
ProblÄmas InfrastruktÅ«ra kÄ kods
Tagad apskatÄ«sim piemÄrus, kÄ infrastruktÅ«ru var kodÄt kodÄ. Kods ir labi uzrakstÄ«ts, kvalitatÄ«vs, ar komentÄriem un atkÄpÄm.
Koda piemÄrs no Terraforma.
Koda piemÄrs no Ansible.
Kungi, ja tas bÅ«tu tik vienkÄrÅ”i! MÄs atrodamies reÄlajÄ pasaulÄ, un tÄ vienmÄr ir gatava jÅ«s pÄrsteigt, sagÄdÄt pÄrsteigumus un problÄmas. ArÄ« Å”eit bez tiem neiztikt.
1. PirmÄ problÄma ir tÄda, ka vairumÄ gadÄ«jumu IaC ir kaut kÄds dsl veids.
Un DSL, savukÄrt, ir struktÅ«ras apraksts. PrecÄ«zÄk, kam jums vajadzÄtu bÅ«t: Json, Yaml, dažu lielu uzÅÄmumu modifikÄcijas, kas nÄca klajÄ ar savu dsl (HCL tiek izmantots terraformÄ).
ProblÄma ir tÄ, ka tajÄ var viegli nebÅ«t tÄdas pazÄ«stamas lietas kÄ:
mainīgie;
nosacījumi;
kaut kur nav komentÄru, piemÄram, Json, pÄc noklusÄjuma tie netiek sniegti;
funkcijas;
un es pat nerunÄju par tÄdÄm augsta lÄ«meÅa lietÄm kÄ klases, mantojums un tas viss.
2. Otra problÄma ar Å”Ädu kodu ir tÄ, ka visbiežÄk tÄ ir neviendabÄ«ga vide. Parasti tu sÄdi un strÄdÄ ar C#, t.i. ar vienu valodu, vienu kaudzi, vienu ekosistÄmu. Un Å”eit jums ir ļoti daudz dažÄdu tehnoloÄ£iju.
TÄ ir ļoti reÄla situÄcija, kad bash ar python palaiž kÄdu procesu, kurÄ tiek ievietots Json. JÅ«s to analizÄjat, tad kÄds cits Ä£enerators ražo vÄl 30 failus. Å im visam no Azure Key Vault tiek saÅemti ievades mainÄ«gie, kas tiek savesti kopÄ ar spraudni drone.io, kas rakstÄ«ts Go, un Å”ie mainÄ«gie iziet cauri yaml, kas tika Ä£enerÄts jsonnet veidÅu dzinÄja Ä£enerÄÅ”anas rezultÄtÄ. Ir diezgan grÅ«ti iegÅ«t stingri precÄ«zi aprakstÄ«tu kodu, ja jums ir tik daudzveidÄ«ga vide.
TradicionÄlÄ attÄ«stÄ«ba viena uzdevuma ietvaros nÄk ar vienu valodu. Å eit mÄs strÄdÄjam ar lielu skaitu valodu.
3. TreÅ”Ä problÄma ir tÅ«nings. MÄs esam pieraduÅ”i pie forÅ”iem redaktoriem (Ms Visual Studio, Jetbrains Rider), kas visu dara mÅ«su vietÄ. Un pat ja mÄs esam stulbi, viÅi teiks, ka mÄs kļūdÄmies. Tas Ŕķiet normÄli un dabiski.
Bet kaut kur tuvumÄ ir VSCode, kurÄ ir daži spraudÅi, kas kaut kÄ ir instalÄti, atbalstÄ«ti vai neatbalstÄ«ti. IznÄca jaunas versijas, kuras netika atbalstÄ«tas. BanÄla pÄreja uz funkcijas ievieÅ”anu (pat ja tÄ pastÄv) kļūst par sarežģītu un nenozÄ«mÄ«gu problÄmu. VienkÄrÅ”s mainÄ«gÄ lieluma pÄrdÄvÄÅ”ana ir duci failu projekta atkÄrtoÅ”ana. Jums veiksies, ja viÅÅ” novietos to, kas jums nepiecieÅ”ams. Protams, Å”ur un tur ir fona apgaismojums, ir automÄtiskÄ pabeigÅ”ana, kaut kur ir formatÄjums (lai gan tas man nedarbojÄs terraformÄ operÄtÄjsistÄmÄ Windows).
Å Ä«s rakstÄ«Å”anas laikÄ vscode-terraform spraudnis vÄl nav izlaistas, lai atbalstÄ«tu versiju 0.12, lai gan tÄ ir izlaista 3 mÄneÅ”us.
Ir pienÄcis laiks aizmirst par...
AtkļūdoŔana.
Refaktoringa rīks.
AutomÄtiskÄ pabeigÅ”ana.
Kļūdu noteikÅ”ana kompilÄcijas laikÄ.
Tas ir smieklÄ«gi, bet tas arÄ« palielina izstrÄdes laiku un palielina kļūdu skaitu, kas neizbÄgami rodas.
SliktÄkais ir tas, ka esam spiesti domÄt nevis par to, kÄ noformÄt, kÄrtot failus mapÄs, sadalÄ«t, padarÄ«t kodu uzturÄjamu, lasÄmu un tÄ tÄlÄk, bet gan par to, kÄ es varu pareizi uzrakstÄ«t Å”o komandu, jo es kaut kÄ nepareizi uzrakstÄ«ju .
KÄ iesÄcÄjs jÅ«s mÄÄ£inÄt apgÅ«t terraformas, un IDE jums nepalÄ«dz. Kad ir dokumentÄcija, ieejiet un paskatieties. Bet, ja jÅ«s ievadÄ«tu jaunu programmÄÅ”anas valodu, IDE jums pateiktu, ka Å”Äds veids ir, bet tÄda nav. Vismaz int vai stÄ«gu lÄ«menÄ«. Tas bieži vien ir noderÄ«gi.
KÄ ar testiem?
JÅ«s jautÄjat: "KÄ ir ar testiem, programmÄtÄju kungi?" Nopietni puiÅ”i visu pÄrbauda ražoÅ”anÄ, un tas ir grÅ«ti. Å eit ir vietnes terraform moduļa vienÄ«bas pÄrbaudes piemÄrs microsoft.
ViÅiem ir laba dokumentÄcija. Man vienmÄr ir paticis Microsoft ar savu pieeju dokumentÄcijai un apmÄcÄ«bai. TaÄu nav jÄbÅ«t tÄvocim Bobam, lai saprastu, ka Å”is nav ideÄls kods. IevÄrojiet apstiprinÄjumu pa labi.
VienÄ«bas pÄrbaudes problÄma ir tÄda, ka jÅ«s un es varam pÄrbaudÄ«t Json izvades pareizÄ«bu. Es iemetu 5 parametrus un man iedeva Json kÄju lupatiÅu ar 2000 lÄ«nijÄm. Es varu analizÄt, kas Å”eit notiek, apstiprinÄt testa rezultÄtu...
ProgrammÄ Go ir grÅ«ti parsÄt Json. Un jums ir jÄraksta Go, jo terraform in Go ir laba prakse testÄÅ”anai valodÄ, kurÄ rakstÄt. Pati koda organizÄcija ir ļoti vÄja. TajÄ paÅ”Ä laikÄ Å”Ä« ir labÄkÄ bibliotÄka testÄÅ”anai.
Microsoft pati raksta savus moduļus, pÄrbaudot tos Å”ÄdÄ veidÄ. Protams, tas ir atvÄrtais avots. Visu, par ko es runÄju, jÅ«s varat nÄkt un salabot. Varu pasÄdÄt un nedÄļas laikÄ visu salabot, atvÄrtÄ koda VS koda spraudÅus, terraformus, uztaisÄ«t braucÄjam spraudni. VarbÅ«t uzrakstÄ«t pÄris analizatorus, pievienot lÄ«kumus, pievienot bibliotÄku testÄÅ”anai. Es varu visu. Bet tas nav tas, ko man vajadzÄtu darÄ«t.
Paraugprakse InfrastruktÅ«ra kÄ kods
Ejam tÄlÄk. Ja IaC nav testu, IDE un regulÄÅ”ana ir slikta, tad vismaz vajadzÄtu bÅ«t paraugpraksei. Es tikko apmeklÄju Google Analytics un salÄ«dzinÄju divus meklÄÅ”anas vaicÄjumus: Terraform labÄkÄs prakses un c# labÄkÄs prakses.
Ko mÄs redzam? NežÄlÄ«gÄ statistika mums nav par labu. MateriÄla daudzums ir vienÄds. C# izstrÄdÄ mÄs esam vienkÄrÅ”i pÄrpildÄ«ti ar materiÄliem, mums ir super-labÄkÄs prakses, ir grÄmatas, kuras rakstÄ«juÅ”i eksperti, kÄ arÄ« grÄmatas, ko rakstÄ«juÅ”i citi eksperti, kuri kritizÄ Å”Ä«s grÄmatas. OficiÄlÄs dokumentÄcijas, rakstu, apmÄcÄ«bu kursu jÅ«ra un tagad arÄ« atvÄrtÄ koda izstrÄde.
Kas attiecas uz IaC pieprasÄ«jumu: Å”eit jÅ«s mÄÄ£inÄt pamazÄm apkopot informÄciju no Highload vai HashiConf ziÅojumiem, no oficiÄlÄs dokumentÄcijas un daudzÄm problÄmÄm Github. KÄ Å”os moduļus vispÄr izplatÄ«t, ko ar tiem darÄ«t? Å Ä·iet, ka tÄ ir reÄla problÄma... Ir tÄda kopiena, kungi, kur par jebkuru jautÄjumu jums tiks doti 10 komentÄri GithubÄ. Bet tÄ gluži nav.
DiemžÄl Å”ajÄ brÄ«dÄ« eksperti tikai sÄk parÄdÄ«ties. PagaidÄm to ir pÄrÄk maz. Un pati kopiena ÄakarÄjas elementÄrÄ lÄ«menÄ«.
Kur tas viss notiek un ko darīt
JÅ«s varat atmest visu un atgriezties pie C#, braucÄja pasaulÄ. Bet nÄ. KÄpÄc jÅ«s to darÄ«tu, ja nevarat atrast risinÄjumu. TÄlÄk es sniedzu savus subjektÄ«vos secinÄjumus. Ar mani varat strÄ«dÄties komentÄros, bÅ«s interesanti.
PersonÄ«gi es lieku uz dažÄm lietÄm:
AttÄ«stÄ«ba Å”ajÄ jomÄ notiek ļoti Ätri. Å eit ir DevOps pieprasÄ«jumu grafiks.
TÄma var bÅ«t ažiotÄža, bet pats fakts, ka sfÄra aug, dod zinÄmu cerÄ«bu.
Ja kaut kas tik Ätri izaugs, tad noteikti uzradÄ«sies gudri cilvÄki, kas pateiks, ko darÄ«t un ko nedarÄ«t. PopularitÄtes pieaugums noved pie tÄ, ka varbÅ«t kÄdam bÅ«s laiks beidzot pievienot jsonnet priekÅ” vscode spraudni, kas ļaus pÄriet uz funkcijas ievieÅ”anu, nevis meklÄt to ar ctrl+shift+f. AttÄ«stoties lietÄm, parÄdÄs vairÄk materiÄlu. Google izdota grÄmata par SRE ir lielisks piemÄrs tam.
Ir izstrÄdÄtas metodes un prakses tradicionÄlajÄ attÄ«stÄ«bÄ, ko mÄs varam veiksmÄ«gi pielietot Å”eit. JÄ, ir nianses ar testÄÅ”anu un neviendabÄ«gu vidi, nepietiekamu instrumentu komplektÄciju, taÄu ir uzkrÄts milzÄ«gs daudzums prakÅ”u, kas var bÅ«t noderÄ«gas un noderÄ«gas.
TriviÄls piemÄrs: sadarbÄ«ba, izmantojot pÄru programmÄÅ”anu. Tas ļoti palÄ«dz to izdomÄt. Kad blakus ir kaimiÅÅ”, kurÅ” arÄ« cenÅ”as kaut ko saprast, kopÄ jÅ«s sapratÄ«sit labÄk.
Izpratne par to, kÄ notiek refaktorings, palÄ«dz to veikt pat Å”ÄdÄ situÄcijÄ. Tas ir, var nemainÄ«t visu uzreiz, bet mainÄ«t nosaukumu, tad mainÄ«t vietu, tad var izcelt kÄdu daļu, ak, bet Å”eit ir par maz komentÄru.
SecinÄjums
Neskatoties uz to, ka mana argumentÄcija var Ŕķist pesimistiska, es raugos nÄkotnÄ ar cerÄ«bu un patiesi ceru, ka mums (un jums) viss izdosies.
NÄkamÄ tiek gatavota raksta otrÄ daļa. TajÄ es pastÄstÄ«Å”u par to, kÄ mÄs centÄmies izmantot veiklÄs izstrÄdes prakses, lai uzlabotu mÄcÄ«bu procesu un darbu ar infrastruktÅ«ru.