Kubernetes: otvoreni kod nasuprot dobavljača

Pozdrav, moje ime je Dmitry Krasnov. Više od pet godina administriram Kubernetes klastere i gradim složene arhitekture mikroservisa. Početkom ove godine lansirali smo servis za upravljanje Kubernetes klasterima temeljen na Containerumu. Iskoristivši ovu priliku, reći ću vam što je Kubernetes i kako se integracija s dobavljačem razlikuje od otvorenog koda.

Za početak, što je Kubernetes. Ovo je sustav za upravljanje spremnicima na velikom broju hostova. Usput, s grčkog se prevodi kao "pilot" ili "kormilar". Izvorno razvijen od strane Googlea, a potom doniran kao tehnološki doprinos Cloud Native Computing Foundation, međunarodnoj neprofitnoj organizaciji koja okuplja vodeće svjetske programere, krajnje korisnike i pružatelje kontejnerske tehnologije.

Kubernetes: otvoreni kod nasuprot dobavljača

Upravljajte velikim brojem spremnika

Sada shvatimo kakve su to posude. Ovo je aplikacija sa svojim cjelokupnim okruženjem - uglavnom bibliotekama o kojima program ovisi. Sve je to zapakirano u arhive i predstavljeno u obliku slike koja se može pokrenuti bez obzira na operativni sustav, testirati i još mnogo toga. Ali postoji problem - upravljanje spremnicima na velikom broju hostova je vrlo teško. Zato je stvoren Kubernetes.

Slika spremnika predstavlja aplikaciju plus njezine ovisnosti. Aplikacija, njezine ovisnosti i slika OS datotečnog sustava nalaze se u različitim dijelovima slike, takozvanim slojevima. Slojevi se mogu ponovno koristiti za različite spremnike. Na primjer, sve aplikacije u tvrtki mogu koristiti Ubuntu osnovni sloj. Prilikom pokretanja spremnika, nema potrebe za pohranjivanjem višestrukih kopija jednog osnovnog sloja na glavnom računalu. To vam omogućuje optimiziranje pohrane i isporuke slika.

Kada želimo pokrenuti aplikaciju iz spremnika, potrebni slojevi se postavljaju jedan na drugi i formira se preklapajući datotečni sustav. Na vrh se postavlja sloj za snimanje koji se uklanja kada se spremnik zaustavi. Ovo osigurava da kada se spremnik pokrene, aplikacija će uvijek imati isto okruženje koje se ne može mijenjati. To jamči ponovljivost okruženja na različitim operativnim sustavima. Bilo da se radi o Ubuntuu ili CentOS-u, okruženje će uvijek biti isto. Osim toga, spremnik je izoliran od glavnog računala pomoću mehanizama ugrađenih u Linux kernel. Aplikacije u spremniku ne vide datoteke, procese hosta i susjednih spremnika. Ova izolacija aplikacija od glavnog OS-a pruža dodatni sloj sigurnosti.

Dostupni su mnogi alati za upravljanje spremnicima na hostu. Najpopularniji od njih je Docker. Omogućuje vam da osigurate puni životni ciklus spremnika. Međutim, radi samo na jednom hostu. Ako trebate upravljati spremnicima na više hostova, Docker može napraviti pakao od života inženjerima. Zato je stvoren Kubernetes.

Potražnja za Kubernetesom je upravo zbog mogućnosti upravljanja grupama spremnika na više hostova kao nekom vrstom jedinstvene cjeline. Popularnost sustava pruža mogućnost izgradnje DevOps ili Development Operations, u kojima se Kubernetes koristi za pokretanje procesa ovog samog DevOpsa.

Kubernetes: otvoreni kod nasuprot dobavljača

Slika 1. Shematski prikaz rada Kubernetesa

Potpuna automatizacija

DevOps je u osnovi automatizacija procesa razvoja. Grubo govoreći, programeri pišu kod koji se učitava u repozitorij. Zatim se ovaj kod može odmah automatski prikupiti u spremnik sa svim bibliotekama, testirati i "izbaciti" u sljedeću fazu - Staging, a zatim odmah u Proizvodnju.

Zajedno s Kubernetesom, DevOps vam omogućuje da automatizirate ovaj proces tako da se odvija gotovo bez sudjelovanja samih programera. Zbog toga je build znatno brži, budući da programer to ne mora raditi na svom računalu - on jednostavno napiše dio koda, gurne kod u repozitorij, nakon čega se pokreće cjevovod koji može uključivati ​​proces izgradnje, testiranja i izvođenja. I to se događa sa svakim predanjem, tako da se testiranje odvija neprekidno.

U isto vrijeme, korištenje spremnika omogućuje vam da budete sigurni da će cjelokupno okruženje ovog programa biti pušteno u proizvodnju točno u obliku u kojem je testirano. Odnosno, neće biti problema tipa “bile su neke verzije u testu, druge u produkciji, ali kad smo ih instalirali, sve je palo”. A budući da danas imamo trend prema mikroservisnoj arhitekturi, kada umjesto jedne ogromne aplikacije postoje stotine malih, da bi se njima ručno upravljalo, bit će potrebno ogromno osoblje zaposlenika. Zato koristimo Kubernetes.

Prednosti, prednosti, prednosti


Ako govorimo o prednostima Kubernetesa kao platforme, onda on ima značajne prednosti sa stajališta upravljanja mikroservisnom arhitekturom.

  • Upravljanje više replika. Najvažnija stvar je upravljanje spremnicima na više hostova. Što je još važnije, upravljajte više replika aplikacija u spremnicima kao jednim entitetom. Zahvaljujući tome, inženjeri ne moraju brinuti o svakom pojedinačnom spremniku. Ako se jedan od spremnika sruši, Kubernetes će to vidjeti i ponovno ga pokrenuti.
  • Mreža klastera. Kubernetes također ima takozvanu mrežu klastera s vlastitim adresnim prostorom. Zahvaljujući tome, svaka mahuna ima svoju adresu. Subpod se shvaća kao minimalna strukturna jedinica klastera u kojoj se izravno pokreću spremnici. Osim toga, Kubernetes ima funkcionalnost koja kombinira balanser opterećenja i otkrivanje usluge. To vam omogućuje da se riješite ručnog upravljanja IP adresama i delegirate ovaj zadatak Kubernetesu. A automatske provjere zdravlja pomoći će u otkrivanju problema i preusmjeravanju prometa na radne module.
  • Konfiguracijski menadžment. Kada upravljate velikim brojem aplikacija, postaje teško upravljati konfiguracijom aplikacije. U tu svrhu Kubernetes ima posebne ConfigMap resurse. Omogućuju vam središnje pohranjivanje konfiguracija i njihovo izlaganje podovima prilikom pokretanja aplikacija. Ovaj mehanizam omogućuje nam jamčenje dosljednosti konfiguracije u najmanje deset ili stotinu replika aplikacija.
  • Trajni volumeni. Spremnici su sami po sebi nepromjenjivi i kada se spremnik zaustavi, svi podaci upisani u datotečni sustav bit će uništeni. Ali neke aplikacije pohranjuju podatke izravno na disk. Kako bi riješio ovaj problem, Kubernetes ima funkciju upravljanja pohranom na disku - Persistent Volumes. Ovaj mehanizam koristi vanjsku pohranu podataka i može prenijeti stalnu pohranu, blok ili datoteku, u spremnike. Ovo rješenje omogućuje pohranjivanje podataka odvojeno od radnika, što ih štedi ako se ti isti radnici pokvare.
  • Balansiranje opterećenja. Iako u Kubernetesu upravljamo apstraktnim entitetima kao što su Deployment, StatefulSet itd., u konačnici se spremnici pokreću na običnim virtualnim strojevima ili hardverskim poslužiteljima. Nisu savršeni i mogu pasti bilo kada. Kubernetes će to vidjeti i preusmjeriti interni promet na druge replike. Ali što učiniti s prometom koji dolazi izvana? Ako jednostavno usmjerite promet na jednog od radnika, ako se sruši, usluga će postati nedostupna. Kako bi riješio ovaj problem, Kubernetes ima usluge poput Load Balancera. Dizajnirani su za automatsku konfiguraciju vanjskog balansera oblaka za sve radnike u klasteru. Ovaj vanjski balanser usmjerava vanjski promet prema radnicima i sam nadzire njihov status. Ako jedan ili više radnika postane nedostupno, promet se preusmjerava na druge. To vam omogućuje stvaranje vrlo dostupnih usluga pomoću Kubernetesa.

Kubernetes najbolje radi kada se izvode arhitekture mikroservisa. Sustav je moguće implementirati u klasičnu arhitekturu, ali je besmisleno. Ako aplikacija ne može raditi na više replika, kakva je onda razlika - u Kubernetesu ili ne?

Kubernetes otvorenog koda


Open source Kubernetes je super stvar: instalirao sam ga i radi. Možete ga implementirati na vlastitim hardverskim poslužiteljima, na vlastitoj infrastrukturi, instalirati mastere i workere na kojima će se izvoditi sve aplikacije. I što je najvažnije, sve je to besplatno. Međutim, postoje nijanse.

  • Prvi je zahtjev za znanjem i iskustvom administratora i inženjera koji će sve to implementirati i podržati. Budući da klijent dobiva potpunu slobodu djelovanja u klasteru, on je sam odgovoran za performanse klastera. I ovdje je vrlo lako sve pokvariti.
  • Drugi je nedostatak integracija. Ako pokrećete Kubernetes bez popularne virtualizacijske platforme, nećete dobiti sve prednosti programa. Kao što je korištenje trajnih volumena i usluga balansiranja opterećenja.

Kubernetes: otvoreni kod nasuprot dobavljača

Slika 2. k8s arhitektura

Kubernetes od dobavljača


Integracija s pružateljem usluga oblaka pruža dvije mogućnosti:

  • Prvo, osoba može jednostavno kliknuti na gumb "kreiraj klaster" i dobiti klaster koji je već konfiguriran i spreman za upotrebu.
  • Drugo, dobavljač sam instalira klaster i postavlja integraciju s oblakom.

Kako se to ovdje događa. Inženjer koji pokreće klaster određuje koliko mu radnika treba i s kojim parametrima (npr. 5 radnika, svaki s 10 CPU-a, 16 GB RAM-a i recimo 100 GB diska). Nakon toga dobiva pristup već formiranom klasteru. U tom slučaju radnici na koje se pokreće opterećenje u potpunosti se prenose na klijenta, ali cijela razina upravljanja ostaje pod odgovornošću dobavljača (ako se usluga pruža prema modelu upravljane usluge).

Međutim, ova shema ima svoje nedostatke. Zbog činjenice da plan upravljanja ostaje kod dobavljača, dobavljač ne daje potpuni pristup klijentu, a to smanjuje fleksibilnost u radu s Kubernetesom. Ponekad se dogodi da klijent želi dodati neku specifičnu funkcionalnost u Kubernetes, na primjer, autentifikaciju putem LDAP-a, ali konfiguracija plana upravljanja to ne dopušta.

Kubernetes: otvoreni kod nasuprot dobavljača

Slika 3. Primjer Kubernetes klastera od pružatelja usluga oblaka

Što odabrati: open source ili dobavljača


Dakle, je li Kubernetes otvorenog koda ili specifičan za dobavljača? Ako uzmemo open source Kubernetes, onda korisnik s njim radi što želi. Ali postoji velika šansa da si pucate u nogu. S dobavljačem je teže, jer je sve osmišljeno i konfigurirano za tvrtku. Najveći nedostatak Kubernetesa otvorenog koda je potreba za stručnjacima. Uz opciju dobavljača, tvrtka je oslobođena ove glavobolje, ali će morati odlučiti hoće li platiti svojim stručnjacima ili dobavljaču.

Kubernetes: otvoreni kod nasuprot dobavljača

Kubernetes: otvoreni kod nasuprot dobavljača

Pa, prednosti su očite, nedostatci su također poznati. Jedna stvar je stalna: Kubernetes rješava mnoge probleme automatiziranjem upravljanja mnogim spremnicima. A kojeg odabrati, open source ili dobavljača - svatko odlučuje za sebe.

Članak je pripremio Dmitrij Krasnov, vodeći arhitekt usluge Containerum pružatelja #CloudMTS

Izvor: www.habr.com

Dodajte komentar