LFCA: Naučite osnovne koncepte korištenja kontejnera – 22. dio


Vremenom, kako je potražnja za brzim testiranjem i implementacijom aplikacija rasla zajedno sa bržim poslovnim ciklusima, organizacije su bile primorane na inovacije kako bi održale korak sa brzim poslovnim okruženjem.

Potraga za modernizacijom aplikacija i izgradnjom novih za stvaranje agilnih tokova rada dovela je do koncepta korištenja kontejnera. Tehnologija kontejnerizacije stara je skoro koliko i virtuelizacija. Međutim, kontejneri nisu izazvali veliko uzbuđenje sve dok Docker nije eksplodirao na scenu 2013. godine i izazvao bijesan interes među programerima i drugim IT profesionalcima.

Trenutno, svi gigantski tehnološki entiteti kao što su Google, Amazon, Microsoft i Red Hat da spomenemo nekoliko skočili su na vagon.

Zašto kontejneri?

Jedan od izazova sa kojima se susreću programeri je razlika u računarskim okruženjima u svakoj fazi razvoja softvera. Problemi nastaju kada se softversko okruženje razlikuje od jedne faze do druge.

Na primjer, aplikacija može raditi besprijekorno u okruženju za testiranje pomoću pokretanja Python 3.6. Međutim, aplikacija se ponaša čudno, vraća neke greške ili se u potpunosti ruši kada se prenese u proizvodno okruženje na kojem radi Python 3.9.

Kontejneri su došli na scenu kako bi odgovorili na ovaj izazov i osigurali da aplikacije rade pouzdano kada se premjeste iz jednog računarskog okruženja u drugo u svakoj fazi razvoja softvera – od računara programera pa sve do proizvodnog okruženja. I nije samo softversko okruženje ono koje može dovesti do takvih nedosljednosti, već i razlike u mrežnoj topologiji i sigurnosnim politikama.

Šta su kontejneri?

Kontejner je izolirana softverska jedinica koja pakuje sav binarni kod, biblioteke, izvršne datoteke, zavisnosti i konfiguracijske datoteke u jedan paket na takav način da će aplikacija nesmetano raditi kada se prenese iz jednog računarskog okruženja drugome. Ne dolazi sa slikom operativnog sistema što ga čini laganim i lako prenosivim.

Slika kontejnera je samostalan, lagan i izvršni paket koji objedinjuje sve što je potrebno za izvršavanje aplikacije. Tokom vremena izvođenja, slika kontejnera se pretvara u kontejner. U slučaju Docker-a, na primjer, Docker slika postaje docker kontejner kada se izvrši na Docker Engine-u. Docker je okruženje za izvršavanje koje se koristi za izgradnju kontejnerskih aplikacija.

Kontejneri rade u potpunoj izolaciji od osnovnog operativnog sistema, a kontejnerske aplikacije će uvijek raditi dosljedno bez obzira na računarsko okruženje ili infrastrukturu. Upravo iz tog razloga programer može razviti aplikaciju iz udobnosti ovog laptopa i lako je postaviti na server.

Konzistentnost i pouzdanost pokretanja kontejnera daju programerima mir u saznanju da će njihove aplikacije raditi kako se očekuje bez obzira na to gdje su raspoređene.

Po čemu se kontejneri razlikuju od virtuelnih mašina?

Uobičajena stvar koju dijele kontejneri i virtualne mašine je da rade u virtueliziranom okruženju. Kontejnerizacija je, u određenom smislu, oblik virtuelizirane tehnologije. Međutim, kontejneri se razlikuju od virtuelnih mašina na više načina.

Virtuelne mašine

Virtuelna mašina koja se takođe naziva virtuelna instanca ili ukratko VM je emulacija fizičkog servera ili računara. Virtuelizacija je tehnologija koja omogućava stvaranje virtuelnih mašina. Koncept virtuelizacije datira iz ranih 1970-ih i postavio je temelje za prvu generaciju cloud tehnologije.

U virtuelizaciji, sloj apstrakcije se kreira na vrhu golog metalnog servera ili računarskog hardvera. Ovo omogućava da se hardverski resursi jednog servera dele na više virtuelnih mašina.

Softver koji se koristi za pravljenje sloja apstrakcije naziva se hipervizor. Hipervizor apstrahuje virtuelnu mašinu i gostujući OS od stvarnog metalnog ili kompjuterskog hardvera. Dakle, virtuelna mašina se nalazi na vrhu hipervizora koji čini hardverske resurse dostupnim zahvaljujući sloju apstrakcije.

Virtuelne mašine pokreću kompletan operativni sistem (gostujući OS) koji je nezavisan od osnovnog operativnog sistema (host OS) na kojem je instaliran hipervizor. Gostujući OS tada pruža platformu za izgradnju, testiranje i implementaciju aplikacija uz njihove biblioteke i binarne datoteke.

Postoje dvije vrste hipervizora:

Hipervizor tipa 1 (Hipervizor golog metala)

Ovaj hipervizor se instalira direktno na fizički server ili osnovni hardver. Ne postoji operativni sistem koji se nalazi između hipervizora i hardvera računara, otuda i naziv oznake bare-metal hypervisor. Pruža odličnu podršku jer se resursi ne dijele sa operativnim sistemom domaćina.

Zbog svoje efikasnosti, hipervizori tipa 1 se uglavnom koriste u poslovnim okruženjima. Proizvođači hipervizora tipa 1 uključuju VMware Esxi i KVM.

Hipervizor tipa 2:

Ovo se također smatra hostiranim hipervizorom. Instalira se na vrhu operativnog sistema domaćina i dijeli osnovne hardverske resurse sa OS hostom.

Hipervizori tipa 2 su idealni za mala računarska okruženja i uglavnom se koriste za testiranje operativnih sistema i istraživanja. Proizvođači hipervizora tipa 2 uključuju Oracle VirtualBox i VMware Workstation Pro.

Nedostatak virtuelnih mašina

Virtuelne mašine imaju tendenciju da budu ogromne veličine (Mogu zauzeti nekoliko GB), sporo se startuju i zaustavljaju i gutaju mnogo sistemskih resursa što dovodi do prekida i sporih performansi zbog ograničenih resursa. Kao takva, virtuelna mašina se smatra glomaznom i povezana je sa visokim režijskim troškovima.

Kontejneri

Za razliku od virtuelne mašine, kontejner ne zahteva hipervizor. Kontejner se nalazi na vrhu fizičkog servera i njegovog operativnog sistema i deli isto jezgro kao i OS, između ostalog, kao što su biblioteke i binarne datoteke. Više kontejnera može raditi na istom sistemu, svaki pokreće svoj skup aplikacija i procesa od ostalih. Popularne kontejnerske platforme uključuju Docker i Podman.

Za razliku od virtuelnih mašina, kontejneri rade u potpunoj izolaciji od osnovnog operativnog sistema. Kontejneri su izuzetno lagani – samo nekoliko megabajta – zauzimaju manje prostora i štedljivi su na resurse. Lako ih je pokrenuti i zaustaviti i mogu nositi više aplikacija nego virtuelna mašina.

Prednosti korištenja kontejnera

Kontejneri pružaju zgodan način dizajniranja, testiranja i implementacije aplikacija sa vašeg računara direktno u proizvodno okruženje, bilo da se radi o premisi ili u oblaku. Evo nekih prednosti korištenja kontejnerskih aplikacija.

1. Veća modularnost

Prije kontejnera, imali smo staromodni monolitni model gdje bi cijela aplikacija koja se sastojala od frontend i backend komponenti bila spojena u jedan paket. Kontejneri omogućavaju podjelu aplikacije na više pojedinačnih komponenti koje mogu međusobno komunicirati.

Na ovaj način razvojni timovi mogu sarađivati na različitim dijelovima aplikacije pod uvjetom da se ne izvrše velike izmjene u pogledu načina na koji aplikacije međusobno komuniciraju.

Na tome se zasniva koncept mikroservisa.

2. Povećana produktivnost

Više modularnosti znači veću produktivnost jer su programeri u mogućnosti da rade na pojedinačnim komponentama aplikacije i otklanjaju greške mnogo brže nego prije.

3. Smanjeni režijski troškovi

U poređenju sa virtuelnim mašinama i drugim konvencionalnim računarskim okruženjima, kontejneri koriste manje sistemskih resursa jer ne uključuju operativni sistem. Ovo sprečava nepotrebne troškove za nabavku skupih servera za izgradnju i testiranje aplikacija.

4. Povećana prenosivost

Zbog malog otiska, kontejnerske aplikacije se lako postavljaju na više računarskih okruženja/operativnih sistema.

5. Veća efikasnost i fleksibilnost

Kontejneri omogućavaju brzu implementaciju i skaliranje aplikacija. Oni također pružaju prijeko potrebnu fleksibilnost za implementaciju aplikacija u više softverskih okruženja.

Kako kontejneri imaju koristi za DevOps timove?

Kontejneri igraju ključnu ulogu u DevOps-u i bilo bi nemoguće zamisliti kakva bi situacija bila bez kontejnerskih aplikacija. Dakle, šta kontejneri donose na stol?

Prvo, kontejneri podupiru arhitekturu mikroservisa, omogućavajući da se gradivni blokovi cijele aplikacije razvijaju, postavljaju i skaliraju nezavisno. Kao što je spomenuto, ovo omogućava veću saradnju i brzu implementaciju aplikacija.

Kontejnerizacija takođe igra glavnu ulogu u olakšavanju CI/CD cevovoda obezbeđivanjem kontrolisanog i doslednog okruženja za izgradnju aplikacija. Sve biblioteke i zavisnosti su upakovane zajedno sa kodom u jednu jedinicu za bržu i lakšu primenu. Testirana aplikacija će biti tačan softver koji će biti raspoređen u proizvodnji.

Osim toga, kontejneri poboljšavaju uvođenje zakrpa i ažuriranja kada se aplikacija podijeli na više mikroservisa, svaki u zasebnom kontejneru. Pojedinačni kontejneri se mogu pregledati, zakrpiti i ponovo pokrenuti bez prekidanja ostatka aplikacije.

Zaključak

Svaka organizacija koja želi da postigne zrelost u DevOps-u trebala bi razmotriti iskorištavanje snage kontejnera za agilno i besprijekorno postavljanje. Izazov leži u znanju kako ih konfigurirati, osigurati i neprimjetno implementirati u više okruženja.