5 вештина које сваки ДевОпс инжењер треба да има

Savremena uloga DevOps inženjera je izuzetno složena, naročito kada se posmatra sa tehničke strane.

Ona zahteva solidno poznavanje uobičajenih programskih jezika kao što su Node.js, shell skripte, Python ili skriptovanje uopšte. Takođe, neophodno je razumevanje kako automatizaciju testiranja integrisati u procese implementacije.

Kao osoba koja integriše kod u automatizovane tokove, morate imati barem osnovno znanje o funkcionalnostima različitih cloud servisa.

Iako je tehnološka složenost evidentna, tehničke veštine nisu uvek one koje najviše nedostaju DevOps inženjerima. Iako se može očekivati da je ovladavanje tehničkim veštinama ključno, iskustva DevOps praktičara pokazuju da su njihove socijalne veštine često od veće važnosti.

Ključne DevOps veštine

Izvor: devopsuniversity.org

Posmatranje interakcije DevOps inženjera unutar Scrum tima je često veoma zanimljivo. Često imaju malo detalja o sadržaju priča koje ostatak tima sprovodi, fokusirajući se na tehničke informacije unutar tih priča.

Ipak, oni moraju biti u stanju da integrišu rezultate tima u funkcionalan tok implementacije, uz istovremeno izvršavanje i validaciju različitih automatizovanih testova.

U ovom kontekstu, nije više dovoljno biti samo tehnički stručnjak. Komunikacija postaje ključni element uspeha. Hajde da istražimo najvažnije DevOps veštine koje su potrebne.

Socijalne veštine

Saradnja i diskusija unutar agilnog tima su glavni razlozi zašto je nedostatak socijalnih veština na vrhu liste potrebnih DevOps veština. Ako se pitate zašto, evo nekoliko ključnih argumenata:

  • DevOps inženjeri ne mogu biti efikasni bez prilagođavanja ostatku razvojnog tima. Taj tim gradi softverske temelje ili funkcije platforme, a na DevOps inženjeru je da stvori funkcionalno okruženje za sve to.
  • Osim što su sinhronizovani sa svojim razvojnim timom, oni su ključna kontakt tačka za spoljne zainteresovane strane koje žele pristup softverskoj platformi. Moraju da razumeju zahteve i tehničku kompleksnost automatizovanog cloud okruženja prenesu u razumljiv oblik za sve zainteresovane strane, delujući kao posrednik između razvojnog tima i spoljnih interesenata.
  • Iako se tehničke veštine mogu steći učenjem, razvoj socijalnih veština zahteva dublju introspekciju i rad na ličnom integritetu. Potrebno je naučiti sagledati sebe iz druge perspektive i prepoznati područja za razvoj, što nije svima lako.

Umrežavanje

Kada pogledate tehnološki pejzaž savremenih cloud platformi, lako se možete izgubiti. Morate se nositi sa servisima sistema datoteka, raznim bazama podataka, pozadinskim API-jima, serverless arhitekturama, front-end servisima, modelima mašinskog učenja, hibridnim okruženjima, virtuelnim privatnim mrežama, balanserima opterećenja, servisima za strimovanje u realnom vremenu i još mnogo toga.

Nemoguće je znati sve o svemu, ali je apsolutno neophodno da DevOps inženjeri znaju kako sve to povezati u funkcionalnu softversku platformu. Izgradnja jake mreže kontakata je ključna.

Pronalaženje optimalne ravnoteže između jednostavnosti i efikasnosti komunikacije u distriburiranim sistemima je izazov kojeg moraju biti svesni i na koji moraju ponuditi rešenje timu.

Obično znate da je infrastruktura koju gradite dovoljno zrela tek kada počnete ozbiljnije da se bavite bezbednosnim pitanjima i izazovima platforme. I, pogađate, to je ponovo domen DevOps inženjera.

Umesto da se držite starih kontakata, morate stalno tražiti nove da biste pokrili onaj novi servis koji je vaš tim upravo zatražio.

Softverski testovi

U agilnom okruženju, fleksibilnost u izdanjima softvera je od kritičnog značaja. Scrum timovi često imaju dvonedeljne sprintove, što znači da se nova produkcija očekuje svake druge nedelje.

Ako razmišljate o kompletnom životnom ciklusu projekta, koji uključuje planiranje, procenu, razvoj, testiranje i objavljivanje, to je nemoguće postići bez značajne automatizacije u većini koraka.

Ključni preduslov za uspeh u ovakvom okruženju (i za bržu implementaciju u produkciju) je snažan fokus na automatizaciji testiranja. Brže implementacije, uz automatske testove, rezultiraju kraćim vremenom za dobijanje povratnih informacija od korisnika.

Za DevOps inženjera to znači integraciju rezultata različitih timova za testiranje u CI/CD tok:

  • Omogućite izvršavanje unit test skripti nakon svakog commit-a u repozitorijumu. Ako ne postoje, pregovarajte sa programerima da ih kreiraju.
  • Uključite integracione testove u CI/CD tokove koji se primenjuju u potpuno integrisanom i konzistentnom okruženju za testiranje. Nema smisla pokretati integracione testove u svakom razvojnom okruženju. Ovi testovi moraju da rade besprekorno u okruženju gde su svi servisi deploy-ovani, a podaci konzistentni.
  • Uključite end-to-end testove iz stvarnog sveta u CI/CD tok. Neka to bude obavezno za svaki deployment glavnog koda u integracionom ili korisničkom okruženju. Tako se osigurava da svi kritični poslovni procesi rade bez grešaka.

Pisanje efikasnih testova, koji pokrivaju sve kritične procese, je još jedan izazov. DevOps inženjeri ne moraju nužno raditi sve sami.

Poslovni analitičari ili menadžeri za kvalitet mogu biti deo mreže (ako ne i direktno deo tima) i pomoći u definisanju testnih koraka. A uloga DevOps inženjera je da ih prevede u automatizovani izvršni kod.

CI/CD i Infrastruktura kao Kod

O ovoj temi smo već pričali, ali se ne može poreći da su IaC (i njeno izvršavanje kroz CI/CD tokove) glavni rezultat rada DevOps inženjera. Tu se svi unosi iz development tima (u obliku različitih servisnih funkcija) spajaju sa infrastrukturom. Iz toga nastaje upotrebljiv softver koji se može deploy-ovati u različitim okruženjima.

Nije ni čudo što je ovo jedan od najvećih izazova za svakog DevOps inženjera. Ako se uz to zahteva i cloud agnostičnost, to obično znači pisanje IaC-a na Terraform jeziku i osiguravanje da kod ne sadrži specifičnosti određenog cloud provajdera. Iskustvo jasno pokazuje da prelazak na IaC skripte koje su zavisne od clouda može biti težak zadatak, čak i za iskusne inženjere.

Nemoguće je održavati cloud infrastrukturu koristeći samo ručne korake. U prošlosti je ovo bio standard, ali je to bio i način isporuke preko „waterfall“ modela. Ručni deploy-menti ne mogu da prežive u Agilnom okruženju. Prelazak na automatizaciju je neophodan, iako skoro uvek bolan.

Ali kada se uradi kako treba, rezultati su značajni.

  • Potreba za deploy-om u produkciju? Samo pokrenite pipeline koji će deploy-ovati kod u produkciju.
  • Potrebno je još jedno razvojno okruženje da se ne preklapa sa drugim radom? Pokrenite development pipeline i sva infrastruktura će biti kreirana automatski, uključujući i testne podatke.
  • Kada okruženje više nije potrebno, isti pipeline može uništiti sve resurse prethodno kreirane u okruženju.

Za uspešan Agilni tim je neizbežno da implementira IaC i postavi ga u CI/CD tokove koji mogu obaviti posao kad god i gde god. DevOps inženjeri su tu da omoguće ovaj proces.

Kontejnerizacija

Izvor: aws.amazon.com

U velikim projektima, mogućnost brze replikacije je ključna. Kreiranje stotina kopija istih okruženja u isto vreme ne bi bilo moguće bez kontejnerskih okruženja. Kontejnerizacija je veština koja zahteva dosta učenja, što je razlog zašto samo mali broj projekata ozbiljno koristi ovu tehnologiju.

Kontejnerski server je šablon koji se primenjuje onoliko često koliko je potrebno, a rezultat će uvek biti isti. Identična infrastruktura i identični podaci. Upravo tu mogućnost DevOps inženjeri mogu da obezbede za tim. Oni moraju da nauče kako se ovo radi uz pomoć različitih alata.

Kontejneri su dizajnirani da se lako kreiraju i uništavaju. DevOps inženjeri implementiraju alate za orkestraciju kontejnera, kao što su Kubernetes ili Docker Swarm, koji automatski upravljaju postavljanjem kontejnera, skaliranjem i oporavkom.

Kontejneri dele isti operativni sistem hosta. Ako je jedan kontejner kompromitovan, potencijalno mogu biti kompromitovani i drugi kontejneri na istom hostu. Takođe, ako su kontejneri kreirani od slika trećih strana, mogu sadržati ranjivosti. DevOps inženjeri će implementirati bezbednosne funkcije kao što su izolacija kontejnera, kontrola pristupa i skeniranje ranjivosti kako bi ublažili rizike.

Skalabilnost je još jedno izvorno svojstvo kontejnera. Mogu se lako skalirati horizontalno kako bi se nosili sa povećanim opterećenjem. Ovo može dovesti do sukoba sa resursima i problema sa performansama. DevOps inženjeri će implementirati alate za upravljanje resursima kao što su cgroups ili Kubernetes kvote resursa, koje mogu da ograniče broj resursa koje svaki kontejner može da koristi.

DevOps inženjeri moraju da pristupe kontejnerizaciji imajući na umu bezbednost, skalabilnost i otpornost. Od svih tehničkih veština, savladavanje kontejnerizacije zahteva najviše vremena. Složenost je izuzetno velika i to je razlog zašto samo mali broj projekata ozbiljno koristi kontejnerizaciju.

Zaključak

DevOps praktičar je jedinstven član vašeg agilnog tima. Možda ćete imati samo jednog ili dva takva stručnjaka u celom projektu, ali su oni ključni za uspeh.

Očekivanja od DevOps inženjera su visoka, jer oni moraju da igraju više uloga istovremeno:

  • Moraju biti tehnički stručnjaci,
  • timski igrači puni empatije, razumevanja i spremni za saradnju,
  • efikasni posrednici između razvojnog tima i netehničkih spoljnih interesenata,
  • ključni za automatizaciju i proveru koda,
  • omogućavaju redovno objavljivanje projekta,
  • i stalno grade mrežu stručnjaka koja se menja iz dana u dan.

Uprkos tehničkoj složenosti, ljudski element igra ključnu ulogu u uspehu bilo koje DevOps inicijative. Ako planirate da postanete DevOps inženjer, imate puno pravo da budete ponosni na svoju odluku i da učenju pristupite iz mnogo šire perspektive, ne ograničavajući se samo na tehničko znanje.

Zatim pogledajte često postavljana pitanja i odgovore na DevOps intervjuima.