DevOps se sve više nameće kao popularan pristup razvoju i implementaciji aplikacija, što je rezultiralo povećanom potražnjom za stručnjacima iz ove oblasti.
Ovaj članak će obuhvatiti neka od najčešće postavljanih pitanja na intervjuima za DevOps pozicije, zajedno sa odgovarajućim odgovorima. Korišćenje ovih pitanja kao osnove za učenje može vam povećati šanse za zaposlenje. Ukoliko ste, pak, u ulozi regrutera, ova pitanja vam mogu poslužiti kao smernice u procesu selekcije kandidata.
Često postavljana pitanja i odgovori na DevOps intervjuu
Šta za vas predstavlja DevOps?
DevOps je pristup usmeren na unapređenje efikasnosti rada tokom celokupnog životnog ciklusa razvoja softvera. Ovaj proces se često prikazuje kao beskonačna petlja koja obuhvata faze planiranja, kodiranja, izgradnje, testiranja, objavljivanja, implementacije, operacija i nadgledanja.
DevOps ima uticaj na sve faze životnog ciklusa aplikacije: planiranje, razvoj, isporuku i operacije. Svaka faza zavisi od ostalih, a same faze nisu vezane isključivo za jednu ulogu. U pravoj DevOps kulturi, svaka uloga je, u određenoj meri, uključena u sve faze.
Zašto je DevOps važan?
Timovi koji primenjuju DevOps pristup obično brže realizuju svoje projekte. Ovim se izbegavaju problemi u komunikaciji, što omogućava brzu implementaciju poboljšanja i drugih neophodnih promena. DevOps pristup promoviše bolju saradnju između razvojnih i operativnih timova, usklađujući njihove ciljeve. Neke od ključnih prednosti su:
- Poboljšana komunikacija
- Timski rad i kohezija
- Pojačana saradnja
- Brža isporuka kvalitetnih proizvoda
- Smanjena složenost i brže rešavanje problema
- Veća skalabilnost i fleksibilnost pri dodavanju novog koda
- Stabilnije operativno okruženje
- Veća automatizacija procesa
- Smanjenje troškova i optimizacija korišćenja resursa
- Poboljšana sigurnost putem integrisanih i automatizovanih alata
Koji su svakodnevni zadaci DevOps inženjera?
Neki od tipičnih zadataka koje možete pomenuti su:
- Obezbeđivanje kontinuirane integracije i implementacije
- Dodela i komunikacija zadataka koji treba da se izvrše
- Dizajniranje i uspostavljanje test protokola
- Praćenje i prikupljanje metrika infrastrukture i aplikacije
- Analiza rezultata dobijenih u svakoj fazi razvoja
- Smanjenje stope grešaka i vremena oporavka u slučaju problema
- Skraćivanje vremena isporuke
Kako DevOps pomaže programerima?
Kada se primeni DevOps metodologija, programeri više ne moraju čekati povratne informacije od operativnog tima kako bi ispravili greške u kodu. Sada mogu brže rešavati ove probleme, jer imaju kontinuirane povratne informacije o svom kodu.
Šta je kontrola verzija?
Kontrola verzija je praksa koja omogućava praćenje promena nad fajlovima ili skupovima fajlova tokom vremena, omogućavajući da se određene verzije kasnije preuzmu. Alati za kontrolu verzija olakšavaju praćenje napretka razvojnog rada i čuvanje različitih verzija izvornog koda, kako bi se, po potrebi, vratilo na prethodnu verziju. Git je jedan od najčešće korišćenih alata u ovoj fazi razvoja softvera.
Šta je CI/CD i koje su njegove prednosti?
Kontinuirana integracija (CI)
CI objedinjuje alate i prakse koji olakšavaju isporuku visokokvalitetnog i brzog softvera. Time se eliminišu usko grlo i izbegavaju tehnički problemi u fazama puštanja.
Kontinuirana isporuka (CD)
Ova praksa automatizuje isporuku promena u kodu, osiguravajući da se kod može brzo implementirati u produkciju i da aplikacije ispravno funkcionišu.
Kontinuirana primena (CD)
Za razliku od kontinuirane isporuke, cilj ove prakse je da ne zahteva ljudsku intervenciju prilikom postavljanja softvera u produkciju. Objavljivanje novog ili izmenjenog koda u produkciji je automatizovano.
CI/CD implementira DevOps tokom celog životnog ciklusa aplikacije. Ove prakse doprinose poboljšanju produktivnosti u različitim fazama procesa razvoja softvera, pojednostavljujući i automatizujući ih.
Šta je kontinuirano praćenje?
Kontinuirano praćenje je DevOps praksa koja uključuje praćenje, alarmiranje i preduzimanje akcija kako na kodu tako i na infrastrukturi. Na taj način se potencijalni problemi brzo otkrivaju i identifikuju, smanjujući vreme potrebno za rešavanje problema.
Zašto je važno kontinuirano testiranje?
Kontinuirano testiranje je automatizacija testova rano, postepeno i na odgovarajući način u procesu razvoja. Ono je neophodno jer obezbeđuje kvalitet koda. Greške se rano detektuju, a povratne informacije o kodu se dobijaju brže.
Objasnite nekoliko tipova testova koji se koriste u DevOps-u?
Jedinični testovi
Oni testiraju određeni deo koda u izolaciji. Jedinični testovi ne bi smeli da budu povezani sa bazom podataka, da koriste sistem datoteka, da komuniciraju sa spoljnim sistemima ili da interaguju sa komponentama sistema. Oni omogućavaju brzo izvršavanje, a povratne informacije se brzo dobijaju ukoliko promene narušavaju postojeću funkcionalnost.
Testovi komponenti
Oni testiraju veće grupe funkcionalnosti kako bi se identifikovali potencijalni problemi. Obično su sporiji, zahtevaju složeniju konfiguraciju i više I/O interakcije sa bazom podataka, sistemom datoteka ili drugim sistemima.
Testovi implementacije
Takvi testovi potvrđuju da je implementacija uspela; drugim rečima, da je aplikacija ispravno instalirana, konfigurisana, da može da pristupi svim potrebnim uslugama i da pravilno reaguje.
Pored navedenih, postoje i testovi eksploatacije i upotrebljivosti. Za više informacija o testiranju, pogledajte članak o vrstama testiranja aplikacija.
Šta je arhitektura mikroservisa i po čemu se razlikuje od tradicionalne arhitekture?
Tradicionalni metod pisanja softvera je monolitan. To znači da su sve funkcionalnosti aplikacije spojene u jedan blok. U slučaju grešaka ili potrebe za ažuriranjem, analizira se kod koji upravlja celim proizvodom.
To uzrokuje zastoje ili čak padove sistema, i predstavlja veliki rizik za očuvanje koda. Za korisnike, ovo znači gubitke i glavobolju.
U arhitekturi mikroservisa, funkcionalnosti aplikacije su predstavljene kao nezavisno razvijene i integrisane usluge. Komponente su odvojene, ali rade zajedno kako bi izvršile povezane zadatke.
Na ovaj način, svaka nezavisna usluga radi bez ometanja drugih, što je posebno važno u slučaju kvarova. Ako jedna funkcija ne uspe, moguće je izvršiti izmene bez ugrožavanja funkcionalnosti cele aplikacije.
Mikroservisi doprinose većoj agilnosti i efikasnosti DevOps-a, ubrzavajući razvoj od početka do kraja i čineći aplikacije skalabilnijim.
Šta je infrastruktura kao kod?
Infrastruktura kao kod je pristup definisanju računarske i mrežne infrastrukture korišćenjem tehnika upravljanja izvornim kodom, tretirajući je kao bilo koji drugi softverski sistem.
Ovaj kod se može čuvati u sistemima za kontrolu verzija, omogućavajući reviziju i ponovljivo konstruisanje, uz primenu testiranja i principa kontinuirane isporuke.
Infrastruktura kao kod se zasniva na nekoliko praksi:
- Korišćenje datoteka definicija
- Samodokumentovani sistemi i procesi
- Verzioniranje svih elemenata
- Kontinuirano testiranje sistema i procesa
- Manje promene umesto velikih serija
- Obezbeđivanje neprekidne dostupnosti usluga
Alati za automatizaciju izgradnje definišu način na koji softver treba da se izgradi (koji koraci i kojim redosledom treba da se izvrše), kao i potrebne zavisnosti (koji drugi softver mora biti prisutan da bi izgradnja bila uspešna).
Neki alati su pogodniji za projekte koji koriste određene programske jezike, poput Maven-a i Apache-ovog Ant-a, koji se, iako se mogu koristiti i sa drugim jezicima, uglavnom primenjuju u Java projektima. Drugi, kao što su Hudson ili Jenkins, mogu se koristiti sa širim spektrom projekata.
Šta je DevOps pipeline?
DevOps pipeline je proces koji obuhvata više koraka pre objavljivanja novog softvera. Može se primeniti u svim fazama projekta, od integracije i testiranja do isporuke i implementacije. Generalno, prolazi kroz sledeće faze i timove:
- Vizija proizvoda: definiše karakteristike proizvoda;
- Razvojni tim: razvija iterativno i postepeno;
- Operativni tim: implementira i održava stabilno okruženje;
- Praćenje i povratne informacije: nastoji da generiše vrednost i da je iskoristi korisnik.
Koje su različite faze CI/CD pipeline-a?
Koraci koji čine CI/CD pipeline predstavljaju nekoliko grupisanih zadataka, koji se nazivaju faza pipeline-a. Ukratko, to su:
- Kompilacija: faza u kojoj se sastavlja aplikacija;
- Testiranje: faza u kojoj se testira kod. Ovde automatizacija štedi vreme i trud;
- Isporuka: kada se aplikacija pošalje u repozitorijum;
- Implementacija: kod se implementira u produkcionom okruženju;
- Validacija i usklađenost: mogu se koristiti alati za proveru bezbednosti slike, kao što je Clair, kako bi se osigurao kvalitet slika poređenjem sa poznatim ranjivostima (CVE).
Ovo su najčešće faze DevOps pipeline-a. Međutim, svaka kompanija ima specifične potrebe i prilagođen pipeline.
Šta znači virtuelizacija platforme i koje su njene prednosti?
Virtuelizacija platforme podrazumeva simulaciju celog računarskog sistema radi pokretanja više instanci operativnih sistema istovremeno na jednom fizičkom računaru.
U ovakvoj konfiguraciji, monitor virtuelne mašine (VMM), ili hipervizor, ima potpunu kontrolu nad hardverskim resursima fizičkog računara. Gost operativni sistemi rade na virtuelnim mašinama, kojima upravlja VMM. Virtuelizacija okruženja uključuje simulaciju jedne ili više virtuelnih mašina i mrežnih veza između njih.
Virtuelizacija može pomoći u smanjenju vremena potrebnog za implementaciju, kao i rizika koji su sa njom povezani, na nekoliko načina. Korišćenje virtuelnih mašina je od velike pomoći u postizanju efikasnog upravljanja konfiguracijom, i vertikalno i horizontalno, u svim sistemima.
Konkretno, korišćenje virtuelizacije donosi sledeće prednosti:
- Brz odgovor na promenljive zahteve
- Konsolidacija resursa
- Standardizacija procesa
- Jednostavnije održavanje osnovnih postavki
Koja je razlika između kontejnera i virtuelnih mašina?
I kontejneri i VM rade sa virtuelizacijom i izolacijom okruženja, sa ciljem unapređenja obrade nezavisno od aplikacija. Međutim, kontejneri kreiraju izolovana okruženja u kojima različite aplikacije mogu raditi istovremeno, jer je podela napravljena na nivou dostupnih resursa, kao što su memorija i obrada. S druge strane, virtuelna mašina omogućava da jedan fizički računar hostuje druge, sa različitim operativnim sistemima, čvrstim diskovima i hardverom koji je nezavistan od originalnog.
Koja je glavna razlika između Dockera i Kubernetes-a?
Docker je jedan od najčešće korišćenih DevOps alata za kontejnerizaciju. Fokusira se na prenosivost aplikacija, smeštajući ih u tehnološke kontejnere i sisteme za pakovanje, i omogućavajući njihovo premeštanje između različitih platformi.
Sa druge strane, Kubernetes je alat za orkestraciju kontejnera koji omogućava grupisanje kontejnera u logičke kategorije. Može se implementirati na više računara putem automatizovane distribucije.
Više informacija možete naći u članku o poređenju Kubernetes vs. Docker.
Koje su neke metrike telemetrije u DevOps-u?
- Poslovni nivo: Primjeri uključuju broj prodajnih transakcija, prihod od prodajnih transakcija, broj registracija korisnika, stopu odustajanja i rezultate A/B testiranja.
- Nivo aplikacije: Primjeri uključuju vreme trajanja transakcija, vreme odziva korisnika i padove aplikacije.
- Nivo infrastrukture: Primjeri uključuju promet web servera, opterećenje CPU-a i iskorišćenost diska.
- Nivo klijentskog softvera: Primjeri uključuju greške u aplikaciji, padove i vreme trajanja transakcija koje meri korisnik.
- Nivo pipeline-a za primenu: Primjeri uključuju status build pipeline-a (crveno ili zeleno za različite automatizovane pakete testova), vreme promene u implementaciji, učestalost implementacija, promocije testnog okruženja i status okruženja.
Koje tehnologije koristite za DevOps?
Ovo pitanje ima za cilj da utvrdi koje tehnologije koristite za implementaciju DevOps kulture u organizaciji. Neke od najčešćih tehnologija koje DevOps inženjer može koristiti su:
- Kontinuirani razvoj: Git, SVN, Mercurial, CVS, Jira
- Kontinuirana integracija: Jenkins, Bamboo, Hudson
- Kontinuirani razvoj: Nexus, Archiva, Tomcat
- Kontinuirana primena: Puppet, Chef, Docker
- Kontinuirano praćenje: Splunk, ELK Stack, Nagios
- Testiranje: Selenium, Katalon Studio
Recite nam nešto o svom iskustvu u upravljanju DevOps projektima
DevOps veštine se ne odnose samo na tehničko znanje, već zahtevaju i interpersonalne i menadžerske sposobnosti, koje se često nalaze kod menadžera, direktora programa i menadžera projekata.
Od suštinskog je značaja da znate kako da upravljate promenama i da ih podržite, da obezbedite prelazak novih verzija koda na operativnu stranu, procenite i nadgledate različite platforme i alate za merenje performansi, analizirate i delite rezultate kako biste poboljšali buduće isporuke, itd.
Prilikom odgovaranja na ovo pitanje budite metodološki i objasnite svoj pristup rešavanju kompleksnih problema. Kako pristupate poboljšanju funkcionisanja infrastrukture? Kako planirate da sarađujete sa programerima front-end, mid-tier i back-end? Koje alate za praćenje ste savladali? Razmislite i o deljenju iskustava u rešavanju konflikata unutar tima.
Za više informacija razmislite o upisu na neki od DevOps kurseva.