“Infrastruktura kao kod” izazov je s kojim se isplati uhvatiti u koštac, pogotovo za ogromne okoline
Što je sustav veći, to IaC (Infrastructure-as-Code) donosi više prednosti. Kako to izgleda u praksi?
Matija Gašpar glavni je DevOps inženjer u Raiffeisenbank Hrvatska (RBA). 35-godišnji Zagrepčanin u tu je banku pristigao prije nešto manje od četiri godine, nakon što je završio Tehničko veleučilište u Zagrebu i potom radio u više tvrtki, mahom bankama.
Jedan od glavnih poslova kojim se bavio – i trenutno bavi u RBA – implementacija je infrastrukture kao računalnog koda (Infrastructure as a code, IaC). Što je veći sustav, to su automatizacija, oporavak i konzistencija istog važniji. Zbog toga IaC donosi više prednosti većem sustavu poput banaka, nego manjim radnim okolinama, objašnjava Matija.
Brojne su prednosti i unapređenja koja dobivamo zahvaljujući ovakvoj implementaciji jer IaC automatizira podizanje i upravljanje infrastrukture. Konfiguracija infrastrukture definirana je u kodu i lako se pokreće pomoću alata kao što su Terraform i Ansible.
Možda najbitnija prednost je konzistencija i mogućnost lakog obnavljanja i ponavljanja infrastrukturnih taskova. Naime, sav kod je pohranjen na nekom sustavu verzioniranja kao što je Git, odakle ga se može lako revidirati i pokretati po potrebi.
Sve ovisi o veličini okoline
Proces migracije svih RBA aplikacija i alata na novu okolinu još je u tijeku, no Matija procjenjuje kako je realan vremenski okvir za implementaciju IaC u sustavu kao što je RBA od šest mjeseci do godinu dana. To obuhvaća postavljanje koda i okoline, kao i migraciju određenog broja aplikacija, nekad se dio vremena i resursa potroši i na isprobavanje raznih rješenja koja bi mogla biti korisna.
Nakon što se pokaže da aplikacije na novoj okolini uspješno rade, počinje se s migracijom preostalih. Koliko će to trajati, ovisi o veličini okoline koju imate – koja je, naravno, veća kad je riječ o bankama.
Na migraciji je u RBA radilo pet do osam ljudi, svaki zadužen za svoju tehnologiju i migraciju uz njih povezanih komponenti na novo okruženje. Broj je varirao ovisno o potrebi posla u danom trenutku za određeni segment.
Recimo, mrežnog administratora trebamo za početne IP adrese, propuštanja, podešavanje load balancera, pa je u tim trenucima njegova angažiranost veća. Nakon što to odradi, njegov posao se smanjuje i tu je po potrebi.
U migraciju je bilo uključeno i nekoliko vanjskih suradnika. To se pokazalo korisnim jer – unatoč tome što su poznavali IaC i automatizaciju – Matija i njegov tim nisu imali direktnog iskustva sa samim procesom migracije, odnosno najboljim načinima i alatima kako ju provesti od početka do kraja. Uključivanje ljudi s odgovarajućim iskustvima i znanjem svakako je ubrzalo cijeli proces.
Izazovi po IaCu
Ipak, bila je to po mnogim aspektima izazovna implementacija. Jedan od važnijih, recimo, bila je potreba za suradnjom timova oko migracije određene aplikacije.
Osim toga, to što se okolina poput one u RBA sastoji od velikog broja aplikacija nije predstavljalo najveći problem. Veći je izazov bilo to što razne aplikacije rade na različite načine i imaju drukčije zahtjeve, prilagođene svojoj svrsi i potrebama.
Kao tim za migraciju kod pisanja predloška za naseljavanje pojedinih aplikacija morali smo paziti na potrebe i zahtjeve svake. Zbog toga je bilo izazovno napisati jedan univerzalni predložak koda koji će zadovoljiti svaku aplikaciju.
Također, trebalo je s timovima koji održavaju aplikaciju dogovoriti idealno vrijeme i proces migracije. Problem bi se pojavio i kad neka od aplikacija nije bila prethodno pisana za mikroservisnu arhitekturu.
Zbog toga nije bila u tom trenutku prikladna za migraciju. Kako bi to omogućili, Matija i njegov tim trebali su prepraviti njen kod.
Alati za integraciju i isporuku
Alate Argo, Helm, Terraform i Git odabrali su zato što općenito slove – a za sad se i u praksi pokazuju – kao najbolja rješenja na tržištu za stalnu integraciju i isporuku (continuous integration and continuous delivery/deployment, CI/CD) i IaC općenito.
ArgoCD omogućuje jednostavno i efikasno naseljavanje, skaliranje i nadogradnju aplikacija, dok se Terraform, recimo, koristi za provizioniranje svih potrebnih resursa za funkcioniranje infrastrukture na koju će se naseljavati aplikacije.
U praksi to znači da zapišemo željenu konfiguraciju naše infrastrukture u HCL-u, jeziku kojeg Terraform koristi, pohranimo ju na naš Git klijent te ju preko tog klijenta instanciramo, odnosno pokrećemo.
Taj napisani kod sadržava i kreira Kubernetes cluster, kafka cluster ili MSK u slučaju AWS-a, potrebne baze, alate za nadzor i logiranje kao što su Grafana, Prometheus, Opensearch i tako dalje.
Preko Terraforma podižemo sve potrebno za naseljivu okolinu za aplikacije, njihov nadzor i održivost.
Kao lokaciju za pohranjivanje vlastitog koda koristili su Git, kojeg se – osim za čuvanje i upravljanje kodom – koristi i za druge stvari. Recimo, može poslužiti i za cijeli CI dio, prethodi deployu aplikacija koji odrađuje ArgoCD, dodaje Matija.
ArgoCD se primarno koristi za inicijalno naseljavanje i kasniji deploy novih verzija već postojećih aplikacija. Također omogućuje, do određene mjere, praćenje logova i pregled samih aplikacija naseljenih preko njega.

Lokalno i u cloudu
Zamišljeno je da svaka aplikacija prethodno ima svoj repozitorij na Gitu koda pisanog specifično za nju. On bi trebao biti strukturiran prema postavkama predefiniranih templatea za Helm.
Helm ili helm chartovi su zapravo YAML predlošci koji opisuju i definiraju neki Kubernetes resurs. Služe kako bi kod deploya preko ArgoCD-a olakšali i automatizirali samu isporuku aplikacija, pošto je već prethodno definirano koju strukturu datoteka treba imati u svom repozitoriju i koje parametre te datoteke moraju sadržavati.
Helm je – u situaciji kad se koriste Argo i Kubernetes – praktičan jer preko svojih chartova automatizira instalaciju i konfiguraciju potrebnih resursa na radnoj okolini, objašnjava Matija. Samo provizioniranje infrastrukture, ako je u cloudu, moguće je uz pomoć svestranih alata kao što je već spomenuti Terraform ili, primjerice, nativnog AWS alata kao što je Cloud Formation.
Odlučili smo se za Terraform jer preko njega možemo provizionirati potrebne resurse lokalno i u cloudu, a i jer je dosta dobro pokriven raznim modulima i dokumentacijom.
Jedan klik za deploy
Taj repozitorij kod kreiranja aplikacije biva naveden kao referentna točka u ArgoCD-u te ju ArgoCD naseli na Kubernetes cluster koji mu je prethodno postavljen kao ciljana okolina za deploy.
Nakon što smo prvi puta naselili aplikaciju, kasnije u ArgoCD-u kod naseljavanja nove verzije samo zamijenimo vrijednost stare verzije za novu (čiji smo novi kod prethodno stavili na Git klijent) te ju Argo sam automatski sinkronizira i naseli.
Glavna ideja je, zaključio je Matija, sustav postaviti tako da se jednim klikom za deploy koda digne cijela okolina.
Ako u budućnosti dođe do greške u sustavu, ponovo se istim deploy postupkom okolina vraća u prvotno ispravno stanje, sa svim podacima do prije greške.
Ovim postupkom smo dobili na brzini podizanja i rada na našoj okolini (primjerice, nadogradnje i povećanja sustava), održivosti i sigurnosti samog sustava te lakšem revidiranju komponenti sustava, pošto je sve pohranjeno na jednom mjestu u kodu.

I za kraj, Matiju smo pitali i što za njega označava #RBAmakesITeasy, slogan IT odjela, kojim komuniciraju da IT može biti jednostavniji i lakši, kolegijalnost veća, a kultura opuštenija – s više fokusa na ljude.
Za mene RBA potiče i omogućava edukacije te korištenje novih tehnologija na IT tržištu. Samim time mi omogućava da radim i razvijam svoje vještine na tehnologijama koje se nakon zajedničke procjene pokažu najboljim za našu okolinu.
Sukladno članku 94. Zakona o elektroničkim medijima, komentiranje članaka na Netokraciji dopušteno je samo korisnicima koji ostave svoje ime i prezime te mail adresu i prihvate pravila ponašanja.
Pravila ponašanja
Na Netokraciji za vas stvaramo kvalitetan, autorski potpisan sadržaj i zaista se veselimo vašim kvalitetnim, kontruktivnim komentarima. Poštujmo stoga jedni druge prilikom komentiranja, kao i Zakon, držeći se sljedećih pravila ponašanja:
Kako koristimo podatke koje ostavljate? Bacite oko na našu izjavu o privatnosti.
Sve ostale komentare ćemo s guštom spaliti, jer ne zaslužuju svoje mjesto na internetu.