Infrastruktuur kui kood: esimene tutvustus

Meie ettevÔttes on kÀimas SRE-meeskonna onboardingu protsess. Ma lÀksin kÔikidesse detailidesse arenduse poolelt. Protsessi kÀigus tekkisid mul mÔtted ja teadmised, mida soovin jagada teiste arendajatega. Selles artiklis mÔtisklen, mis toimub, kuidas see toimub ja kuidas kÔigil edasi elada.

Infrastruktuur kui kood: esimene tutvustus

Seeria artiklid, mis on kirjutatud meie sisemise ĂŒrituse ettekannete pĂ”hjal DevForum:

1. Schrödingeri kass ilma karbita: konsensusprobleem jaotatud sĂŒsteemides.
2. Infrastruktur kui kood. (Sa oled siin)
3. Typescripti lepingute genereerimine C# mudelite pĂ”hjal. (Töös 
)
4. Tutvustus Rafti konsensusalgoritmisse. (Töös 
)



Oleme otsustanud luua SRE-meeskonna, elluviides ideid google sre. VĂ€rbasime oma arendajatest programmeerijaid ja saatsime nad mitmeks kuuks koolitusele.

Meeskonna ees seisis jĂ€rgmine Ă”pikĂŒsimuste kogum:

  • Kirjeldada meie infrastruktuuri, mis enamikus asub Microsoft Azure’is, koodina (Terraform ja kĂ”ik, mis selle ĂŒmber on).
  • Õpetada arendajaid infrastruktuuriga töötama.
  • Valmistada arendajad ette vahetusteks.

Tutvustame mÔistet Infrastructure as code

TavapÀrases maailmamudelis (klassikalises halduses) on teadlikkus infrastruktuurist kahes kohas:

  1. Kas ekspertide peades.Infrastruktuur kui kood: esimene tutvustus
  2. VĂ”i need andmed asuvad mingitel masinatel, millest osa teavad ekspertid. Kuid pole kindel, et keegi vĂ€ljastpoolt (kui meie meeskond peaks Ă€kki kĂ”ik ĂŒhesuguste probleemide tĂ”ttu lahkuma) suudab aru saada, mis ja kuidas töötab. Masinas vĂ”ib olla palju andmeid: ligipÀÀsud, cron-tööd, pealeloodud (vt disk mounting) ketas ja lihtsalt lĂ”putu nimekiri sellest, mis vĂ”iks juhtuda. Sellest on keeruline aru saada, mis tegelikult toimub.Infrastruktuur kui kood: esimene tutvustus

MÔlemas olukorras satume lÔksu, muutes end sÔltuvaks:

  • kas inimesest, kes on surelik, haigestuv, armumas, tujukas ja lihtsalt tavaliste lahkumiste tĂ”ttu;
  • vĂ”i fĂŒĂŒsiliselt töötavast masinast, mis ka vĂ”ib kokku kukkuda, varastada, tuua ootamatuid olukordi ja ebamugavusi.

Ilmselgelt kerkib lahendusena esile mÔte, et ideaaljuhul tuleb kÔik viia inimloetavasse, hooldatavasse, kvaliteetselt kirjutatud koodi.

Nii et infrastruktuur kui kood (Infrastructure as Code – IaC) on kogu olemasoleva infrastruktuuri kirjeldus koodina, samuti selle tööriistad ja meetodid, mis vĂ”imaldavad seda tegelikuks infrastruktuuriks muuta.

Miks tuleks kĂ”ik koodi tĂ”lkidaInimesed ei ole masinad. Nad ei suuda kĂ”ike meelde jĂ€tta. Inimese ja masina reaktsioon on erinev. KĂ”ik automatiseeritud toimib potentsiaalselt kiiremini kui see, mida teeb inimene. KĂ”ige olulisem on see, et oleks ĂŒks tĂ”e allikas (single source of truth).

Kust tulevad uued SRE-inseneridNii et me otsustasime kaasata uusi SRE-insenere, aga kust neid saada? Raamat Ă”igete vastustega (Google SRE raamat) ĂŒtleb meile: arendajatest. Nad töötavad koodiga, samas kui teie saavutate ideaalse oleku.

Oleme pikka aega ja pÔhjalikult otsinud neid tööjÔuturult vÀljaspool meie ettevÔtet. Aga peame tunnistama, et ei leidnud kedagi, kes vastaks meie nÔudmistele. PIDIME uurima oma seast.

Infra struktuuuri kui koodi probleemid

Vaatame nĂŒĂŒd nĂ€iteid sellest, kuidas infrastruktuur vĂ”ib olla koodi sisse kirjutatud. Kood on hĂ€sti kirjutatud, kvaliteetne, koos kommentaaride ja sĂ€tetega.

NĂ€ide koodist Terraformis.

Infrastruktuur kui kood: esimene tutvustus

NĂ€ide koodist Ansible'is.

Infrastruktuur kui kood: esimene tutvustus

Head daamid ja hĂ€rrad, aga kui kĂ”ik oleks nii lihtne! Me oleme reaalsetes oludes ja need suudavad teid alati ĂŒllatada, tuues esile probleeme. Siin ei ole erandiks.

1. Esimene probleem seisneb selles, et enamasti on IaC mingi DSL.

Ja DSL on omakorda struktuuri kirjeldus. TÀpsemalt, mida sul peaks olema: Json, Yaml, suurte ettevÔtete modifikatsioonid, kes on loonud oma DSL-i (Terraformis kasutatakse HCL-i).

Probleem on selles, et seal vÔivad puududa sellised tuttavad asjad nagu:

  • muutujad;
  • tingimused;
  • mĂ”nes kohas puuduvad kommentaarid, nĂ€iteks Jsonis, nende jaoks pole vaikimisi ette nĂ€htud;
  • funktsioonid;
  • ja ma ei ole veel rÀÀkinud sellistest kĂ”rgema taseme asjadest nagu klassid, pĂ€rimine ja kĂ”ik selline.

2. Teine probleem sellise koodi puhul on see, et see on enamasti heterogeenne keskkond. Tavaliselt istute ja töötate C#-ga, s.t. ĂŒhe keele, ĂŒhe tehnoloogia, ĂŒhe ökosĂŒsteemiga. Ja nĂŒĂŒd on teil tohutu tehnoloogiate mitmekesisus.

Tavaliselt on olukord, kus bash Pythoniga kĂ€ivitab mingi protsessi, millele pannakse alla Json. Sa analĂŒĂŒsid seda, siis mingisugune generaator genereerib veel 30 faili. KĂ”ikide nende jaoks sisendi muutujad tulevad Azure Key Vault'ist, mis on drone.io plugina kaudu, mis on kirjutatud Go-s, ja need muutujad lĂ€hevad lĂ€bi yaml-i, mis on saadud jsonnet'i templati generaatori tulemusena. Suhteliselt keeruline on omada rangelt hĂ€sti kirjeldatud koodi, kui sul on nii mitmekesine keskkond.

Traditsiooniline areng ĂŒhe ĂŒlesande raames toimub ĂŒhe keelega. Siin aga töötab suur hulk keeli.

3. Kolmas probleem on tööriistadega.. Oleme harjunud Ă€gedate redaktoritega (Ms Visual Studio, Jetbrains Rider), mis teevad kĂ”ik meie eest. Ja isegi, kui me eksime, ĂŒtlevad nad, et me ei ole Ă”iged. Tundub, et see on normaalne ja loomulik.

Aga kuskil lĂ€hedal on VSCode, kus on mĂ”ned pluginad, mis kuidagi installitakse, toetatakse vĂ”i ei toeta. Tuli vĂ€lja uusi versioone, kuid neid ei toetatud. Tavaline ĂŒleminek funktsiooni rakendamisele (isegi kui see on olemas) muutub keeruliseks ja mitte triviaalseteks probleemiks. Lihtne muutuja nimetuse muutmine – see on asendus projektis kĂŒmnes failis. On Ă”nne, kui see asendab Ă”iged asjad. Ükskord, muidugi, on kuskil valgustamine, on automaatkomplekteerimine, kuskil on vormindamine (kuid mul ei lĂ€inud see tööle Terraformis Windowsis).

Artikli kirjutamise hetkeks vscode-terraform plugin pole veel vÀlja antud versiooni 0.12 toetamiseks, kuigi see on juba kolm kuud vÀlja lastud.

On aeg unustada


  1. Silumine.
  2. Refaktoreerimise tööriist.
  3. Automaatne tÀiendamine.
  4. Vigade avastamine kompileerimisel.

NaeruvÀÀrne, aga see suurendab arendusaega ja suurendab vigade arvu, mis on paratamatud.

KÔige hullem on, et meie peame mÔtlema mitte sellele, kuidas projekteerida, jagada faile kaustadesse, dekompositsioneerida, teha koodi toetavaks, loetavaks ja nii edasi, vaid sellele, kuidas ma pean Ôigesti seda kÀsku kirjutama, sest ma kirjutasin selle kuidagi valesti.

Kuna uus inimene proovib Ă”ppida Terraformi, ei aita IDE teid selle osas ĂŒldse. Kui on dokumentatsioon - sisenen, vaatan. Kuid kui sisenete uude programmeerimiskeelde, siis IDE nĂ€itaks, et selline tĂŒĂŒp on olemas ja sellist pole. ÜkskĂ”ik millisel juhul, int ja string tasemel. See on sageli kasulik.

Aga kuidas testidega?

KĂŒsite: «Kuidas on testide asi, hĂ€rrased programmeerijad?» TĂ”sised kutid testivad kĂ”ike tootmises, ja see on karm. Siin on nĂ€ide ĂŒksustest terrafomi mooduli jaoks veebisaidilt. Microsoft.

Infrastruktuur kui kood: esimene tutvustus

Neil on hea dokumentatsioon. Microsoft on alati mulle meeldinud oma lÀhenemise tÔttu dokumentatsioonile ja Ôppimisele. Kuid pole vaja olla onu Bob, et mÔista, et kood ei ole siin ideaalne. Pange tÀhele, et valideerimine on tÔstetud paremale.

Üksuse testi probleem on see, et saame kontrollida JSON-i korrektsust vĂ€ljundis. Ma andsin 5 parameetrit, mulle tuli vĂ€lja 2000 rea pikkune JSON. Ma saan analĂŒĂŒsida, mis siin toimub, valideerida testitulemust...

JSON-i analĂŒĂŒsimine Go-s on keeruline. Kuid tuleb kirjutada Go-s, sest terrafomi kirjutamine Go-s on hea praktika, et testida selles keeles, milles sa kirjutad. Koodi korraldus on vĂ€ga nĂ”rk. Sellegipoolest on see parim testimise teek.

Isegi Microsoft kirjutab oma mooduleid, testides neid niimoodi. Muidugi, see on avatud lĂ€htekoodiga. KĂ”ike, millest ma rÀÀgin, saad tulla ja parandada. Ma saan istuda ja nĂ€dalaga kĂ”ik korda teha, avada VS koodi pistikprogrammid, terrafomi, kirjutada pistikprogrammi raiderile. VĂ”ib-olla kirjutada paar analĂŒsaatorit, lisada linterid, panustada testimise teeki. Ma saan kĂ”ik teha. Kuid ma ei peaks sellega tegelema.

Parimad praktikad infrastruktuuri kui koodi osas

JÀtkame. Kui IaC-s ei ole teste, on IDE ja tööriistadega kehvasti, peaksid olema vÀhemalt parimad praktikad. Ma lÀksin lihtsalt Google Analyticsisse ja vÔrdlesin kahte otsingupÀringut: Terraformi parimad praktikad ja C# parimad praktikad.

Infrastruktuur kui kood: esimene tutvustus

Mida me nĂ€eme? Raudne statistika ei ole meie kasuks. Materjali arvu poolest on sama. C# arenduses me lihtsalt ujume materjalides, meil on ĂŒlbed parimad praktikad, on raamatud, mis on kirjutatud ekspertide poolt, samuti raamatud, mis on kirjutatud raamatute kohta, mis on kirjutatud teiste ekspertide poolt, kes kritiseerivad neid raamatuid. Meres on ametlikku dokumentatsiooni, artikleid, koolituskursusi, praegu veel avatud lĂ€htekoodiga arendust.

Mis puutub IaC pĂ€ringusse: siin pĂŒĂŒate killukaupa koguda teavet kĂ”rgkoormuse ettekannetest vĂ”i HashiConfi ametlikest dokumentidest ja paljusid probleeme GitHubis. Kuidas need moodulid ĂŒldse levitada, mida nendega teha? Tundub, et see on tĂ”eline probleem... On ju olemas kogukond, hĂ€rrased, kus igale kĂŒsimusele antakse sulle 10 kommentaari GitHubis. Kuid see ei ole kindel.

Kahjuks on hetkel eksperdid alles alustamas. Nende on liiga vÀhe. Ja kogu kogukond on alles algusjÀrgus.

Kuhu kÔik see liigub ja mida teha

VĂ”ib kĂ”ik visata ja minna tagasi C# maailma, rahu juurde. Aga ei. Miks te ĂŒldse selle tegevuse juurde asusite, kui mitte lahenduse leidmiseks. Edasi toon oma subjektiivsed jĂ€reldused. VĂ”ite minuga kommenteerida, see oleks huvitav.

Isiklikult panustan mitmele asjale:

  1. Selles valdkonnas areng toimub vÀga kiiresti. Toon vÀlja DevOps'i pÀringute graafiku.

    Infrastruktuur kui kood: esimene tutvustus

    VÔib-olla on teema Àrgitav, kuid see, et valdkond kasvab, annab teatavat lootust.

    Kui midagi kasvab nii kiiresti, siis kindlasti tulevad nutikad inimesed, kes ĂŒtlevad, kuidas peab tegema ja kuidas mitte. Populaarsuse suurenemine toob kaasa selle, et ehk on kellelgi aega lĂ”puks kirjutada jsonnet'i plugin vscode'ile, mis vĂ”imaldab minna funktsiooni rakendusse, mitte otsida seda ctrl+shift+f abil. Kui kĂ”ik areneb, on rohkem materjale. Google'i vĂ€ljaanne SRE kohta on sellele hea nĂ€ide.

  2. On vĂ€lja töötatud meetodid ja praktikaid tavapĂ€rases arenduses, mida saame siin edukalt rakendada. Jah, on nĂŒansse testimise ja heterogeense keskkonnaga, puudulikud tööriistad, kuid on kogunenud tohutult praktikaid, mis vĂ”ivad olla kasulikud ja abiks.

    Lihtne nĂ€ide: paaristöö kaudu koostöö. See aitab tĂ”eliselt aru saada. Kui sul on kĂ”rval naaber, kes samuti pĂŒĂŒab midagi mĂ”ista, siis koos saate paremini aru.

    MÔistmine, kuidas refaktoreerimist lÀbi viia, aitab isegi sellises olukorras seda teostada. See tÀhendab, et sa ei muuda kÔike korraga, vaid muudad nimed, siis muudad asukohta, pÀrast seda vÔib-olla eraldad mingisuguse osa, oh, ja siin jÀÀb kommentaaridest puudu.

KokkuvÔte

Kuigi mu mÔtisklused vÔivad tunduda pessimistlikud, vaatan tulevikku lootusrikkalt ja loodan siiralt, et meil (ja teil) kÔik Ônnestub.

JÀrgneb teise artikli osa. Selles rÀÀgin, kuidas oleme proovinud rakendada paindliku arenduse praktikaid, et parandada meie Ôppimise ja infrastruktuuri haldamise protsessi.

Allikas: habr.com

Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster