Šta je Kubernetes?

Kubernetes je platforma otvorenog koda za raspoređivanje, skaliranje i upravljanje kontejnerskim aplikacijama. Kao orkestrator upravlja radom kontejnera na klasteru kao i radnim opterećenjem, kako bi se osigurao konstantan rad aplikacije u slučaju otakizivanja jednog noda.

Ne tako davno koristili smo i razvijali monolitne aplikacije sa ogromnim silosima baza podataka koje su rasle sa novim funkcijama dok se nisu pretvorile u ogromne i teško upravljive divove.

Sa sve većom digitalizacijom poslovanja, ubrzanjem proseca poslovanja rasla je potreba za novim funkcionalnostima na aplikacijama. Počeli smo da dolazimo u stanje gde nakon što završimo neku novu funkcionalnost ona je već zasterela. U nekim slučajevima se desi da ima nešto besplatno, što to radi bolje.

Danas sve veći broj programera, arhitekata i DevOps experata ima stav da je bolje korisiti mikroservise, nego džinovski monilit, za ubrzanje isporuke i stvaranju prostora za tehološke inovacije. Korištenje arhitekture zasnovane na mikroservisima obično deli aplikaciju na najmanje dve aplikacije: front-edn i back-edn-api.

Kada se oragnizacije odluče na mikroservisnu arhitekturu postavlja se pitanje: U kom okruženju je najbolje pokrenuti mikroservise? Odgvor na ovo pitanje je Docker, alat koj je danas postao standard za kontejnere.

Kubernetes?

Kubernetes je softver otvorenog koda za raspoređivanje, skaliranje i upravljanje kontejnerskim aplikacijama. Kao orkestrator upravlja radom kontejnera na klasteru, također upravlja i radnim opterećenjem, kako bi se osigurao konstantan rad aplikacije u slučaju otakizivanja jednog kontejnera.

Ime Kuberenetes dolazi od grčke reči korimilar ili pilot. Kompanija Google je 2014 godine otvorila projekat zajednici otvorenog koda. Kuberenetes radi na osnovu više decenijskog iskustva koje Google ima u radu sa kontejenerima uz stalne inovacije zajednice.

Kubernetes je prvi projekat Cloud Native Cloud Foundation (CNCF) fondacije koja okuplja vodeće svetke proizvođače tehologije u cilju adekvatnog upravljanja projektom. Koliko je ovo važno govori i podatak da je Kubernetes najbrže rastući projekat otovorenog koda u istoriji.

Da bismo bolje razumeli zašto je Kubernetes tako važan projekat, iza koga su stale najveće svetke korporacije. O tome govori i činjenica da je IBM izdvojio 33,4 milijarde za kupovinu  Red Hat-a i OpenShift-a zasnovanog na Kubernetes-u.

Potrebno je da razumemo evoluciju konzumacije računarskih resursa u poslednjih petnest godina.

Tradicionlano razmeštanje

Organizacije su pokretale aplikacije na fizičkim serverima. Ovim pristupom nije bilo načina da se jasno definišu granice resursa za aplikacije. To je sa vremenom kako su organizacije rasle prouzrokovalo probleme u radu aplikacija. Dešavalo se da jedna aplikacija zauzme više resursa i time onemogući drugoj aplikaciji pristup resursima za neometan rad. Rešenje za to je bilo pokretanje različitih aplikacija na različitim fizičkim serverima, ali ni to nije dovelo do rasterećenja. Dovelo je do poskupljenja održavanja gomile fizičkih polu iskorištenih servera.

Virtualizacija

Kao način da prevaziđemo problem sa neoptimizovanim korištenjem hardverskih resursa došla je era virtuelizacije fizičkog servera na više virtuelnih mašina (VM). Virtuelizacija omogućava da pokrenemo više virtuelnih mašina (manjih kopija fizičkog servera) na CPU jednog fizičkog servera. Virtualizacija omogućava da pokrenemo aplikacije u izolovanim virtuelnim mašinama i time dobijemo bolju sigurnost a zadržimo mogućnost sklairanja resursa po potrebi aplikacije. Svaka VM pokreće svoje komponente na nivou operativnog sistema na virtualizovanom hardveru.

Kontejenri

Kontejenri su slični virtuelnim mašinama (VM), ali imaju opušteniju izolaciju za deljenje operativnog sistema (OS) među aplikacijama. Stoga se kontejenri smatraju laganim paketima gotovo istih karaktertistika kao VM. Slično kao i u VM, skladišteni prostoro (storage) ima svoj fajl sistem, CPU, memoriju i još mnogo tog potrebnog za rad i vezu sa ostalim delovima aplikacije ili same platfome. Pošto imaju odvojenu vezu od infrastukture moguće ih je premeštati između cloud okruženja, prema potrebi i poslovnim izazovima

Kontejenri su postali poplarni jer pružaki dodatne pogodnosti kao što su:

  • izrada agilnih aplikacija korištenjem lakših paketa i modela raspoređivanja
  • neprekidan razvoj (continiuse developmnet)
  • konzistencija između razvojong okruženja i produkcionog okruženja
  • smanjenje vremena koje se troši na održavanje infrastrukture
  • izolacija resursa i mogućnost prediktivnog alociranja u skladu sa opterećenjem

Zašto nam treba Kubernetes?

Kontejneri su jako dobar način za pakovanje i raspoređivanje vaših aplikacija. U vašem razvojnom okruženju morate upravljati kontejnerima koji pokreću aplikacije i osiguravaju da nema zastoja. Na primjer, ako kontejner prestane sa radom, treba pokrenuti drugi. Da li bi bilo lakše kada bi takvim ponašanjem upravljao sisitem?

Kubernetes vam pruža okruženje za elastično pokretanje distribuiranih sisitema odnosno klastera vaših kontejenra. On se brine o skaliranju i vezama vaše aplikacije sa drugim aplikacijama, pruža predefinisane obrasce implementacije odnosno raspoređivanja na više nodova.

Kubernetes se sastoji od:

  • Pod – najmanja jedinica u Kubernetes-u.
  • Master nod– centralna jedinica u klasteru.
  • Worker node (minion): – izvršavaju radno opterećenje od strane Master noda

Pod su najmanje jedinice u Kubernetes-u. Pod je sinonim za mahunu koja sadrži grašak. Svaki Pod može da sadrži jedan ili više kontejnera u zavisnosti od opterećenja. Kontejneri koji se nalaze u istom Pod-u dele domaćina, što znači da dele istu IP adresu i portove. Predstavlja pokrenut proces u klasteru.

Master nod – pokreće više servisa koji su odgovorni za zdravlje klastera, replikaciju, dostupnost i tačke spajanja servisa i podova (end points), Kubernetes API, interakciju sa delom zaduženim za infrastukturu (IaaS) bilo da se radi o privatnom ili javnom cloud okruženju.

Worker node (mionion): pokreće Kubernetes agent koji je odgovoran za pokretanje Pod kontejnera preko Docker-a. Brine se za konfiguraciju i količine potrebnog prostora za skladište podataka. Vršli monitoring i provere stanja opterećenja ostatka sistema.