DevOps @ KING ICT: sadašnjost i budućnost

Autor: Jasmin Štrkonjić, DevOps inženjer u KING ICT-u

U današnjem digitalnom dobu i sve konkurentnijem tržištu, brzina i agilnost u razvoju softvera ključni su elementi za postizanje konkurentske prednosti. U KING ICT-u usredotočeni smo na inovativna rješenja i primjenu novih tehnologija u svim područjima poslovanja, a brzina a agilnost neizbježni su elementi da bismo ostvarili svoje ciljeve.

Zato koristimo DevOps metodologiju koja nam pomaže ostvariti brzinu i kvalitetu od reputacijske važnosti.

Što je uopće DevOps?

DevOps je multidisciplinarno područje između čistog razvoja softvera i infrastrukturnih operacija. Radi se o relativno novom području u svijetu IT-ja koje djeluje kao spona između ta dva svijeta. U DevOps timu dužnost nam je osigurati stabilno i sigurno okruženje za jednostavno puštanje aplikacije u produkciju, bilo da se radi operativnom sustavu ili platformi namijenjenoj kontejnerskom okruženju. U svakom trenutku moramo osigurati izvršavanje posljednje stabilne inačice aplikacije. Možda je najvažnija  uloga automatizirati repetitivne i dnevno operativne zadatake. Takvim pristupom razvojnim inženjerima osiguravamo  da infrastruktura ne bude neka „crna kutija“, već okruženje kojim i oni sami mogu upravljati i imati svijest gdje se aplikacija izvršava i kako utječe na potrošnju resursa.

KING ICT je prepoznao važnost ovog pristupa i jedna od ključnih inicijativa tvrtke je usvajanje DevSecOps pristupa razvoju softvera primjenom otvorenog koda kako bi se ubrzali razvoj i isporuka te povećala pouzdanost, sigurnost i kvaliteta softverskih rješenja, to je kontinuirani proces.

DevOps u KING ICT-u kao jedinstveni proces

DevOps pristup razvoju softvera kombinira razvoj i operacije u jedinstven proces. Naš DevOps pristup  integriran je u sve faze razvoja softvera. To uključuje krucijalnu suradnju između programera, inženjera za infrastrukturu i operacijskih timova. Cilj je stvoriti okruženje koje omogućava brži razvoj i isporuku softvera, čime se povećavaju kvaliteta i pouzdanost sustava. U kontekstu DevOps paradigme ključno je korištenje DevOps alata koji se uglavnom baziraju na rješenjima otvorenog koda. DevOps tim zadužen je za uspostavu i kontinuirani razvoj platforme temeljene na Cloud-Native tehnologiji također otvorenog koda koja omogućuje razvojnim timovima potpunu automatizaciju infrastrukture. Kao rezultat, postiže se brži i kvalitetniji razvoj, testiranje, integracija i isporuka softvera.

Razvoj u iteracijama ili“ korak po korak“ metoda

Kada govorimo o DevOps pristupu, razvoj u iteracijama je ključni element KING ICT-a. Umjesto da se cijeli projekt razvija u jednom velikom koraku i da se čeka dovršetak cijelog projekta, razvoj u iteracijama omogućuje razvoj softvera u manjim koracima, uz stalne testove i pregledavanja koda. Ovakav pristup omogućuje otkrivanje i rješavanje problema i prije nego što postanu preveliki, što znači da se projekti mogu isporučiti u roku i s manje pogrešaka. Potičemo pristup „fail-faster“ jer to zapravo znači da se razvojni inženjeri u kontroliranim uvjetima ne trebaju bojati grešaka. Štoviše, ako se više grešaka otkrije u fazi razvoja i testiranja, krajnji proizvod je kvalitetniji. Bitno je imati okruženje koje dozvoljava takav pristup, a razvoj mikroservisa koji su kontejnerizirani se savršeno uklapaju.

Od razvoja do isporuke automatizacijom: CI/CD temeljen na otvorenom kodu

Kako bi se osigurala brza i učinkovita isporuka softvera, koristimo kontinuiranu integraciju i isporuku (CI/CD) temeljenu na otvorenom kodu. Radi se o procesnom pristupu nalik proizvodnoj traci, a omogućuje potpuno automatiziran proces. Većinom se proces sastoji od nekoliko ključnih točaka, a to su:

  • Arhitekturalno planiranje – Planning
  • Izrada izvornog koda i verzioniranje – Code
  • Automatizacija izgradnje aplikacija iz izvornog koda (paketira se samo jednom u iteraciji) – Build
  • Kontrola kvalitete – Test
  • Integracija s okolinom gdje se aplikacija izvodi (varijable okoline) – Release
  • Postavljanje aplikacije u okruženje gdje se izvodi – Deploy
  • Optimizacije infrastrukture (virtualizacija, kontejnerizacija) – Operate
  • Nadzor – Monitoring/Logging
Univerzalni princip DevOps paradigme

Ovaj princip omogućuje iterativne promjene u softveru koje se automatski testiraju i isporučuju sve do produkcije, čime se osigurava visoka kvaliteta proizvoda, pouzdanost i brza isporuka na tržištea kada postoji potreba – proces se može i ponoviti.

Infrastructure as a Code & Configuration Management

Postoje još dva ključna elementa u našem pristupu, a to su infrastrktura i upravljanje konfiguracijama. IaaC omogućuje razvojnom timu kreiranjeinfrastrukturnih resursa za potrebe aplikacije putem koda, što omogućuje brzo i lako reproduciranje infrastrukture na različitim okruženjima nalik onome u produkcijskom okruženju.

Korištenje IaaC pristupa iz DevOps paradigme  agnostičan je pristup infrastrukturi, a kreiranje takvih resursa predstavlja unificirani obrazac bez obzira nalazi li se infrastruktura na našim poslužiteljima ili negdje u Cloudu. Configuration Management, s druge strane, omogućuje razvojnom timu upravljanje konfiguracijama kroz izvorni kod, bilo da se radi o aplikativnim ili infrastrukturnim konfiguracijama. Korištenje posebnih alata temeljenih na otvorenom kodu olakšava se deklarativim programiranjem, kojim se opisuje željeno stanje sustava, a definira se u manifestima najčešće u yaml formatu. YAML je vrlo popularan programski jezik u DevOps svijetu jer je dizajniran na način da je jednostavan za čitanje i čovjeku razumljiv, a radi skladno i s drugim programskim jezicima.

Openshift kao „Ferrari“ među kubernetes klasterima

Puno je skraćenica i kompliciranih objašnjenja… Ništa to nije „rocket science“ i svatko to može naučiti – ako ima želju učiti. Platform As A Service je baš ona prava DevOps platforma. Danas već možemo reći – u standardnom razvoju aplikacija mikroservisne arhitekture i kontejnerskog okruženja, DevOps timovi održavaju razne kubernetes klastere različitih distribucija i vendora, ali mi u Kingu radimo na „Ferrariju“ među njima. Radi se o Openshift platformi.

Jasmin Štrkonjić

To je zapravo Kubernetes distribucija koja ima jako puno dodatnih funkcionalnosti prikladnih za razvojne inženjere. Openshift trenutno nudi najveću razinu sigurnosti ugrađenu već u dizajn bazične slike kontejnera kao osnove budućeg kontejnera koji će se izvršavati u produkciji. Kada na tu bazičnu sliku dodamo izvorni kod aplikacije, zapravo smo izgradili aplikativnu sliku. U tom procesu izgradnje se primjenjuje već spomenuti CI/CD procesni pristup gdje izvorni kod aplikacije prolazi kroz razne procese kontrole kvalitete i sigurnosti. Platforma nam također omogućava centralnu pohranu aplikativnih slika koje imaju tag (oznaku) verzije aplikacije, a po njemu znamo koje funkcionalnosti ili ispravke imamo ugrađene u toj verziji.

S obzirom na to da naši korisnici imaju razne platforme i sustave na kojima poslužuju naša rješenja, moramo biti fleksibilni kod isporuke, a Openshift nam i to omogućava. Tada mi dohvaćamo našu finalnu verziju aplikacije i postavljamo je u korisnikov repozitoriji gdje je opet ovisno o platformi i načinu implementacije pokrećemo u izvršnom produkcijskom okruženju.

Automatizacija je ključna u DevOps svijetu

Jako je važno da se u DevOps timu bavimo automatizacijom i da razumijemo što automatiziramo posebno u početcima karijere, kada radimo svoje prve DevOps korake. Preporuka je to raditi bez pomoći popularne umjetne inteligencije (koja je izvrsna i zaista olakšava svakodnevni rad), ali znanje koje steknemo uloženim trudom ima puno veću vrijednost i širu primjenu. Zašto je automatizacija ključna u DevOps svijetu?

Pa kada automatiziramo, mi zapravo pišemo kod u obliku skripte namijenjene izvođenju na nekom operacijskom sustavu, čime smo na neki način bliži poslu koji rade razvojni inženjeri i možemo se poistovijetiti s njihovim potrebama. Zadaci mogu biti jednostavni poput kreiranja novih korisničkih računa ili proširenja diskovnog prostora pa sve do kompleksnijih kao što su instalacije sustava za aplikativno upravljanje identitetima (korisnicima) te podešavanja aplikativnih poslužitelja i izrade biblioteka koje razvoju olakšavaju posao.

Ansible je alat kojeg koristimo i jedan je od popularnijih koji značajno olakšava takve zadatke jer nam omogućava da centralizirano upravljamo i orkestriramo automatizaciju. To nam daje puno veću kontrolu i smanjuje mogućnost pogreške. Neoprezna greška u automatizaciji može izazvati nedostupnost produkcijskih sustava i zato treba biti oprezan i uvijek testirati na okruženju koje nije produkcija.

Što nas čeka u budućnosti?

Implementacija i održavanje spomenutih procesa su kontinuirani posao. Novi projekti dolaze, neki stari idu u reinženjering, a neki završavaju svoj životni ciklus. DevOps angažman je nužan da se racionalno upravlja resursima, alatima i konfiguracijama. Također nastojimo predstaviti timovima poneki novitet koji je u sklopu R&D faze testiran i spreman za korištenje, a daje dodanu vrijednost IT sustavu. Neki od budućih angažmana su dodatna unaprjeđenja CI/CD procesa, dodatno unaprjeđenje upravljanja osjetljivim podatcima, uvođenje autonomnih operatora, blue/green deployment i još puno toga…

Budućnost DevSecOps u IT-u je, možemo sa sigurnošću tvrditi, izuzetno uzbudljiva, posebno uzevši u obzir umjetnu inteligenciju koja je dosegnula sasvim novi level u poimanju problema, rješavanju kompleksnih zadataka i pronalaska rješenja. Naša buduća rješenja sigurno će se sastojati i od ove komponente. To samo znači da ćemo stručne kompetencije dodatno obogatiti novim vještinama koje će oblikovati budućnost hrvatskog IT-ja. Zato – držite nas na oku i postanite s nama dio budućnosti!