Kubernetes - pripitomljavanje oblaka

Kada želite koristiti Linux za pružanje usluga nekom poduzeću, te usluge moraju biti sigurne, elastične i skalabilne. Lijepe riječi, ali što podrazumijevamo pod njima?

"Sigurno" znači da korisnici mogu pristupiti podacima koji su im potrebni, bilo da imaju pristup samo za čitanje ili pristup pisanju. Istodobno, nijedan podatak nije izložen nijednoj strani koja nije ovlaštena vidjeti ih. Sigurnost je varljiva: možete misliti da ste sve zaštitili da biste kasnije saznali da postoje rupe. Dizajniranje sigurnosti od početka projekta daleko je jednostavnije od pokušaja naknadne ugradnje.

"Otporan" znači da vaše usluge toleriraju kvarove unutar infrastrukture. Kvar je možda kontroler poslužiteljskog diska koji više ne može pristupiti nijednom disku, čineći podatke nedostupnima. Ili je kvar možda mrežni prekidač koji više ne omogućuje komunikaciju dva ili više sustava. U tom kontekstu, "jedna točka kvara" ili SPOF je kvar koji negativno utječe na dostupnost usluge. Otporna infrastruktura je ona bez SPOF-ova.

"Skalabilan" opisuje sposobnost sustava da graciozno podnose skokove potražnje. Također određuje koliko se lako mogu izvršiti promjene u sustavima. Na primjer, dodavanje novog korisnika, povećanje kapaciteta za pohranu ili premještanje infrastrukture s Amazonovih web usluga na Google Cloud - ili čak njezino premještanje u kući.

Čim se vaša infrastruktura proširi izvan jednog poslužitelja, postoji puno mogućnosti za povećanje sigurnosti, otpornosti i skalabilnosti. Pogledat ćemo kako su se ti problemi tradicionalno rješavali i koja je nova tehnologija dostupna koja mijenja lice velikih računalnih aplikacija.

Nabavite još Linuxa!

Uživate li u onome što čitate? Želite više Linuxa i otvorenog koda? Možemo dostaviti, doslovno! Pretplatite se na Linux Format već danas po povoljnoj cijeni. Možete dobiti izdanja za tisak, digitalna izdanja ili zašto ne oba? Dostavljamo na vaša vrata širom svijeta po jednostavnoj godišnjoj naknadi. Dakle, učinite svoj život boljim i lakšim, pretplatite se odmah!

Da biste razumjeli što je danas moguće, korisno je pogledati kako se tehnološki projekti tradicionalno provode. U stara vremena - odnosno prije više od 10 godina - tvrtke bi kupovale ili unajmljivale hardver za pokretanje svih komponenata svojih aplikacija. Čak i relativno jednostavne aplikacije, poput WordPress web mjesta, imaju više komponenti. U slučaju WordPressa, potrebna je MySQL baza podataka zajedno s web poslužiteljem, poput Apachea, i načinom rukovanja PHP kodom. Dakle, napravili bi poslužitelj, postavili Apache, PHP i MySQL, instalirali WordPress i krenuli.

Uglavnom, to je uspjelo. Uspjelo je dovoljno dobro da i danas postoji još uvijek ogroman broj poslužitelja konfiguriranih na takav način. Ali nije bilo savršeno, a dva od većih problema bila su elastičnost i skalabilnost.

Nedostatak elastičnosti značio je da bi bilo koji značajan problem na poslužitelju rezultirao gubitkom usluge. Jasno je da katastrofalni neuspjeh ne bi značio da postoji web stranica, ali također nije bilo mjesta za obavljanje redovnog održavanja bez utjecaja na web mjesto. Čak i za instaliranje i aktiviranje rutinskog sigurnosnog ažuriranja za Apache bilo bi potrebno nekoliko sekundi prekida rada web stranice.

Problem otpornosti uglavnom je riješen izgradnjom "klastera visoke dostupnosti". Načelo je bilo da dva poslužitelja vode web mjesto, konfigurirano tako da neuspjeh niti jednog nije rezultirao padom web mjesta. Usluga koja se pružala bila je elastična čak i ako pojedinačni poslužitelji nisu.

Apstraktni oblaci

Dio snage Kubernetesa je apstrakcija koju nudi. Iz perspektive programera, oni razvijaju aplikaciju koja će se izvoditi u Dockerovom spremniku. Dockera nije briga radi li na sustavu Windows, Linux ili nekom drugom operativnom sustavu. Isti taj Docker spremnik može se preuzeti s MacBooka programera i pokretati pod Kubernetesom bez ikakvih izmjena.

Sama instalacija Kubernetes može biti jedan stroj. Naravno, mnoge prednosti Kubernetesa neće biti dostupne: neće biti automatskog skaliranja; postoji očita jedina točka neuspjeha, i tako dalje. Kao dokaz koncepta u testnom okruženju to ipak djeluje.

Kad ste spremni za produkciju, možete pokrenuti vlastiti program ili pružatelja usluge Cloud, poput AWS-a ili Google Cloud-a. Davatelji usluga Cloud imaju neke ugrađene usluge koje pomažu u pokretanju Kubernetesa, ali niti jedan nije teški zahtjev. Ako se želite kretati između Googlea, Amazona i vlastite infrastrukture, postavite Kubernetes i prijeđite na drugu stranu. Nijedna od vaših aplikacija ne mora se mijenjati ni na koji način.

A gdje je Linux? Kubernetes radi na Linuxu, ali operativni sustav je nevidljiv za aplikacije. Ovo je značajan korak u zrelosti i upotrebljivosti IT infrastrukture.

Slashdot efekt

Problem skalabilnosti je malo zamršeniji. Recimo da vaša web stranica WordPress mjesečno primi 1000 posjetitelja. Jednog dana vaše se poslovanje spominje na radiju 4 ili na televiziji s doručkom. Odjednom u 20 minuta posjetite više od mjesec dana. Svi smo čuli priče o ‘padovima’ web stranica, i to je tipično razlog: nedostatak skalabilnosti.

Dva poslužitelja koja su pomogla otpornosti mogla su upravljati većim radnim opterećenjem nego što je to mogao jedan poslužitelj, ali to je još uvijek ograničeno. Dva biste poslužitelja platili 100 posto vremena, a većinu vremena oba su radila savršeno. Vjerojatno je da je samo jedan mogao pokretati vašu web lokaciju. Tada John Humphrys spominje vašu tvrtku danas i trebat će vam 10 poslužitelja za podnošenje tereta, ali samo na nekoliko sati.

Bolje rješenje problema elastičnosti i skalabilnosti bilo je računanje u oblaku. Postavite jednu ili dvije instance poslužitelja - male poslužitelje koji pokreću vaše aplikacije - na Amazon Web Services (AWS) ili Google Cloud, a ako jedna od instanci iz nekog razloga ne uspije, automatski će se ponovno pokrenuti. Pravilno postavite automatsko skaliranje i kada gospodin Humphrys uzrokuje brzi rast opterećenja na instancama vašeg web poslužitelja, automatski se pokreću dodatne instance poslužitelja za dijeljenje radnog opterećenja. Kasnije, kad kamate padnu, te se dodatne instance zaustavljaju i plaćate samo ono što koristite. Savršeno … ili je?

Iako je rješenje u oblaku mnogo fleksibilnije od tradicionalnog samostalnog poslužitelja, još uvijek ima problema. Ažuriranje svih primjeraka oblaka koji se izvode nije jednostavno. I razvoj za oblak ima izazove: prijenosno računalo koje koriste vaši programeri možda je slično primjeru oblaka, ali nije isto. Ako se obvežete na AWS, prelazak na Google Cloud složen je poduhvat. I pretpostavimo, iz bilo kojeg razloga, jednostavno ne želite svoje računalo predati Amazonu, Googleu ili Microsoftu?

Spremnici su se pojavili kao sredstvo za zamatanje aplikacija sa svim njihovim ovisnostima u jedan paket koji se može pokrenuti bilo gdje. Spremnici, poput Dockera, mogu se prikazivati ​​na prijenosnim računalima vaših programera na isti način kao i na vašim primjercima u oblaku, ali upravljanje flotom kontejnera postaje sve izazovnije kako broj spremnika raste.

Odgovor je orkestracija spremnika. Ovo je značajan pomak u fokusu. Prije smo se pobrinuli da imamo dovoljno poslužitelja, bili oni fizički ili virtualni, kako bismo mogli osigurati servisiranje radnog opterećenja. Korištenje automatskog skaliranja davatelja usluga u oblaku je pomoglo, ali i dalje smo imali posla s instancama. Morali smo ručno konfigurirati uravnoteživače opterećenja, zaštitne zidove, pohranu podataka i još mnogo toga. Uz orkestraciju kontejnera, sve se to (i mnogo više) rješava. Specificiramo rezultate koji su nam potrebni i naši alati za orkestraciju spremnika ispunjavaju naše zahtjeve. Mi preciziramo što želimo učiniti, a ne kako to želimo učiniti.

Kontinuirana integracija i kontinuirano postavljanje mogu dobro funkcionirati s Kubernetesom. Evo pregleda Jenkinsa koji se koristi za izgradnju i implementaciju Java aplikacije

Postanite Kubernete

Kubernetes (ku-ber-net-eez) danas je vodeći alat za orkestraciju kontejnera, a stigao je od Googlea. Ako netko zna kako upravljati IT infrastrukturom velikih razmjera, Google to zna. Podrijetlo Kubernetesa je Borg, interni Googleov projekt koji se još uvijek koristi za pokretanje većine Googleovih aplikacija, uključujući njegovu tražilicu, Gmail, Google Maps i još mnogo toga. Borg je bio tajna dok Google 2015. o tome nije objavio članak, ali je vrlo jasno pokazao da je Borg glavna inspiracija iza Kubernetesa.

Borg je sustav koji upravlja računalnim resursima u Googleovim podatkovnim centrima i održava Googleove aplikacije, kako proizvodne, tako i druge, pokrenute unatoč kvaru hardvera, iscrpljenosti resursa ili drugim problemima koji bi mogli uzrokovati prekid rada. To čini pažljivim nadgledanjem tisuća čvorova koji čine Borgovu "ćeliju" i spremnika koji se na njima izvode, te pokretanjem ili zaustavljanjem spremnika prema potrebi kao odgovor na probleme ili oscilacije u opterećenju.

Sama Kubernetes rođena je iz Googleove inicijative GIFEE (‘Googleova infrastruktura za sve ostale’) i zamišljena je kao prijateljskija verzija Borga koja bi mogla biti korisna izvan Googlea. Donirana je zakladi Linux 2015. godine formiranjem Cloud Native Computing Foundation (CNCF).

Kubernetes nudi sustav kojim "prijavljujete" svoje spremljene aplikacije i usluge i osigurava da se vaše aplikacije pokreću u skladu s tim izjavama. Ako vaši programi zahtijevaju vanjske resurse, poput uravnoteživača pohrane ili opterećenja, Kubernetes ih može osigurati automatski. Može skalirati vaše aplikacije prema gore ili prema dolje kako bi pratili promjene u opterećenju, a može čak i skalirati čitav vaš klaster po potrebi. Komponente vašeg programa ne trebaju čak ni znati gdje se izvode: Kubernetes pruža usluge internog imenovanja aplikacija kako bi se mogle povezati na "wp_mysql" i automatski povezati s ispravnim resursom. '

Krajnji rezultat je platforma koja se može koristiti za pokretanje vaših aplikacija na bilo kojoj infrastrukturi, od jednog stroja preko lokalnog regala sustava do flote virtualnih strojeva temeljenih na oblaku koji rade na bilo kojem većem pružatelju usluga u oblaku, a svi koriste iste spremnike i konfiguracija. Kubernetes je agnostik dobavljača: pokrenite ga gdje god želite.

Kubernetes je moćan alat i nužno je složen. Prije nego što uđemo u pregled, moramo predstaviti neke pojmove koji se koriste unutar Kubernetesa. Spremnici pokreću pojedinačne aplikacije, kao što je gore rečeno, i grupirani su u mahune. Pod je skupina usko povezanih spremnika koji su raspoređeni zajedno na istom hostu i dijele neke resurse. Spremnici unutar mahune rade timski: oni će izvršavati povezane funkcije, poput spremnika aplikacije i spremnika za bilježenje sa određenim postavkama za aplikaciju.

Pregled Kubernetesa koji prikazuje master koji izvodi ključne komponente i dva čvora. Imajte na umu da se u praksi glavne komponente mogu podijeliti na više sustava

Četiri ključne Kubernetesove komponente su API poslužitelj, Planer, Upravitelj kontrolera i distribuirana baza podataka konfiguracije nazvana etcd. API poslužitelj je u središtu Kubernetesa i djeluje kao primarna krajnja točka za sve zahtjeve upravljanja. Oni se mogu generirati iz različitih izvora, uključujući ostale Kubernetesove komponente, poput planera, administratora putem nadzorne ploče ili web-zasnovanih nadzornih ploča i samih spremničkih aplikacija. Ovjerava zahtjeve i ažurira podatke pohranjene u etcd.

Planer određuje na kojim će se čvorovima izvoditi različiti pods, uzimajući u obzir ograničenja kao što su zahtjevi za resursima, bilo koja hardverska ili softverska ograničenja, radno opterećenje, rokovi i još mnogo toga.

Upravitelj kontrolera nadgleda stanje klastera i pokušat će pokrenuti ili zaustaviti mahune kao nužno, putem API poslužitelja, da dovede klaster u željeno stanje. Također upravlja nekim internim vezama i sigurnosnim značajkama.

Svaki čvor pokreće Kubeletov postupak, koji komunicira s API poslužiteljem i upravlja spremnicima - općenito koristeći Docker - i Kube-Proxy, koji upravlja mrežnim proxyjem i uravnoteženjem opterećenja unutar klastera.

Distribuirani sustav baze podataka etcd dobiva svoje ime iz / itd mapa na Linux sustavima, koja se koristi za čuvanje podataka o konfiguraciji sustava, plus sufiks "d", koji se često koristi za označavanje demonskog procesa. Ciljevi etcd-a su pohranjivanje podataka ključ-vrijednost na distribuiran, dosljedan i tolerantan način pogrešaka.

API poslužitelj čuva sve svoje podatke o stanju u etcd i može istodobno pokretati mnoge instance. Upravitelj planera i kontrolera može imati samo jednu aktivnu instancu, ali koristi sustav najma kako bi odredio koja je pokrenuta instanca glavni. Sve to znači da Kubernetes može raditi kao visoko dostupni sustav bez ijedne točke kvara.

Sve zajedno

Pa kako koristimo te komponente u praksi? Slijedi primjer postavljanja WordPress web stranice pomoću Kubernetesa. Ako biste to željeli učiniti stvarno, tada biste vjerojatno koristili unaprijed definirani recept koji se naziva karta kormila. Dostupni su za brojne uobičajene programe, ali ovdje ćemo pogledati neke korake potrebne za pokretanje i pokretanje WordPress web stranice na Kubernetesu.

Prvi zadatak je definirati lozinku za MySQL:

 kubectl izradi tajnu generičku mysql-pass --from-literal = lozinka = VAŠA_PROSTA 

kubectl će razgovarati s API poslužiteljem, koji će potvrditi naredbu, a zatim spremiti lozinku u etcd. Naše usluge definirane su u YAML datotekama, a sada nam treba trajna pohrana za MySQL bazu podataka.

 apiVersion: v1 kind: PersistentVolumeClaim metapodaci: name: mysql-pv-label labels: app: wordpress spec: accessModes: - ReadWriteOnce resursi: zahtjevi: storage: 20Gi 

Specifikacija bi uglavnom trebala biti sama po sebi razumljiva. Polja imena i naljepnice koriste se za upućivanje na ovu pohranu iz drugih dijelova Kubernetesa, u ovom slučaju našeg WordPress spremnika.

Nakon što definiramo pohranu, možemo definirati MySQL instancu, usmjeravajući je na unaprijed definiranu pohranu. Nakon toga slijedi definiranje same baze podataka. Dajemo toj bazi podataka naziv i oznaku radi lakšeg snalaženja u Kubernetesu.

Sada nam treba još jedan spremnik za pokretanje WordPressa. Dio specifikacije implementacije spremnika je:

 vrsta: Metapodaci o primjeni: ime: wordpress oznake: app: wordpress specifikacije: strategija: vrsta: Ponovno stvaranje 

Vrsta strategije "Ponovno stvaranje" znači da će se bilo koji od koda koji sadrži aplikaciju promijeniti, a zatim će se pokrenute instance izbrisati i ponovno stvoriti. Ostale mogućnosti uključuju mogućnost cikličkog otvaranja novih instanci i uklanjanja postojećih, jednu po jednu, omogućujući da se usluga nastavi izvoditi tijekom postavljanja ažuriranja. Konačno, deklariramo uslugu za sam WordPress koja se sastoji od PHP koda i Apachea. Dio YAML datoteke koji to izjavljuje je:

 metapodaci: ime: wordpress oznake: app: wordpress specifikacije: portovi: - port: 80 selektor: app: wordpress tier: frontend type: LoadBalancer 

Obratite pažnju na zadnji redak, definirajući vrstu usluge kao LoadBalancer. To upućuje Kubernetesa da uslugu učini dostupnom izvan Kubernetesa. Bez te linije ovo bi bila samo interna usluga "samo Kubernetes". I to je to. Kubernetes će sada koristiti te YAML datoteke kao izjavu o tome što je potrebno, te će postaviti pods, veze, pohranu i tako dalje po potrebi kako bi klaster doveo u "željeno" stanje.

Upotrijebite prikaz nadzorne ploče da biste na brzinu dobili sažetak Kubernetesa na djelu

Ovo je nužno bio samo pregled Kubernetesa na visokoj razini, a mnogi detalji i značajke sustava su izostavljeni. Utvrdili smo automatsko skaliranje (i mahune i čvorovi koji čine klaster), cron poslove (pokretanje spremnika prema rasporedu), Ingress (HTTP uravnoteženje opterećenja, prepisivanje i SSL iskrcavanje), RBAC (kontrole pristupa zasnovane na ulogama) , mrežne politike (vatrozid) i još mnogo toga. Kubernetes je izuzetno fleksibilan i izuzetno moćan: za svaku novu IT infrastrukturu mora biti ozbiljan kandidat.

Resursi

Ako niste upoznati s Dockerom, počnite ovdje: https://docs.docker.com/get-started.

Ovdje postoji interaktivni vodič za postavljanje i skaliranje aplikacije: https://kubernetes.io/docs/tutorials/kubernetes-basics.

I pogledajte https://kubernetes.io/docs/setup/scratch kako se gradi klaster.

Možete se igrati besplatnim klasterom Kubernetes na https://tryk8s.com.

Na kraju, ovdje možete objaviti dugačak tehnički rad s izvrsnim pregledom Googleove upotrebe Borga i kako je to utjecalo na dizajn Kubernetesa: https://storage.googleapis.com/pub-tools-public-publication-data/ pdf / 43438.pdf.

Doznajte više o Tiger Computingu.

  • Najbolja pohrana u oblaku 2022-2023. na mreži: besplatne, plaćene i poslovne opcije
Nabavite još Linuxa!

Uživate li u onome što čitate? Želite više Linuxa i otvorenog koda? Možemo dostaviti, doslovno! Pretplatite se na Linux Format već danas po povoljnoj cijeni. Možete dobiti izdanja za tisak, digitalna izdanja ili zašto ne oba? Dostavljamo na vaša vrata širom svijeta po jednostavnoj godišnjoj naknadi. Dakle, učinite svoj život boljim i lakšim, pretplatite se odmah!

Zanimljivi članci...