Kubernetes: open source protiv vendorskih

Bok, zovem se Dmitrij Krasnov. Već više od pet godina se bavim administracijom Kubernetes klastera i izgradnjom složenih mikroservisnih arhitektura. Na početku ove godine pokrenuli smo uslugu upravljanja Kubernetes klasterima na temelju Containeruma. Koristeći ovu priliku, ispričat ću što je taj Kubernetes i kako se integracija s vendorima razlikuje od open source-a.

Za početak, što je Kubernetes. To je sustav za upravljanje kontejnerima na velikom broju hostova. Na grčkom, usput rečeno, prevodi se kao "pilot" ili "kormilar". Izvorno ga je razvila Google, a zatim je, kao tehnološki doprinos, predan Cloud Native Computing Foundation, međunarodnoj neprofitnoj organizaciji koja okuplja vodeće svjetske programere, krajnje korisnike i dobavljače kontejnerskih tehnologija.

Kubernetes: open source protiv vendorskih

Upravljati velikim brojem kontejnera

Sada ćemo razjasniti što su ti kontejneri. To je aplikacija sa svim svojim okruženjem – uglavnom bibliotekama na kojima program ovisi. Sve to je zapakirano u arhive i predstavljeno kao slika koja se može pokretati neovisno o operativnom sustavu, testirati i još mnogo toga. No postoji problem — upravljanje kontejnerima na velikom broju hostova vrlo je složeno. Zato je Kubernetes i stvoren.

Slikovni kontejner predstavlja aplikaciju plus njene ovisnosti. Aplikacija, njene ovisnosti i slika datotečnog sustava OS-a nalaze se u različitim dijelovima slike, takozvanim slojevima. Slojevi se mogu ponovno koristiti za različite kontejnere. Na primjer, za sve aplikacije u tvrtki može se koristiti osnovni sloj Ubuntu. Pri pokretanju kontejnera nije potrebno čuvati na hostu više kopija jednog osnovnog sloja. To omogućava optimizaciju pohrane i isporuke slika.

Kada želimo pokrenuti aplikaciju iz kontejnera, potrebni slojevi se preklapaju i stvara se slojevita datotečna sustav. Na vrh se dodaje sloj za pisanje koji se briše nakon zaustavljanja kontejnera. To osigurava da prilikom pokretanja kontejnera aplikacija uvijek ima isto okruženje koje se ne može promijeniti. To osigurava ponovljivost okruženja na različitim host operacijskim sustavima. Bilo da je to Ubuntu ili CentOS, — okruženje će uvijek biti isto. Uz to, kontejner je izoliran od hosta pomoću ugrađenih mehanizama u Linux jezgru. Aplikacije unutar kontejnera ne vide datoteke, procese hosta i susjednih kontejnera. Ova izolacija aplikacija od host operacijskog sustava pruža dodatni sloj sigurnosti.

Za upravljanje kontejnerima na hostu postoje mnogi alati. Najpopularniji od njih je Docker. On omogućuje potpuni životni ciklus rada kontejnera. Međutim, radi samo na jednom hostu. Kada je potrebno upravljati kontejnerima na više hostova, Docker može pretvoriti život inženjera u pakao. Stoga je stvoren Kubernetes.

Potražnja za Kubernetesom upravo je uvjetovana mogućnošću upravljanja grupama kontejnera na više hostova kao jedinstvenim entitetima. Popularnost sustava omogućava izgradnju DevOps-a, u kojem se Kubernetes koristi za pokretanje procesa ovog DevOps-a.

Kubernetes: open source protiv vendorskih

Slika 1. Shematski prikaz principa rada Kubernetesa

Potpuna automatizacija

DevOps, u principu, predstavlja automatizaciju procesa razvoja. Grubo rečeno, programeri pišu kod koji se pohranjuje u repozitorij. Zatim se taj kod automatski može sastaviti odmah u kontejner sa svim bibliotekama, testirati i 'objaviti' na sljedeću fazu – Staging, a zatim odmah na Production.

Zajedno s Kubernetesom, DevOps omogućava automatizaciju ovog procesa, tako da se odvija praktično bez sudjelovanja samih programera. Zbog toga se značajno ubrzava kompilacija, jer se programer ne mora baviti tim na svom računalu — samo piše dio koda, šalje kod u repozitorij, nakon čega se pokreće pipeline koji može uključivati proces kompilacije, testiranja i implementacije. I to se događa s svakim commitom, stoga se testiranje odvija neprekidno.

Korištenje kontejnera osigurava da će sve okruženje ove aplikacije u produkciji biti u onom obliku u kojem je testirano. Drugim riječima, ne bi trebalo biti problema poput "na testu su bile jedne verzije, u produkciji – druge, a kada je implementirano – sve je propalo". Budući da danas imamo trend mikroservisne arhitekture, gdje umjesto jedne velike aplikacije postoji stotine malih, za ručno upravljanje njima potrebno je ogroman broj zaposlenika. Zato koristimo Kubernetes.

Prednosti, prednosti, prednosti


Kada govorimo o prednostima Kubernetesa kao platforme, ima značajne prednosti s aspekta upravljanja mikroservisnom arhitekturom.

  • Upravljanje mnogim replikama. Najvažnije je upravljanje kontejnerima na mnogim hostovima. I što je još važnije — upravljanje brojnim replikama aplikacija u kontejnerima kao jednom cjelinom. Zbog toga inženjerima nije potrebno brinuti se o svakom pojedinačnom kontejneru. Ako jedan od kontejnera padne, Kubernetes će to primijetiti i ponovno ga pokrenuti.
  • Klaster mreža. Također, Kubernetes ima tzv. klastersku mrežu s vlastitim adresnim prostorom. Zbog toga svaki pod ima svoju adresu. Pod podom se podrazumijeva minimalna strukturalna jedinica klastera, u kojoj se izravno pokreću kontejneri. Osim toga, Kubernetes ima funkcionalnost koja objedinuje opterećenje i otkrivanje usluga. To omogućava izbjegavanje ručnog upravljanja IP adresama i prebacivanje ovog zadatka na Kubernetes. Automatski health checkovi pomažu u otkrivanju problema i preusmjeravanju prometa na radne pode.
  • Upravljanje konfiguracijama. Kada se upravlja velikim brojem aplikacija, postaje teško upravljati njihovim konfiguracijama. Za to Kubernetes ima posebne resurse pod nazivom ConfigMap. Oni omogućavaju centralizirano pohranjivanje konfiguracija i njihovo ubacivanje u podove prilikom pokretanja aplikacija. Ovaj mehanizam osigurava konzistentnost konfiguracije, bilo da je riječ o deset ili sto replika aplikacija.
  • Trajni volumeni. Kontejneri su po svojoj prirodi imutabilni, i prilikom zaustavljanja kontejnera svi podaci zapisani na datotečni sustav bit će uništeni. Međutim, neka aplikacija pohranjuju podatke izravno na disku. Kako bi se riješio ovaj problem, Kubernetes ima funkcionalnost upravljanja skladištem podataka — trajne volumene. Ovaj mehanizam koristi vanjsko skladište za podatke i može pružiti trajnu pohranu, blokovnu ili datotečnu, kontejnerima. Takvo rješenje omogućava pohranu podataka odvojeno od radnika, što ih spašava u slučaju kvara onih radnika.
  • Upravljač opterećenjem. Iako u Kubernetes-u upravljamo apstraktnim entitetima poput Deployment, StatefulSet itd., na kraju se kontejneri pokreću na običnim virtualnim mašinama ili fizičkim serverima. Oni nisu savršeni i mogu se srušiti u bilo kojem trenutku. Kubernetes će to primijetiti i preusmjeriti unutarnji promet na druge replikate. No što učiniti s prometom koji dolazi izvana? Ako samo usmjerimo promet na jednog od radnika, što ako se on sruši, a servis postane nedostupan? Za rješavanje ovog problema, Kubernetes ima usluge posebne vrste upravljača opterećenjem. Oni su namijenjeni automatskoj konfiguraciji vanjskog oblaka balansiranja opterećenja na sve radnike u klasteru. Ovaj vanjski uravnoteživač usmjerava vanjski promet na radnike i sam prati njihov status. Ako jedan ili više radnika postanu nedostupni, promet se preusmjerava na druge. To omogućava kreiranje visoko dostupnih servisa pomoću Kubernetesa.

Kubernetes najbolje funkcionira prilikom pokretanja mikroservisnih arhitektura. Uvoditi sustav u klasičnu arhitekturu može, ali to je besmisleno. Ako aplikacija ne može raditi u više replika, koja je svrha razlike — je li u Kubernetesu ili nije?

Open source Kubernetes


Open source Kubernetes – sjajna stvar: postavite i radi. Možete ga implementirati na vlastitim serverima, na vlastitoj infrastrukturi, postaviti master i radne jedinice na kojima će se pokretati sve aplikacije. A najvažnije je da je sve to besplatno. Međutim, postoje nijanse.

  • Prva nijansa – zahtjevi za znanjem i iskustvom administratora i inženjera koji će sve to implementirati i održavati. S obzirom na to da klijent dobiva potpunu slobodu djelovanja u klasteru, odgovornost za rad klastera snosi on sam. A ovdje je vrlo lako sve pokvariti.
  • Druga nijansa – nedostatak integracija. Ako pokrećete Kubernetes bez neke popularne platforme virtualizacije, nećete dobiti sve prednosti programa, poput korištenja Persistent Volumes i Load balancer servisa.

Kubernetes: open source protiv vendorskih

Slika 2. Arhitektura k8s

Kubernetes od dobavljača


Integracija s cloud provajderom pruža dvije mogućnosti:

  • Prvo, osoba može jednostavno pritisnuti dugme „napravi klaster“ i dobiti već podešen i spreman klaster.
  • Drugo, dobavljač sam postavlja klaster i podešava integraciju s oblakom.

Kako to kod nas funkcioniše. Inženjer koji pokreće klaster navodi koliko mu je potrebno radnih jedinica i s kojim parametrima (na primjer, 5 radnih jedinica, svaka sa 10 CPU, 16 GB RAM-a i, recimo, 100 GB diska). Nakon toga dobiva pristup već formiranom klasteru. Pri tome, radne jedinice na kojima se pokreće opterećenje potpuno su predate klijentu, ali cijeli upravljački sloj ostaje pod nadležnošću dobavljača (u slučaju da se usluga pruža po modelu upravljane usluge).

Međutim, takva shema ima svoje nedostatke. Zbog toga što upravljački sloj ostaje kod dobavljača, on ne daje potpun pristup klijentu, što smanjuje fleksibilnost u radu s Kubernetesom. Ponekad klijent želi integrirati neki specifični funkcionalnost s Kubernetesom, na primjer, autentifikaciju preko LDAP-a, a konfiguracija upravljačkog sloja to ne dopušta.

Kubernetes: open source protiv vendorskih

Slika 3. Primer klastera Kubernetes od cloud provajdera

Što odabrati: open source ili dobavljački


Dakle, open source Kubernetes ili odabir od strane dobavljača? Ako se odlučite za open source Kubernetes, korisnik radi što želi. No, postoji velika vjerojatnost da si mogu nanijeti štetu. S dobavljačkim rješenjem to je složenije, jer je sve već razrađeno i postavljeno. Najveći nedostatak open source Kubernetes-a su zahtjevi prema stručnjacima. S dobavljačkim rješenjem kompanija je oslobođena tog problema, ali će morati odlučiti: plaćati vlastite stručnjake ili dobavljaču.

Kubernetes: open source protiv vendorskih

Kubernetes: open source protiv vendorskih

Pa, prednosti su očite, a nedostaci također poznati. Ono što ostaje nepromijenjeno: Kubernetes rješava brojne probleme automatizacijom upravljanja mnogim kontejnerima. Koji odabrati, open source ili dobavljačev, svatko donosi odluku sam.

Članak je pripremio Dmitrij Krasnov, glavni arhitekt usluge Containerum pružatelja #CloudMTS.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster